mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 13:32:15 +00:00
Python code is now formatted to PEP8 All other files are defined in .editorconfig as far as possible.
277 lines
10 KiB
Python
277 lines
10 KiB
Python
from datetime import date
|
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.core.management import call_command
|
|
from django.core.urlresolvers import reverse
|
|
from django.test import TestCase
|
|
from django.test.utils import override_settings
|
|
|
|
from RIGS import models
|
|
|
|
|
|
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(self.venues[1].pk), unicode(self.venues[2].pk)],
|
|
'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 venue has been disposed of
|
|
self.assertRaises(
|
|
ObjectDoesNotExist,
|
|
models.Venue.objects.get,
|
|
pk=self.venues[2].pk)
|
|
|
|
# Check the one we didn't delete is still there
|
|
self.assertEqual(
|
|
models.Venue.objects.get(
|
|
pk=self.venues[3].pk),
|
|
self.venues[3])
|
|
|
|
# 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)
|
|
if event.venue == self.venues[3]: # The one we left in place
|
|
continue
|
|
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(self.persons[1].pk), unicode(self.persons[2].pk)],
|
|
'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)
|
|
|
|
# Check the one we didn't delete is still there
|
|
self.assertEqual(
|
|
models.Person.objects.get(
|
|
pk=self.persons[3].pk),
|
|
self.persons[3])
|
|
|
|
# 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)
|
|
if event.person == self.persons[3]: # The one we left in place
|
|
continue
|
|
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(self.organisations[1].pk), unicode(self.organisations[2].pk)],
|
|
'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)
|
|
|
|
# Check the one we didn't delete is still there
|
|
self.assertEqual(
|
|
models.Organisation.objects.get(
|
|
pk=self.organisations[3].pk),
|
|
self.organisations[3])
|
|
|
|
# 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)
|
|
if event.organisation == self.organisations[
|
|
3]: # The one we left in place
|
|
continue
|
|
self.assertEqual(updatedEvent.organisation, self.organisations[1])
|
|
|
|
|
|
class TestInvoiceDelete(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.events = {
|
|
1: models.Event.objects.create(name="TE E1", start_date=date.today()),
|
|
2: models.Event.objects.create(name="TE E2", start_date=date.today())
|
|
}
|
|
|
|
cls.invoices = {
|
|
1: models.Invoice.objects.create(event=cls.events[1]),
|
|
2: models.Invoice.objects.create(event=cls.events[2])
|
|
}
|
|
|
|
cls.payments = {
|
|
1: models.Payment.objects.create(invoice=cls.invoices[1], date=date.today(), amount=12.34,
|
|
method=models.Payment.CASH)
|
|
}
|
|
|
|
def setUp(self):
|
|
self.profile.set_password('testuser')
|
|
self.profile.save()
|
|
self.assertTrue(
|
|
self.client.login(
|
|
username=self.profile.username,
|
|
password='testuser'))
|
|
|
|
def test_invoice_delete_allowed(self):
|
|
request_url = reverse(
|
|
'invoice_delete', kwargs={
|
|
'pk': self.invoices[2].pk})
|
|
|
|
response = self.client.get(request_url, follow=True)
|
|
self.assertContains(response, "Are you sure")
|
|
|
|
# Check the invoice still exists
|
|
self.assertTrue(models.Invoice.objects.get(pk=self.invoices[2].pk))
|
|
|
|
# Actually delete it
|
|
response = self.client.post(request_url, follow=True)
|
|
|
|
# Check the invoice is deleted
|
|
self.assertRaises(
|
|
ObjectDoesNotExist,
|
|
models.Invoice.objects.get,
|
|
pk=self.invoices[2].pk)
|
|
|
|
def test_invoice_delete_not_allowed(self):
|
|
request_url = reverse(
|
|
'invoice_delete', kwargs={
|
|
'pk': self.invoices[1].pk})
|
|
|
|
response = self.client.get(request_url, follow=True)
|
|
self.assertContains(
|
|
response,
|
|
"To delete an invoice, delete the payments first.")
|
|
|
|
# Check the invoice still exists
|
|
self.assertTrue(models.Invoice.objects.get(pk=self.invoices[1].pk))
|
|
|
|
# Try to actually delete it
|
|
response = self.client.post(request_url, follow=True)
|
|
|
|
# Check this didn't work
|
|
self.assertTrue(models.Invoice.objects.get(pk=self.invoices[1].pk))
|
|
|
|
|
|
class TestSampleDataGenerator(TestCase):
|
|
@override_settings(DEBUG=True)
|
|
def test_generate_sample_data(self):
|
|
# Run the management command and check there are no exceptions
|
|
call_command('generateSampleData')
|
|
|
|
# Check there are lots of events
|
|
self.assertTrue(models.Event.objects.all().count() > 100)
|
|
|
|
def test_production_exception(self):
|
|
from django.core.management.base import CommandError
|
|
|
|
self.assertRaisesRegexp(
|
|
CommandError,
|
|
".*production",
|
|
call_command,
|
|
'generateSampleData')
|