X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d1d6ea8ed2889f871b6d89d4fae6021f286f921a..0a637ce4b427eb7376f3902ab0e51cf274a8b1da:/src/api/tests/tests.py diff --git a/src/api/tests/tests.py b/src/api/tests/tests.py index 8dd29a5b6..e17db29c7 100644 --- a/src/api/tests/tests.py +++ b/src/api/tests/tests.py @@ -1,4 +1,3 @@ -# -*- 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. # @@ -7,17 +6,16 @@ from os import path import hashlib import hmac import json -from StringIO import StringIO +from io import BytesIO from time import time -from urllib import quote, urlencode -from urlparse import parse_qs +from urllib.parse import quote, urlencode, parse_qs from django.contrib.auth.models import User from django.core.files.uploadedfile import SimpleUploadedFile from django.test import TestCase from django.test.utils import override_settings -from mock import patch -from api.piston.models import Consumer, Token +from unittest.mock import patch +from api.models import Consumer, Token from catalogue.models import Book, Tag from picture.forms import PictureImportForm @@ -40,7 +38,7 @@ class ApiTest(TestCase): return data def assert_response(self, url, name): - content = self.client.get(url).content.rstrip() + content = self.client.get(url).content.decode('utf-8').rstrip() filename = path.join(path.dirname(__file__), 'res', 'responses', name) with open(filename) as f: good_content = f.read().rstrip() @@ -112,12 +110,12 @@ class PictureTests(ApiTest): 'composition8.xml', open(path.join( picture.tests.__path__[0], "files", slug + ".xml" - )).read()) + ), 'rb').read()) img = SimpleUploadedFile( 'kompozycja-8.png', open(path.join( picture.tests.__path__[0], "files", slug + ".png" - )).read()) + ), 'rb').read()) import_form = PictureImportForm({}, { 'picture_xml_file': xml, @@ -179,12 +177,15 @@ class BooksTests(ApiTest): '/api/filter-books/?lektura=true', []) - self.assert_slugs( - '/api/filter-books/?preview=true', - ['grandchild']) + Book.objects.filter(slug='grandchild').update(preview=True) + # Skipping: we don't allow previewed books in filtered list. + #self.assert_slugs( + # '/api/filter-books/?preview=true', + # ['grandchild']) self.assert_slugs( '/api/filter-books/?preview=false', ['child', 'parent']) + Book.objects.filter(slug='grandchild').update(preview=False) self.assert_slugs( '/api/filter-books/?audiobook=true', @@ -233,11 +234,6 @@ class BlogTests(ApiTest): self.assertEqual(self.load_json('/api/blog'), []) -class PreviewTests(ApiTest): - def unauth(self): - self.assert_json_response('/api/preview/', 'preview.json') - - class OAuth1Tests(ApiTest): @classmethod def setUpClass(cls): @@ -265,13 +261,15 @@ class OAuth1Tests(ApiTest): quote(base_query, safe='') ]) h = hmac.new( - quote(self.consumer_secret) + '&', raw, hashlib.sha1 + (quote(self.consumer_secret) + '&').encode('latin1'), + raw.encode('latin1'), + hashlib.sha1 ).digest() - h = b64encode(h).rstrip('\n') + h = b64encode(h).rstrip(b'\n') sign = quote(h) query = "{}&oauth_signature={}".format(base_query, sign) response = self.client.get('/api/oauth/request_token/?' + query) - request_token_data = parse_qs(response.content) + request_token_data = parse_qs(response.content.decode('latin1')) request_token = request_token_data['oauth_token'][0] request_token_secret = request_token_data['oauth_token_secret'][0] @@ -297,16 +295,16 @@ class OAuth1Tests(ApiTest): quote(base_query, safe='') ]) h = hmac.new( - quote(self.consumer_secret) + '&' + - quote(request_token_secret, safe=''), - raw, + (quote(self.consumer_secret) + '&' + + quote(request_token_secret, safe='')).encode('latin1'), + raw.encode('latin1'), hashlib.sha1 ).digest() - h = b64encode(h).rstrip('\n') + h = b64encode(h).rstrip(b'\n') sign = quote(h) - query = u"{}&oauth_signature={}".format(base_query, sign) - response = self.client.get(u'/api/oauth/access_token/?' + query) - access_token_data = parse_qs(response.content) + query = "{}&oauth_signature={}".format(base_query, sign) + response = self.client.get('/api/oauth/access_token/?' + query) + access_token_data = parse_qs(response.content.decode('latin1')) access_token = access_token_data['oauth_token'][0] self.assertTrue( @@ -333,7 +331,7 @@ class AuthorizedTests(ApiTest): consumer=cls.consumer, token_type=Token.ACCESS, timestamp=time()) - cls.key = cls.consumer.secret + '&' + cls.token.secret + cls.key = (cls.consumer.secret + '&' + cls.token.secret).encode('latin1') @classmethod def tearDownClass(cls): @@ -365,7 +363,10 @@ class AuthorizedTests(ApiTest): for (k, v) in sorted(sign_params.items()))) ]) auth_params["oauth_signature"] = quote(b64encode(hmac.new( - self.key, raw, hashlib.sha1).digest()).rstrip('\n')) + self.key, + raw.encode('latin1'), + hashlib.sha1 + ).digest()).rstrip(b'\n')) auth = 'OAuth realm="API", ' + ', '.join( '{}="{}"'.format(k, v) for (k, v) in auth_params.items()) @@ -433,6 +434,8 @@ class AuthorizedTests(ApiTest): ['parent']) def test_subscription(self): + Book.objects.filter(slug='grandchild').update(preview=True) + self.assert_slugs('/api/preview/', ['grandchild']) self.assertEqual( self.signed_json('/api/username/'), @@ -441,16 +444,17 @@ class AuthorizedTests(ApiTest): self.signed('/api/epub/grandchild/').status_code, 403) - with patch('api.fields.user_is_subscribed', return_value=True): + with patch('club.models.Membership.is_active_for', return_value=True): self.assertEqual( self.signed_json('/api/username/'), {"username": "test", "premium": True}) - with patch('paypal.permissions.user_is_subscribed', return_value=True): with patch('django.core.files.storage.Storage.open', - return_value=StringIO("")): + return_value=BytesIO(b"")): self.assertEqual( self.signed('/api/epub/grandchild/').content, - "") + b"") + + Book.objects.filter(slug='grandchild').update(preview=False) def test_publish(self): response = self.signed('/api/books/',