Merge branch 'master' into markdown

# Conflicts:
#	RIGS/static/css/print.css
#	RIGS/static/css/screen.css
#	RIGS/static/scss/screen.scss
#	RIGS/templates/RIGS/event_print_page.xml
#	RIGS/test_unit.py
#	requirements.txt
This commit is contained in:
2019-11-27 20:38:36 +00:00
130 changed files with 5511 additions and 2068 deletions

View File

@@ -2,7 +2,7 @@ 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.urls import reverse
from django.test import TestCase
from django.test.utils import override_settings
from django.utils.safestring import SafeText
@@ -10,6 +10,7 @@ from django.utils.safestring import SafeText
from RIGS.templatetags.markdown_tags import markdown_filter
from RIGS import models
from reversion import revisions as reversion
class TestAdminMergeObjects(TestCase):
@@ -56,19 +57,19 @@ class TestAdminMergeObjects(TestCase):
change_url = reverse('admin:RIGS_venue_changelist')
data = {
'action': 'merge',
'_selected_action': [unicode(val.pk) for key, val in self.venues.iteritems()]
'_selected_action': [str(val.pk) for key, val in self.venues.items()]
}
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():
for key, venue in self.venues.items():
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()],
'_selected_action': [str(val.pk) for key, val in self.venues.items()],
'post': 'yes',
}
response = self.client.post(change_url, data, follow=True)
@@ -79,7 +80,7 @@ class TestAdminMergeObjects(TestCase):
change_url = reverse('admin:RIGS_venue_changelist')
data = {'action': 'merge',
'_selected_action': [unicode(self.venues[1].pk), unicode(self.venues[2].pk)],
'_selected_action': [str(self.venues[1].pk), str(self.venues[2].pk)],
'post': 'yes',
'master': self.venues[1].pk
}
@@ -98,7 +99,7 @@ class TestAdminMergeObjects(TestCase):
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():
for key, event in self.events.items():
updatedEvent = models.Event.objects.get(pk=event.pk)
if event.venue == self.venues[3]: # The one we left in place
continue
@@ -108,7 +109,7 @@ class TestAdminMergeObjects(TestCase):
change_url = reverse('admin:RIGS_person_changelist')
data = {'action': 'merge',
'_selected_action': [unicode(self.persons[1].pk), unicode(self.persons[2].pk)],
'_selected_action': [str(self.persons[1].pk), str(self.persons[2].pk)],
'post': 'yes',
'master': self.persons[1].pk
}
@@ -127,7 +128,7 @@ class TestAdminMergeObjects(TestCase):
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():
for key, event in self.events.items():
updatedEvent = models.Event.objects.get(pk=event.pk)
if event.person == self.persons[3]: # The one we left in place
continue
@@ -137,7 +138,7 @@ class TestAdminMergeObjects(TestCase):
change_url = reverse('admin:RIGS_organisation_changelist')
data = {'action': 'merge',
'_selected_action': [unicode(self.organisations[1].pk), unicode(self.organisations[2].pk)],
'_selected_action': [str(self.organisations[1].pk), str(self.organisations[2].pk)],
'post': 'yes',
'master': self.organisations[1].pk
}
@@ -156,7 +157,7 @@ class TestAdminMergeObjects(TestCase):
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():
for key, event in self.events.items():
updatedEvent = models.Event.objects.get(pk=event.pk)
if event.organisation == self.organisations[3]: # The one we left in place
continue
@@ -169,6 +170,8 @@ class TestInvoiceDelete(TestCase):
cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com", is_superuser=True,
is_active=True, is_staff=True)
cls.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
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())
@@ -220,6 +223,198 @@ class TestInvoiceDelete(TestCase):
self.assertTrue(models.Invoice.objects.get(pk=self.invoices[1].pk))
class TestPrintPaperwork(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.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
cls.events = {
1: models.Event.objects.create(name="TE E1", start_date=date.today()),
}
cls.invoices = {
1: models.Invoice.objects.create(event=cls.events[1]),
}
def setUp(self):
self.profile.set_password('testuser')
self.profile.save()
self.assertTrue(self.client.login(username=self.profile.username, password='testuser'))
def test_print_paperwork_success(self):
request_url = reverse('event_print', kwargs={'pk': self.events[1].pk})
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
def test_print_invoice_success(self):
request_url = reverse('invoice_print', kwargs={'pk': self.invoices[1].pk})
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
class TestVersioningViews(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.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
cls.events = {}
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.events[1] = models.Event.objects.create(name="TE E1", start_date=date.today())
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.events[2] = models.Event.objects.create(name="TE E2", start_date='2014-03-05')
with reversion.create_revision():
reversion.set_user(cls.profile)
cls.events[1].description = "A test description"
cls.events[1].save()
def setUp(self):
self.profile.set_password('testuser')
self.profile.save()
self.assertTrue(self.client.login(username=self.profile.username, password='testuser'))
def test_event_history_loads_successfully(self):
request_url = reverse('event_history', kwargs={'pk': self.events[1].pk})
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
def test_activity_feed_loads_successfully(self):
request_url = reverse('activity_feed')
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
def test_activity_table_loads_successfully(self):
request_url = reverse('activity_table')
response = self.client.get(request_url, follow=True)
self.assertEqual(response.status_code, 200)
# Some edge cases that have caused server errors in the past
def test_deleted_event(self):
request_url = reverse('activity_feed')
self.events[2].delete()
response = self.client.get(request_url, follow=True)
self.assertContains(response, "TE E2")
self.assertEqual(response.status_code, 200)
def test_deleted_relation(self):
request_url = reverse('activity_feed')
with reversion.create_revision():
person = models.Person.objects.create(name="Test Person")
with reversion.create_revision():
self.events[1].person = person
self.events[1].save()
# Check response contains person
response = self.client.get(request_url, follow=True)
self.assertContains(response, "Test Person")
self.assertEqual(response.status_code, 200)
# Delete person
person.delete()
# Check response still contains person
response = self.client.get(request_url, follow=True)
self.assertContains(response, "Test Person")
self.assertEqual(response.status_code, 200)
class TestEmbeddedViews(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()
def testLoginRedirect(self):
request_url = reverse('event_embed', kwargs={'pk': 1})
expected_url = "{0}?next={1}".format(reverse('login_embed'), request_url)
# Request the page and check it redirects
response = self.client.get(request_url, follow=True)
self.assertRedirects(response, expected_url, status_code=302, target_status_code=200)
# Now login
self.assertTrue(self.client.login(username=self.profile.username, password='testuser'))
# And check that it no longer redirects
response = self.client.get(request_url, follow=True)
self.assertEqual(len(response.redirect_chain), 0)
def testLoginCookieWarning(self):
login_url = reverse('login_embed')
response = self.client.post(login_url, follow=True)
self.assertContains(response, "Cookies do not seem to be enabled")
def testXFrameHeaders(self):
event_url = reverse('event_embed', kwargs={'pk': 1})
login_url = reverse('login_embed')
self.assertTrue(self.client.login(username=self.profile.username, password='testuser'))
response = self.client.get(event_url, follow=True)
with self.assertRaises(KeyError):
response._headers["X-Frame-Options"]
response = self.client.get(login_url, follow=True)
with self.assertRaises(KeyError):
response._headers["X-Frame-Options"]
def testOEmbed(self):
event_url = reverse('event_detail', kwargs={'pk': 1})
event_embed_url = reverse('event_embed', kwargs={'pk': 1})
oembed_url = reverse('event_oembed', kwargs={'pk': 1})
alt_oembed_url = reverse('event_oembed', kwargs={'pk': 999})
alt_event_embed_url = reverse('event_embed', kwargs={'pk': 999})
# Test the meta tag is in place
response = self.client.get(event_url, follow=True, HTTP_HOST='example.com')
self.assertContains(response, '<link rel="alternate" type="application/json+oembed"')
self.assertContains(response, oembed_url)
# Test that the JSON exists
response = self.client.get(oembed_url, follow=True, HTTP_HOST='example.com')
self.assertEqual(response.status_code, 200)
self.assertContains(response, event_embed_url)
# Should also work for non-existant events
response = self.client.get(alt_oembed_url, follow=True, HTTP_HOST='example.com')
self.assertEqual(response.status_code, 200)
self.assertContains(response, alt_event_embed_url)
class TestSampleDataGenerator(TestCase):
@override_settings(DEBUG=True)
def test_generate_sample_data(self):
@@ -232,7 +427,7 @@ class TestSampleDataGenerator(TestCase):
def test_production_exception(self):
from django.core.management.base import CommandError
self.assertRaisesRegexp(CommandError, ".*production", call_command, 'generateSampleData')
self.assertRaisesRegex(CommandError, ".*production", call_command, 'generateSampleData')
class TestMarkdownTemplateTags(TestCase):