test_donations.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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(
  24. response.data.keys(), {"name", "amount", "email", "mref", "interval"}
  25. )
  26. self.assertEqual(len(mail.outbox), 1)
  27. self.assertEqual(response.data["interval"], 0)
  28. self.assertIn("ONDON1", response.data["mref"])
  29. self.assertTrue("Name" in direct_debit)
  30. self.assertTrue(data["iban"] in email_internal)
  31. self.assertEqual(reply_to, [])
  32. def test_create_donation_verbose(self):
  33. url = reverse("v1:donation")
  34. data = {
  35. "name": "Komplizierter Vörnämü-ßßß 马大为",
  36. "iban": "DE89370400440532013000",
  37. "bic": "BYLADEM1SWU",
  38. "amount": 123.45,
  39. "message": "hi there, thank you. Also, some random chars: ™ • ½ ¼ ¾ ⅓ ⅔ † ‡ µ ¢ £ € « » ♤ ♧ ♥ ♢ ¿ ",
  40. "email": "email@example.com",
  41. "interval": 3,
  42. }
  43. response = self.client.post(url, data)
  44. self.assertTrue(mail.outbox)
  45. email_internal = str(mail.outbox[0].message())
  46. direct_debit = str(mail.outbox[0].attachments[0][1])
  47. reply_to = mail.outbox[0].reply_to
  48. self.assertStatus(response, status.HTTP_201_CREATED)
  49. self.assertEqual(
  50. response.data.keys(), {"name", "amount", "email", "mref", "interval"}
  51. )
  52. self.assertEqual(len(mail.outbox), 2)
  53. self.assertEqual(response.data["interval"], 3)
  54. self.assertIn("ONDON1", response.data["mref"])
  55. self.assertTrue("Komplizierter Vornamu" in direct_debit)
  56. self.assertTrue(data["iban"] in email_internal)
  57. self.assertEqual(reply_to, [data["email"]])