def test_create_person_when_using_new_address(self): information_url = reverse("europeennes_donation_information") res = self.client.post( reverse("europeennes_donation_amount"), {"amount": "200"} ) self.assertRedirects(res, information_url) self.donation_information_payload["email"] = "*****@*****.**" res = self.client.post(information_url, self.donation_information_payload) payment = Payment.objects.get() self.assertRedirects(res, reverse("payment_page", args=[payment.pk])) # simulate correct payment complete_payment(payment) donation_notification_listener(payment) p2 = Person.objects.exclude(pk=self.p1.pk).get() # assert fields have been saved on model for f in [ "first_name", "last_name", "location_address1", "location_address2", "location_zip", "location_city", "location_country", "email", ]: self.assertEqual(getattr(p2, f), self.donation_information_payload[f])
def update_payment_from_transaction(payment, transaction): if transaction.status == SystemPayTransaction.STATUS_COMPLETED: if payment.status == Payment.STATUS_CANCELED: logger.error( f"La transaction Systempay {transaction.pk} a été mise à jour alors que le paiement {payment.pk} était annulé" ) return complete_payment(payment)
def test_can_make_a_loan_when_logged_in(self, on_commit): self.client.force_login(self.p1.role) amount_url = reverse("europeennes_loan_amount") information_url = reverse("europeennes_loan_information") sign_contract_url = reverse("europeennes_loan_sign_contract") res = self.client.get(amount_url) self.assertEqual(res.status_code, 200) res = self.client.post(amount_url, {"amount": "400"}) self.assertRedirects(res, information_url) res = self.client.post(information_url, self.donation_information_payload) self.assertRedirects(res, sign_contract_url) res = self.client.post(sign_contract_url, data={"acceptance": "Y"}) # no other payment payment = Payment.objects.get() self.assertRedirects(res, reverse("payment_page", args=(payment.pk,))) res = self.client.get(reverse("payment_return", args=(payment.pk,))) self.assertEqual(res.status_code, 200) self.p1.refresh_from_db() # assert fields have been saved on model for f in [ "first_name", "last_name", "location_address1", "location_address2", "location_zip", "location_city", "location_country", ]: self.assertEqual(getattr(self.p1, f), self.donation_information_payload[f]) # fake systempay webhook complete_payment(payment) loan_notification_listener(payment) on_commit.assert_called_once() partial = on_commit.call_args[0][0] self.assertEqual(partial.func, generate_and_send_contract) self.assertEqual(partial.args, (payment.id,))
def test_can_donate_while_logged_in(self, send_donation_email): self.client.force_login(self.p1.role) amount_url = reverse("donation_amount") information_url = reverse("donation_information") res = self.client.get(amount_url) self.assertEqual(res.status_code, 200) res = self.client.post(amount_url, {"amount": "200"}) self.assertRedirects(res, information_url) res = self.client.get(information_url) self.assertEqual(res.status_code, 200) res = self.client.post(information_url, self.donation_information_payload) # no other payment payment = Payment.objects.get() self.assertRedirects(res, reverse("payment_page", args=(payment.pk, ))) res = self.client.get(reverse("payment_return", args=(payment.pk, ))) self.assertEqual(res.status_code, 200) self.p1.refresh_from_db() # assert fields have been saved on model for f in [ "first_name", "last_name", "location_address1", "location_address2", "location_zip", "location_city", "location_country", ]: self.assertEqual(getattr(self.p1, f), self.donation_information_payload[f]) # fake systempay webhook complete_payment(payment) donation_notification_listener(payment) send_donation_email.delay.assert_called_once()
def test_allocation_created_on_payment(self): payment = create_payment( person=self.p1, type=DonsConfig.PAYMENT_TYPE, price=10000, mode=SystemPayPaymentMode.id, meta={ "allocation": 10000, "group_id": str(self.group.pk) }, ) complete_payment(payment) notify_status_change(payment) self.assertTrue(Operation.objects.exists()) operation = Operation.objects.get() self.assertEqual(operation.amount, 10000) self.assertEqual(operation.group, self.group)