mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-25 17:32:16 +00:00
Further template refactoring
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import datetime
|
||||
from datetime import date
|
||||
|
||||
import pytest
|
||||
from django.conf import settings
|
||||
from django.core import mail, signing
|
||||
from django.http import HttpResponseBadRequest
|
||||
@@ -8,6 +9,7 @@ from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
from RIGS import models
|
||||
from pytest_django.asserts import assertContains, assertNotContains
|
||||
|
||||
|
||||
class BaseCase(TestCase):
|
||||
@@ -43,12 +45,32 @@ class TestEventValidation(BaseCase):
|
||||
def test_create(self):
|
||||
url = reverse('event_create')
|
||||
# end time before start access after start
|
||||
response = self.client.post(url, {'start_date': datetime.date(2020, 1, 1), 'start_time': datetime.time(10, 00), 'end_time': datetime.time(9, 00), 'access_at': datetime.datetime(2020, 1, 5, 10)})
|
||||
self.assertFormError(response, 'form', 'end_time', "Unless you've invented time travel, the event can't finish before it has started.")
|
||||
self.assertFormError(response, 'form', 'access_at', "Regardless of what some clients might think, access time cannot be after the event has started.")
|
||||
response = self.client.post(url, {'start_date': datetime.date(2020, 1, 1), 'start_time': datetime.time(10, 00),
|
||||
'end_time': datetime.time(9, 00),
|
||||
'access_at': datetime.datetime(2020, 1, 5, 10)})
|
||||
self.assertFormError(response, 'form', 'end_time',
|
||||
"Unless you've invented time travel, the event can't finish before it has started.")
|
||||
self.assertFormError(response, 'form', 'access_at',
|
||||
"Regardless of what some clients might think, access time cannot be after the event has started.")
|
||||
|
||||
|
||||
class ClientEventAuthorisationTest(BaseCase):
|
||||
def setup_event():
|
||||
models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
|
||||
venue = models.Venue.objects.create(name='Authorisation Test Venue')
|
||||
client = models.Person.objects.create(name='Authorisation Test Person', email='authorisation@functional.test')
|
||||
organisation = models.Organisation.objects.create(name='Authorisation Test Organisation', union_account=True)
|
||||
return models.Event.objects.create(
|
||||
name='Authorisation Test',
|
||||
start_date=date.today(),
|
||||
venue=venue,
|
||||
person=client,
|
||||
organisation=organisation,
|
||||
)
|
||||
|
||||
|
||||
def setup_mail(event, profile):
|
||||
profile.email = "teccie@nottinghamtec.co.uk"
|
||||
profile.save()
|
||||
auth_data = {
|
||||
'name': 'Test ABC',
|
||||
'po': '1234ABCZXY',
|
||||
@@ -56,72 +78,78 @@ class ClientEventAuthorisationTest(BaseCase):
|
||||
'uni_id': 1234567890,
|
||||
'tos': True
|
||||
}
|
||||
hmac = signing.dumps({'pk': event.pk, 'email': 'authemail@function.test',
|
||||
'sent_by': profile.pk})
|
||||
url = reverse('event_authorise', kwargs={'pk': event.pk, 'hmac': hmac})
|
||||
return auth_data, hmac, url
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.hmac = signing.dumps({'pk': self.event.pk, 'email': 'authemail@function.test',
|
||||
'sent_by': self.profile.pk})
|
||||
self.url = reverse('event_authorise', kwargs={'pk': self.event.pk, 'hmac': self.hmac})
|
||||
|
||||
def test_requires_valid_hmac(self):
|
||||
bad_hmac = self.hmac[:-1]
|
||||
url = reverse('event_authorise', kwargs={'pk': self.event.pk, 'hmac': bad_hmac})
|
||||
response = self.client.get(url)
|
||||
self.assertIsInstance(response, HttpResponseBadRequest)
|
||||
# TODO: Add some form of sensbile user facing error
|
||||
# self.assertIn(response.content, "new URL") # check there is some level of sane instruction
|
||||
def test_requires_valid_hmac(client, admin_user):
|
||||
event = setup_event()
|
||||
auth_data, hmac, url = setup_mail(event, admin_user)
|
||||
bad_hmac = hmac[:-1]
|
||||
url = reverse('event_authorise', kwargs={'pk': event.pk, 'hmac': bad_hmac})
|
||||
response = client.get(url)
|
||||
assert isinstance(response, HttpResponseBadRequest)
|
||||
# TODO: Add some form of sensible user facing error
|
||||
# self.assertIn(response.content, "new URL") # check there is some level of sane instruction
|
||||
# response = client.get(url)
|
||||
# assertContains(response, event.organisation.name)
|
||||
|
||||
response = self.client.get(self.url)
|
||||
self.assertContains(response, self.event.organisation.name)
|
||||
|
||||
def test_validation(self):
|
||||
response = self.client.get(self.url)
|
||||
self.assertContains(response, "Terms of Hire")
|
||||
self.assertContains(response, "Account code")
|
||||
self.assertContains(response, "University ID")
|
||||
def test_validation(client, admin_user):
|
||||
event = setup_event()
|
||||
auth_data, hmac, url = setup_mail(event, admin_user)
|
||||
response = client.get(url)
|
||||
assertContains(response, "Terms of Hire")
|
||||
assertContains(response, "Account code")
|
||||
assertContains(response, "University ID")
|
||||
|
||||
response = self.client.post(self.url)
|
||||
self.assertContains(response, "This field is required.", 5)
|
||||
response = client.post(url)
|
||||
assertContains(response, "This field is required.", 5)
|
||||
|
||||
data = self.auth_data
|
||||
data['amount'] = self.event.total + 1
|
||||
auth_data['amount'] = event.total + 1
|
||||
|
||||
response = self.client.post(self.url, data)
|
||||
self.assertContains(response, "The amount authorised must equal the total for the event")
|
||||
self.assertNotContains(response, "This field is required.")
|
||||
response = client.post(url, auth_data)
|
||||
assertContains(response, "The amount authorised must equal the total for the event")
|
||||
assertNotContains(response, "This field is required.")
|
||||
|
||||
data['amount'] = self.event.total
|
||||
response = self.client.post(self.url, data)
|
||||
self.assertContains(response, "Your event has been authorised")
|
||||
auth_data['amount'] = event.total
|
||||
response = client.post(url, auth_data)
|
||||
assertContains(response, "Your event has been authorised")
|
||||
|
||||
self.event.refresh_from_db()
|
||||
self.assertTrue(self.event.authorised)
|
||||
self.assertEqual(self.event.authorisation.email, "authemail@function.test")
|
||||
event.refresh_from_db()
|
||||
assert event.authorised
|
||||
assert str(event.authorisation.email) == "authemail@function.test"
|
||||
|
||||
def test_duplicate_warning(self):
|
||||
auth = models.EventAuthorisation.objects.create(event=self.event, name='Test ABC', email='dupe@functional.test',
|
||||
amount=self.event.total, sent_by=self.profile)
|
||||
response = self.client.get(self.url)
|
||||
self.assertContains(response, 'This event has already been authorised.')
|
||||
|
||||
auth.amount += 1
|
||||
auth.save()
|
||||
def test_duplicate_warning(client, admin_user):
|
||||
event = setup_event()
|
||||
auth_data, hmac, url = setup_mail(event, admin_user)
|
||||
auth = models.EventAuthorisation.objects.create(event=event, name='Test ABC', email='dupe@functional.test',
|
||||
amount=event.total, sent_by=admin_user)
|
||||
response = client.get(url)
|
||||
assertContains(response, 'This event has already been authorised.')
|
||||
|
||||
response = self.client.get(self.url)
|
||||
self.assertContains(response, 'amount has changed')
|
||||
auth.amount += 1
|
||||
auth.save()
|
||||
|
||||
def test_email_sent(self):
|
||||
mail.outbox = []
|
||||
response = client.get(url)
|
||||
assertContains(response, 'amount has changed')
|
||||
|
||||
data = self.auth_data
|
||||
data['amount'] = self.event.total
|
||||
|
||||
response = self.client.post(self.url, data)
|
||||
self.assertContains(response, "Your event has been authorised.")
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
@pytest.mark.django_db(transaction=True)
|
||||
def test_email_sent(admin_client, admin_user, mailoutbox):
|
||||
event = setup_event()
|
||||
auth_data, hmac, url = setup_mail(event, admin_user)
|
||||
|
||||
self.assertEqual(mail.outbox[0].to, ['authemail@function.test'])
|
||||
self.assertEqual(mail.outbox[1].to, [settings.AUTHORISATION_NOTIFICATION_ADDRESS])
|
||||
data = auth_data
|
||||
data['amount'] = event.total
|
||||
response = admin_client.post(url, data)
|
||||
assertContains(response, "Your event has been authorised.")
|
||||
assert len(mailoutbox) == 2
|
||||
assert mailoutbox[0].to == ['authemail@function.test']
|
||||
assert mailoutbox[1].to == [settings.AUTHORISATION_NOTIFICATION_ADDRESS]
|
||||
|
||||
|
||||
class TECEventAuthorisationTest(BaseCase):
|
||||
|
||||
Reference in New Issue
Block a user