tests.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. from django.test import TestCase, Client
  3. from coin.members.tests import MemberTestsUtils
  4. from coin.members.models import Member, LdapUser
  5. from coin.billing.models import Invoice
  6. # Create your tests here.
  7. class BillingTests(TestCase):
  8. def test_download_invoice_pdf_return_a_pdf(self):
  9. """
  10. Test que le téléchargement d'une facture en format pdf retourne bien un
  11. pdf
  12. """
  13. # Créé un membre
  14. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  15. member = Member(first_name = 'A', last_name = 'A',
  16. ldap_cn = ldap_cn)
  17. member.save()
  18. member.change_password('1234')
  19. # Créé une facture
  20. invoice = Invoice(member=member)
  21. invoice.save()
  22. #Se connect en tant que le membre
  23. client = Client()
  24. client.login(username = ldap_cn, password = '1234')
  25. # Tente de télécharger la facture
  26. response = client.get('/billing/invoice/%i/pdf' % invoice.id)
  27. # Vérifie return code 200 et contient chaine %PDF-1.
  28. self.assertContains(response, '%PDF-1.', status_code=200, html=False)
  29. LdapUser.objects.get(pk=ldap_cn).delete();
  30. def test_that_only_owner_of_invoice_can_download_it_as_pdf(self):
  31. """
  32. Test qu'une facture ne peut pas être téléchargée par quelqu'un qui n'en
  33. ait pas le propriétaire.
  34. Test qu'une erreur 403 est bien retournée en cas de tentative
  35. infructueuse
  36. """
  37. # Créé un membre B
  38. member_a_login = MemberTestsUtils.get_random_ldap_cn()
  39. member_a_pwd = '1234'
  40. member_a = Member(first_name = 'A', last_name = 'A',
  41. ldap_cn = member_a_login)
  42. member_a.save()
  43. member_a.change_password(member_a_pwd)
  44. # Créé un membre B
  45. member_b_login = MemberTestsUtils.get_random_ldap_cn()
  46. member_b_pwd = '1234'
  47. member_b = Member(first_name = 'B', last_name = 'B',
  48. ldap_cn = member_b_login)
  49. member_b.save()
  50. member_b.change_password(member_b_pwd)
  51. # Créé une facture pour le membre A
  52. invoice_a = Invoice(member=member_a)
  53. invoice_a.save()
  54. # Simule une connexion en tant que A
  55. client = Client()
  56. client.login(username = member_a_login, password = member_a_pwd)
  57. # Tente de télécharger la facture de A en tant que A
  58. response = client.get('/billing/invoice/%i/pdf' % invoice_a.id)
  59. # Vérifie que B a reçu retour OK 200
  60. self.assertEqual(response.status_code, 200)
  61. # Simule une connexion en tant que B
  62. client = Client()
  63. client.login(username = member_b_login, password = member_b_pwd)
  64. # Tente de télécharger la facture de A en tant que B
  65. response = client.get('/billing/invoice/%i/pdf' % invoice_a.id)
  66. # Vérifie que B a reçu retour Forbidden 403
  67. self.assertEqual(response.status_code, 403)
  68. LdapUser.objects.get(pk=member_a_login).delete();
  69. LdapUser.objects.get(pk=member_b_login).delete();