X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/08cbe099b8b62c2f48d2ff9865716c7d52ec22d2..9d763695198b109f00b5d88a5cfe0190871271aa:/src/paypal/tests.py diff --git a/src/paypal/tests.py b/src/paypal/tests.py index e38fd8476..0d6aaaeff 100644 --- a/src/paypal/tests.py +++ b/src/paypal/tests.py @@ -1,12 +1,12 @@ -# -*- coding: utf-8 -*- # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.contrib.auth.models import User -from mock import MagicMock, Mock, patch, DEFAULT +from unittest import skip +from unittest.mock import MagicMock, Mock, patch, DEFAULT from catalogue.test_utils import WLTestCase +from club.models import Membership, Schedule from .models import BillingAgreement, BillingPlan -from .rest import user_is_subscribed from paypalrestsdk import ResourceNotFound @@ -60,15 +60,28 @@ class PaypalTests(WLTestCase): def tearDownClass(cls): cls.user.delete() + def setUp(self): + super().setUp() + s = Schedule.objects.create( + key='schedule-key', + amount=10, + membership=Membership.objects.create( + user=self.user + ) + ) + + @skip("Changing the flow.") def test_paypal_form(self): response = self.client.get('/paypal/form/') self.assertEqual(response.status_code, 200) + @skip("Changing the flow.") def test_paypal_form_unauthorized(self): """Legacy flow: only allow payment for logged-in users.""" response = self.client.post('/paypal/form/', {"amount": "0"}) self.assertEqual(response.status_code, 403) + @skip("Changing the flow.") def test_paypal_form_invalid(self): """Paypal form: error on bad input.""" self.client.login(username='test', password='test') @@ -79,6 +92,7 @@ class PaypalTests(WLTestCase): len(response.context['form'].errors['amount']), 1) + @skip("Changing the flow.") @patch.multiple('paypalrestsdk', BillingPlan=BillingPlanMock, BillingAgreement=BillingAgreementMock, @@ -100,6 +114,7 @@ class PaypalTests(WLTestCase): # No BillingAgreement created in our DB yet. self.assertEqual(BillingAgreement.objects.all().count(), 0) + @skip("Changing the flow.") @patch('paypalrestsdk.BillingPlan', BillingPlanMock) def test_paypal_form_error(self): """On PayPal error, plan does not get created.""" @@ -129,6 +144,7 @@ class PaypalTests(WLTestCase): # But now the plan should be created. self.assertEqual(BillingPlan.objects.all().count(), 1) + @skip("Changing the flow.") @patch.multiple('paypalrestsdk', BillingPlan=BillingPlanMock, BillingAgreement=BillingAgreementMock, @@ -151,30 +167,34 @@ class PaypalTests(WLTestCase): self.assertEqual(response.status_code, 404) self.assertEqual(BillingAgreement.objects.all().count(), 0) - response = self.client.get('/paypal/return/?token=secret-token') - self.assertEqual(response.status_code, 200) + response = self.client.get('/paypal/return/schedule-key/?token=secret-token') + self.assertEqual(response.status_code, 302) self.assertEqual(BillingAgreement.objects.all().count(), 1) # Repeated returns will not generate further agreements. - response = self.client.get('/paypal/return/?token=secret-token') - self.assertEqual(response.status_code, 200) + response = self.client.get('/paypal/return/schedule-key/?token=secret-token') + self.assertEqual(response.status_code, 302) self.assertEqual(BillingAgreement.objects.all().count(), 1) - self.assertTrue(user_is_subscribed(self.user)) + self.assertTrue(Membership.is_active_for(self.user)) @patch('paypalrestsdk.BillingAgreement', BillingAgreementMock) def test_paypal_app_return(self): self.client.login(username='test', password='test') BillingPlan.objects.create(amount=100) - response = self.client.get('/paypal/app-return/?token=secret-token') - self.assertRedirects(response, 'wolnelekturyapp://paypal_return') + response = self.client.get('/paypal/app-return/schedule-key/?token=secret-token') + self.assertRedirects( + response, 'wolnelekturyapp://paypal_return', + fetch_redirect_response=False) # Repeated returns will not generate further agreements. - response = self.client.get('/paypal/app-return/?token=secret-token') - self.assertRedirects(response, 'wolnelekturyapp://paypal_return') + response = self.client.get('/paypal/app-return/schedule-key/?token=secret-token') + self.assertRedirects( + response, 'wolnelekturyapp://paypal_return', + fetch_redirect_response=False) self.assertEqual(BillingAgreement.objects.all().count(), 1) - self.assertTrue(user_is_subscribed(self.user)) + self.assertTrue(Membership.is_active_for(self.user)) def test_paypal_return_error(self): self.client.login(username='test', password='test') @@ -184,8 +204,10 @@ class PaypalTests(WLTestCase): with patch('paypalrestsdk.BillingAgreement', Mock( execute=Mock(return_value=Mock(id=None)))): self.client.get('/paypal/app-return/?token=secret-token') - response = self.client.get('/paypal/app-return/?token=secret-token') - self.assertRedirects(response, 'wolnelekturyapp://paypal_error') + response = self.client.get('/paypal/app-return/schedule-key/?token=secret-token') + self.assertRedirects( + response, 'wolnelekturyapp://paypal_error', + fetch_redirect_response=False) # No agreement created in our DB if not executed successfully. self.assertEqual(BillingAgreement.objects.all().count(), 0) @@ -194,15 +216,17 @@ class PaypalTests(WLTestCase): with patch('paypalrestsdk.BillingAgreement', Mock( execute=BillingAgreementMock.execute, find=Mock(side_effect=ResourceNotFound(None)))): - response = self.client.get('/paypal/app-return/?token=secret-token') - self.assertRedirects(response, 'wolnelekturyapp://paypal_return') + response = self.client.get('/paypal/app-return/schedule-key/?token=secret-token') + self.assertRedirects( + response, 'wolnelekturyapp://paypal_return', + fetch_redirect_response=False) # Now the agreement exists in our DB, but is not active. self.assertEqual([b.active for b in BillingAgreement.objects.all()], [False]) with patch('paypalrestsdk.BillingAgreement', Mock( find=Mock(return_value=Mock(state='Mocked')))): - self.assertFalse(user_is_subscribed(self.user)) + self.assertFalse(Membership.is_active_for(self.user)) def test_paypal_cancel(self): response = self.client.get('/paypal/cancel/')