From 57c6473aa2146f3337a42cb4b9c54dc164b7b76a Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Sun, 23 Dec 2012 00:34:27 +0100 Subject: Added API tests --- mediagoblin/tests/test_api.py | 104 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 mediagoblin/tests/test_api.py (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py new file mode 100644 index 00000000..de61c681 --- /dev/null +++ b/mediagoblin/tests/test_api.py @@ -0,0 +1,104 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +import logging +import base64 + +from pkg_resources import resource_filename + +from mediagoblin import mg_globals +from mediagoblin.tools import template, pluginapi +from mediagoblin.tests.tools import get_test_app, fixture_add_user + + +_log = logging.getLogger(__name__) + +def resource(filename): + ''' + Borrowed from the submission tests + ''' + return resource_filename('mediagoblin.tests', 'test_submission/' + filename) + + +GOOD_JPG = resource('good.jpg') +GOOD_PNG = resource('good.png') +EVIL_FILE = resource('evil') +EVIL_JPG = resource('evil.jpg') +EVIL_PNG = resource('evil.png') +BIG_BLUE = resource('bigblue.png') + + +class TestAPI(object): + def setUp(self): + self.app = get_test_app() + self.db = mg_globals.database + + self.user_password = u'4cc355_70k3N' + self.user = fixture_add_user(u'joapi', self.user_password) + + def login(self): + self.app.post( + '/auth/login/', { + 'username': self.user.username, + 'password': self.user_password}) + + def get_context(self, template_name): + return template.TEMPLATE_TEST_CONTEXT[template_name] + + def http_auth_headers(self): + return {'Authorization': 'Basic {0}'.format( + base64.b64encode(':'.join([ + self.user.username, + self.user_password])))} + + def do_post(self, data, **kwargs): + url = kwargs.pop('url', '/api/submit') + do_follow = kwargs.pop('do_follow', False) + + if not 'headers' in kwargs.keys(): + kwargs['headers'] = self.http_auth_headers() + + response = self.app.post(url, data, **kwargs) + + if do_follow: + response.follow() + + return response + + def upload_data(self, filename): + return {'upload_files': [('file', filename)]} + + def test_1_test_test_view(self): + self.login() + + response = self.app.get( + '/api/test', + headers=self.http_auth_headers()) + + assert response.body == \ + '{"username": "joapi", "email": "joapi@example.com"}' + + def test_2_test_submission(self): + self.login() + + response = self.do_post( + {'title': 'Great JPG!'}, + **self.upload_data(GOOD_JPG)) + + assert response.status_int == 200 + + assert self.db.MediaEntry.query.filter_by(title='Great JPG!').first() -- cgit v1.2.3 From 1eac751bd2b3ecf4f9bfffe101c3f16f1e49eba6 Mon Sep 17 00:00:00 2001 From: Elrond Date: Sun, 23 Dec 2012 23:55:44 +0100 Subject: Fix some unicode related issues in oauth and the api. Found using the previous commit. --- mediagoblin/tests/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index de61c681..188cdadb 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -101,4 +101,4 @@ class TestAPI(object): assert response.status_int == 200 - assert self.db.MediaEntry.query.filter_by(title='Great JPG!').first() + assert self.db.MediaEntry.query.filter_by(title=u'Great JPG!').first() -- cgit v1.2.3 From 40cec2b4445cc3ff0aabddcf1ecae26756d5759f Mon Sep 17 00:00:00 2001 From: Sebastian Spaeth Date: Tue, 8 Jan 2013 11:57:25 +0100 Subject: Don't get a fresh app when not needed These tests, don't need fresh databases, so don't discard and recreate the tables. This reduces test suite runtime on my laptop from 130 to 96 seconds. Signed-off-by: Sebastian Spaeth --- mediagoblin/tests/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 188cdadb..4b784da3 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -44,7 +44,7 @@ BIG_BLUE = resource('bigblue.png') class TestAPI(object): def setUp(self): - self.app = get_test_app() + self.app = get_test_app(dump_old_app=False) self.db = mg_globals.database self.user_password = u'4cc355_70k3N' -- cgit v1.2.3 From 1be247b36e58c8c71a974b65dff7194f28483f12 Mon Sep 17 00:00:00 2001 From: Elrond Date: Fri, 18 Jan 2013 11:40:40 +0100 Subject: Rename get_test_app to get_app. nosetests runs everything that even vaguely looks like a test case... even our get_test_app. And as it is imported everywhere... it is run everywhere as a test case. Renaming it saves us about 10+ tests and a few seconds of time. --- mediagoblin/tests/test_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 4b784da3..82b1c1b4 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -22,7 +22,7 @@ from pkg_resources import resource_filename from mediagoblin import mg_globals from mediagoblin.tools import template, pluginapi -from mediagoblin.tests.tools import get_test_app, fixture_add_user +from mediagoblin.tests.tools import get_app, fixture_add_user _log = logging.getLogger(__name__) @@ -44,7 +44,7 @@ BIG_BLUE = resource('bigblue.png') class TestAPI(object): def setUp(self): - self.app = get_test_app(dump_old_app=False) + self.app = get_app(dump_old_app=False) self.db = mg_globals.database self.user_password = u'4cc355_70k3N' -- cgit v1.2.3 From 958080be1673bc654adad03abc93a2d7d05c1386 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Wed, 3 Apr 2013 14:05:42 -0500 Subject: All mediagoblin tests now pass with py.test (switched setUp to setup) --- mediagoblin/tests/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 82b1c1b4..294cc4ef 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -43,7 +43,7 @@ BIG_BLUE = resource('bigblue.png') class TestAPI(object): - def setUp(self): + def setup(self): self.app = get_app(dump_old_app=False) self.db = mg_globals.database -- cgit v1.2.3 From 5c2ece7401723486d76ea0fcd2f99ba4d1002504 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Thu, 4 Apr 2013 19:23:04 -0500 Subject: Switch test_app generation over to use py.test fixtures. By doing this, we can take advantage of py.test's ability to create temporary directories that are then cleaned up later during testing. This helps for sandboxing things. This also involves a ton of changes: - Changing the get_app stuff appropriately, getting rid of the setup_fresh_app decorator - Making said fixture - Switching over a billion tests to use it --- mediagoblin/tests/test_api.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 294cc4ef..25ce852b 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -20,9 +20,11 @@ import base64 from pkg_resources import resource_filename +import pytest + from mediagoblin import mg_globals from mediagoblin.tools import template, pluginapi -from mediagoblin.tests.tools import get_app, fixture_add_user +from mediagoblin.tests.tools import fixture_add_user _log = logging.getLogger(__name__) @@ -42,16 +44,16 @@ EVIL_PNG = resource('evil.png') BIG_BLUE = resource('bigblue.png') +@pytest.mark.usefixtures("test_app") class TestAPI(object): def setup(self): - self.app = get_app(dump_old_app=False) self.db = mg_globals.database self.user_password = u'4cc355_70k3N' self.user = fixture_add_user(u'joapi', self.user_password) - def login(self): - self.app.post( + def login(self, test_app): + test_app.post( '/auth/login/', { 'username': self.user.username, 'password': self.user_password}) @@ -65,14 +67,14 @@ class TestAPI(object): self.user.username, self.user_password])))} - def do_post(self, data, **kwargs): + def do_post(self, data, test_app, **kwargs): url = kwargs.pop('url', '/api/submit') do_follow = kwargs.pop('do_follow', False) if not 'headers' in kwargs.keys(): kwargs['headers'] = self.http_auth_headers() - response = self.app.post(url, data, **kwargs) + response = test_app.post(url, data, **kwargs) if do_follow: response.follow() @@ -82,21 +84,22 @@ class TestAPI(object): def upload_data(self, filename): return {'upload_files': [('file', filename)]} - def test_1_test_test_view(self): - self.login() + def test_1_test_test_view(self, test_app): + self.login(test_app) - response = self.app.get( + response = test_app.get( '/api/test', headers=self.http_auth_headers()) assert response.body == \ '{"username": "joapi", "email": "joapi@example.com"}' - def test_2_test_submission(self): - self.login() + def test_2_test_submission(self, test_app): + self.login(test_app) response = self.do_post( {'title': 'Great JPG!'}, + test_app, **self.upload_data(GOOD_JPG)) assert response.status_int == 200 -- cgit v1.2.3 From 7d503a897bddfadcd98d278bdb648503485a19de Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sat, 6 Apr 2013 10:07:47 -0500 Subject: Really removing nosetests things now! all assert_whatever removed --- mediagoblin/tests/test_api.py | 1 - 1 file changed, 1 deletion(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 25ce852b..cff25776 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -44,7 +44,6 @@ EVIL_PNG = resource('evil.png') BIG_BLUE = resource('bigblue.png') -@pytest.mark.usefixtures("test_app") class TestAPI(object): def setup(self): self.db = mg_globals.database -- cgit v1.2.3 From b698c94d035ec0ac5a5f695babf6f84c354510f5 Mon Sep 17 00:00:00 2001 From: Elrond Date: Tue, 16 Apr 2013 00:33:38 +0200 Subject: Refactor test resources into new resources.py --- mediagoblin/tests/test_api.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index cff25776..89cf1026 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -18,31 +18,17 @@ import logging import base64 -from pkg_resources import resource_filename - import pytest from mediagoblin import mg_globals from mediagoblin.tools import template, pluginapi from mediagoblin.tests.tools import fixture_add_user +from .resources import GOOD_JPG, GOOD_PNG, EVIL_FILE, EVIL_JPG, EVIL_PNG, \ + BIG_BLUE _log = logging.getLogger(__name__) -def resource(filename): - ''' - Borrowed from the submission tests - ''' - return resource_filename('mediagoblin.tests', 'test_submission/' + filename) - - -GOOD_JPG = resource('good.jpg') -GOOD_PNG = resource('good.png') -EVIL_FILE = resource('evil') -EVIL_JPG = resource('evil.jpg') -EVIL_PNG = resource('evil.png') -BIG_BLUE = resource('bigblue.png') - class TestAPI(object): def setup(self): -- cgit v1.2.3 From 0536306048daa0970d2e43411ba2a9bf073e570e Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Thu, 16 May 2013 17:51:21 -0500 Subject: Always activate testing in every test module ever. Kind of a dorky way to implement this, but... --- mediagoblin/tests/test_api.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 89cf1026..00cdb137 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -26,6 +26,9 @@ from mediagoblin.tests.tools import fixture_add_user from .resources import GOOD_JPG, GOOD_PNG, EVIL_FILE, EVIL_JPG, EVIL_PNG, \ BIG_BLUE +from mediagoblin.tools.testing import _activate_testing +_activate_testing() + _log = logging.getLogger(__name__) -- cgit v1.2.3 From 9a9bafc078192317695a4f06233ea261fe147989 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 17 May 2013 11:12:56 -0500 Subject: Reverting "Always activate testing in every test module ever." Revert "Always activate testing in every test module ever." This reverts commit 0536306048daa0970d2e43411ba2a9bf073e570e. --- mediagoblin/tests/test_api.py | 3 --- 1 file changed, 3 deletions(-) (limited to 'mediagoblin/tests/test_api.py') diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 00cdb137..89cf1026 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -26,9 +26,6 @@ from mediagoblin.tests.tools import fixture_add_user from .resources import GOOD_JPG, GOOD_PNG, EVIL_FILE, EVIL_JPG, EVIL_PNG, \ BIG_BLUE -from mediagoblin.tools.testing import _activate_testing -_activate_testing() - _log = logging.getLogger(__name__) -- cgit v1.2.3