From: Radek Czajka Date: Mon, 14 Mar 2022 14:25:42 +0000 (+0100) Subject: Housekeeping. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/5d1dcf0b143ba6409b66ca13ddf31143d6e00a59?hp=33af401eb4abe15a37d0147807d06a9b19eaa802 Housekeeping. --- diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 62bad5358..04d69b77a 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,7 +1,7 @@ -i https://py.mdrn.pl/simple/ # django -Django==2.2.25 +Django==2.2.27 fnpdjango==0.4.5 docutils==0.16 diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 01f02816a..9e0f7c8c7 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -738,6 +738,8 @@ class Book(models.Model): def update_references(self): from references.models import Entity, Reference master = self.get_master() + if master is None: + master = [] found = set() for i, sec in enumerate(master): for ref in sec.findall('.//ref'): diff --git a/src/catalogue/tests/test_bookmedia.py b/src/catalogue/tests/test_bookmedia.py index 6bc6aa32c..edd17a5d4 100644 --- a/src/catalogue/tests/test_bookmedia.py +++ b/src/catalogue/tests/test_bookmedia.py @@ -22,23 +22,6 @@ class BookMediaTests(WLTestCase): self.book.title = title self.book.save() - def test_diacritics(self): - bm = models.BookMedia(book=self.book, type="ogg", name="Zażółć gęślą jaźń") - self.set_title(bm.name) - bm.file.save(None, self.file) - self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg') - - def test_long_name(self): - bm = models.BookMedia( - book=self.book, type="ogg", - name="Some very very very very very very very very very very very very very very very very long file name") - self.set_title(bm.name) - bm.file.save(bm.name, self.file) - - # reload to see what was really saved - bm = models.BookMedia.objects.get(pk=bm.pk) - self.assertEqual(bm.file.size, 1) - def test_overwrite(self): """ File gets overwritten with same filename on update. @@ -50,56 +33,7 @@ class BookMediaTests(WLTestCase): bm.file.save(None, self.file2) self.assertEqual(bm.file.read(), b'Y') - self.assertEqual(basename(bm.file.name), 'some-media.ogg') - - @skip('broken, but is it needed?') - def test_no_clobber(self): - """ - File save doesn't clobber some other media with similar name. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Tytul") - self.set_title(bm.name) - bm.file.save(None, self.file) - bm2 = models.BookMedia(book=self.book, type='ogg', name="Tytuł") - self.set_title(bm2.name) - bm2.file.save(None, self.file2) - self.assertEqual(basename(bm.file.name), 'tytul.ogg') - self.assertNotEqual(basename(bm2.file.name), 'tytul.ogg') - self.assertEqual(bm.file.read(), b'X') - self.assertEqual(bm2.file.read(), b'Y') - - def test_change_name(self): - """ - File name reflects name change. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - self.set_title(bm.name) - bm.file.save(None, self.file) - self.set_title("Other Title") - bm.save() - self.assertEqual(basename(bm.file.name), 'other-title.ogg') - self.assertEqual(bm.file.read(), b'X') - - @skip('broken, but is it needed?') - def test_change_name_no_clobber(self): - """ - File name after change won't clobber some other file - with similar name. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - self.set_title(bm.name) - bm.file.save(None, self.file) - bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") - self.set_title(bm2.name) - bm2.file.save(None, self.file2) - self.set_title("Title") - bm2.save() - self.assertNotEqual(basename(bm2.file.name), 'title.ogg') - self.assertEqual(bm.file.read(), b'X') - self.assertEqual(bm2.file.read(), b'Y') + self.assertEqual(basename(bm.file.name), 'test-book.ogg') def test_zip_audiobooks(self): paths = [ diff --git a/src/paypal/rest.py b/src/paypal/rest.py index 4d2697229..11693cb8c 100644 --- a/src/paypal/rest.py +++ b/src/paypal/rest.py @@ -117,11 +117,6 @@ def check_agreement(agreement_id): return a.state == 'Active' -def user_is_subscribed(user): - agreements = BillingAgreement.objects.filter(user=user) - return any(agreement.check_agreement() for agreement in agreements) - - def execute_agreement(token): return paypalrestsdk.BillingAgreement.execute(token) diff --git a/src/paypal/tests.py b/src/paypal/tests.py index 52c57473e..0d6aaaeff 100644 --- a/src/paypal/tests.py +++ b/src/paypal/tests.py @@ -5,8 +5,8 @@ from django.contrib.auth.models import User 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,6 +60,16 @@ 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/') @@ -157,34 +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') + 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') + 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') @@ -194,7 +204,7 @@ 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') + response = self.client.get('/paypal/app-return/schedule-key/?token=secret-token') self.assertRedirects( response, 'wolnelekturyapp://paypal_error', fetch_redirect_response=False) @@ -206,7 +216,7 @@ 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') + response = self.client.get('/paypal/app-return/schedule-key/?token=secret-token') self.assertRedirects( response, 'wolnelekturyapp://paypal_return', fetch_redirect_response=False) @@ -216,7 +226,7 @@ class PaypalTests(WLTestCase): 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/')