-# -*- 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 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
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')
len(response.context['form'].errors['amount']),
1)
+ @skip("Changing the flow.")
@patch.multiple('paypalrestsdk',
BillingPlan=BillingPlanMock,
BillingAgreement=BillingAgreementMock,
# 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."""
# 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,
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')
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)
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/')