Missing logos.
[wolnelektury.git] / src / paypal / tests.py
index e38fd84..d62e65a 100644 (file)
@@ -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.
+# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
 from django.contrib.auth.models import User
 #
 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 catalogue.test_utils import WLTestCase
+from club.models import Membership, Schedule
 from .models import BillingAgreement, BillingPlan
 from .models import BillingAgreement, BillingPlan
-from .rest import user_is_subscribed
 from paypalrestsdk import ResourceNotFound
 
 
 from paypalrestsdk import ResourceNotFound
 
 
@@ -60,15 +60,28 @@ class PaypalTests(WLTestCase):
     def tearDownClass(cls):
         cls.user.delete()
 
     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)
 
     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)
 
     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')
     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)
 
             len(response.context['form'].errors['amount']),
             1)
 
+    @skip("Changing the flow.")
     @patch.multiple('paypalrestsdk',
         BillingPlan=BillingPlanMock,
         BillingAgreement=BillingAgreementMock,
     @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)
 
         # 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."""
     @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)
 
         # 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,
     @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)
 
         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.
         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.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)
 
     @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.
 
         # 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.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')
 
     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')
         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)
 
         # 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)))):
         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')))):
 
         # 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/')
 
     def test_paypal_cancel(self):
         response = self.client.get('/paypal/cancel/')