test_donations.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from django.core import mail
  2. from rest_framework import status
  3. from rest_framework.reverse import reverse
  4. from desecapi.tests.base import DesecTestCase
  5. class DonationTests(DesecTestCase):
  6. def test_unauthorized_access(self):
  7. for method in [self.client.get, self.client.put, self.client.delete]:
  8. response = method(reverse('v1:donation'))
  9. self.assertStatus(response, status.HTTP_405_METHOD_NOT_ALLOWED)
  10. def test_create_donation_minimal(self):
  11. url = reverse('v1:donation')
  12. data = {
  13. 'name': 'Name',
  14. 'iban': 'DE89370400440532013000',
  15. 'amount': 123.45,
  16. }
  17. response = self.client.post(url, data)
  18. self.assertTrue(mail.outbox)
  19. email_internal = str(mail.outbox[0].message())
  20. direct_debit = str(mail.outbox[0].attachments[0][1])
  21. reply_to = mail.outbox[0].reply_to
  22. self.assertStatus(response, status.HTTP_201_CREATED)
  23. self.assertEqual(response.data.keys(), {'name', 'amount', 'email', 'mref', 'interval'})
  24. self.assertEqual(len(mail.outbox), 1)
  25. self.assertEqual(response.data['interval'], 0)
  26. self.assertIn('ONDON1', response.data['mref'])
  27. self.assertTrue('Name' in direct_debit)
  28. self.assertTrue(data['iban'] in email_internal)
  29. self.assertEqual(reply_to, [])
  30. def test_create_donation_verbose(self):
  31. url = reverse('v1:donation')
  32. data = {
  33. 'name': 'Komplizierter Vörnämü-ßßß 马大为',
  34. 'iban': 'DE89370400440532013000',
  35. 'bic': 'BYLADEM1SWU',
  36. 'amount': 123.45,
  37. 'message': 'hi there, thank you. Also, some random chars: ™ • ½ ¼ ¾ ⅓ ⅔ † ‡ µ ¢ £ € « » ♤ ♧ ♥ ♢ ¿ ',
  38. 'email': 'email@example.com',
  39. 'interval': 3,
  40. }
  41. response = self.client.post(url, data)
  42. self.assertTrue(mail.outbox)
  43. email_internal = str(mail.outbox[0].message())
  44. direct_debit = str(mail.outbox[0].attachments[0][1])
  45. reply_to = mail.outbox[0].reply_to
  46. self.assertStatus(response, status.HTTP_201_CREATED)
  47. self.assertEqual(response.data.keys(), {'name', 'amount', 'email', 'mref', 'interval'})
  48. self.assertEqual(len(mail.outbox), 2)
  49. self.assertEqual(response.data['interval'], 3)
  50. self.assertIn('ONDON1', response.data['mref'])
  51. self.assertTrue('Komplizierter Vornamu' in direct_debit)
  52. self.assertTrue(data['iban'] in email_internal)
  53. self.assertEqual(reply_to, [data['email']])