from django.core.urlresolvers import reverse from django.test import TestCase from datetime import date from RIGS import models from django.core.exceptions import ObjectDoesNotExist class TestAdminMergeObjects(TestCase): @classmethod def setUpTestData(cls): cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com", is_superuser=True, is_active=True, is_staff=True) cls.persons = { 1: models.Person.objects.create(name="Person 1"), 2: models.Person.objects.create(name="Person 2"), 3: models.Person.objects.create(name="Person 3"), } cls.organisations = { 1: models.Organisation.objects.create(name="Organisation 1"), 2: models.Organisation.objects.create(name="Organisation 2"), 3: models.Organisation.objects.create(name="Organisation 3"), } cls.venues = { 1: models.Venue.objects.create(name="Venue 1"), 2: models.Venue.objects.create(name="Venue 2"), 3: models.Venue.objects.create(name="Venue 3"), } cls.events = { 1: models.Event.objects.create(name="TE E1", start_date=date.today(), person=cls.persons[1], organisation=cls.organisations[3], venue=cls.venues[2]), 2: models.Event.objects.create(name="TE E2", start_date=date.today(), person=cls.persons[2], organisation=cls.organisations[2], venue=cls.venues[3]), 3: models.Event.objects.create(name="TE E3", start_date=date.today(), person=cls.persons[3], organisation=cls.organisations[1], venue=cls.venues[1]), 4: models.Event.objects.create(name="TE E4", start_date=date.today(), person=cls.persons[3], organisation=cls.organisations[3], venue=cls.venues[3]), } def setUp(self): self.profile.set_password('testuser') self.profile.save() self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) def test_merge_confirmation(self): change_url = reverse('admin:RIGS_venue_changelist') data = { 'action': 'merge', '_selected_action': [unicode(val.pk) for key,val in self.venues.iteritems()] } response = self.client.post(change_url, data, follow=True) self.assertContains(response, "The following objects will be merged") for key,venue in self.venues.iteritems(): self.assertContains(response, venue.name) def test_merge_no_master(self): change_url = reverse('admin:RIGS_venue_changelist') data = {'action': 'merge', '_selected_action': [unicode(val.pk) for key,val in self.venues.iteritems()], 'post':'yes', } response = self.client.post(change_url, data, follow=True) self.assertContains(response, "An error occured") def test_venue_merge(self): change_url = reverse('admin:RIGS_venue_changelist') data = {'action': 'merge', '_selected_action': [unicode(val.pk) for key,val in self.venues.iteritems()], 'post':'yes', 'master':self.venues[1].pk } response = self.client.post(change_url, data, follow=True) self.assertContains(response, "Objects successfully merged") self.assertContains(response, self.venues[1].name) # Check the master copy still exists self.assertTrue(models.Venue.objects.get(pk=self.venues[1].pk)) # Check the un-needed venues have been disposed of self.assertRaises(ObjectDoesNotExist, models.Venue.objects.get, pk=self.venues[2].pk) self.assertRaises(ObjectDoesNotExist, models.Venue.objects.get, pk=self.venues[3].pk) # Check the events have been moved to the master venue for key,event in self.events.iteritems(): updatedEvent = models.Event.objects.get(pk=event.pk) self.assertEqual(updatedEvent.venue, self.venues[1]) def test_person_merge(self): change_url = reverse('admin:RIGS_person_changelist') data = {'action': 'merge', '_selected_action': [unicode(val.pk) for key,val in self.persons.iteritems()], 'post':'yes', 'master':self.persons[1].pk } response = self.client.post(change_url, data, follow=True) self.assertContains(response, "Objects successfully merged") self.assertContains(response, self.persons[1].name) # Check the master copy still exists self.assertTrue(models.Person.objects.get(pk=self.persons[1].pk)) # Check the un-needed people have been disposed of self.assertRaises(ObjectDoesNotExist, models.Person.objects.get, pk=self.persons[2].pk) self.assertRaises(ObjectDoesNotExist, models.Person.objects.get, pk=self.persons[3].pk) # Check the events have been moved to the master person for key,event in self.events.iteritems(): updatedEvent = models.Event.objects.get(pk=event.pk) self.assertEqual(updatedEvent.person, self.persons[1]) def test_organisation_merge(self): change_url = reverse('admin:RIGS_organisation_changelist') data = {'action': 'merge', '_selected_action': [unicode(val.pk) for key,val in self.organisations.iteritems()], 'post':'yes', 'master':self.organisations[1].pk } response = self.client.post(change_url, data, follow=True) self.assertContains(response, "Objects successfully merged") self.assertContains(response, self.organisations[1].name) # Check the master copy still exists self.assertTrue(models.Organisation.objects.get(pk=self.organisations[1].pk)) # Check the un-needed organisations have been disposed of self.assertRaises(ObjectDoesNotExist, models.Organisation.objects.get, pk=self.organisations[2].pk) self.assertRaises(ObjectDoesNotExist, models.Organisation.objects.get, pk=self.organisations[3].pk) # Check the events have been moved to the master organisation for key,event in self.events.iteritems(): updatedEvent = models.Event.objects.get(pk=event.pk) self.assertEqual(updatedEvent.organisation, self.organisations[1])