From: Ben Sturmfels Date: Mon, 4 Aug 2014 07:18:36 +0000 (+1000) Subject: trac#687: Add unit tests for `redirect` and `redirect_obj`. X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=68c963d6f5e51f3a874e0a22b1bfba2c63435165;p=mediagoblin.git trac#687: Add unit tests for `redirect` and `redirect_obj`. --- diff --git a/mediagoblin/tests/test_response.py b/mediagoblin/tests/test_response.py new file mode 100644 index 00000000..7f929155 --- /dev/null +++ b/mediagoblin/tests/test_response.py @@ -0,0 +1,65 @@ +# 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 . + +from __future__ import absolute_import, unicode_literals + +from werkzeug.wrappers import Request + +from ..tools.response import redirect, redirect_obj + +class TestRedirect(object): + def test_redirect_respects_location(self): + """Test that redirect returns a 302 to location specified.""" + request = Request({}) + response = redirect(request, location='/test') + assert response.status_code == 302 + assert response.location == '/test' + + def test_redirect_respects_querystring(self): + """Test that redirect includes querystring in returned location.""" + request = Request({}) + response = redirect(request, location='', querystring='#baz') + assert response.location == '#baz' + + def test_redirect_respects_urlgen_args(self): + """Test that redirect returns a 302 to location from urlgen args.""" + + # Using a mock urlgen here so we're only testing redirect itself. We + # could instantiate a url_map and map_adaptor with WSGI environ as per + # app.py, but that would really just be testing Werkzeug. + def urlgen(endpoint, **kwargs): + return '/test?foo=bar' + + request = Request({}) + request.urlgen = urlgen + response = redirect(request, 'test-endpoint', foo='bar') + assert response.status_code == 302 + assert response.location == '/test?foo=bar' + + def test_redirect_obj_calls_url_for_self(self): + """Test that redirect_obj returns a 302 to obj's url_for_self().""" + + # Using a mock obj here so that we're only testing redirect_obj itself, + # rather than also testing the url_for_self implementation. + class Foo(object): + def url_for_self(*args, **kwargs): + return '/foo' + + request = Request({}) + request.urlgen = None + response = redirect_obj(request, Foo()) + assert response.status_code == 302 + assert response.location == '/foo'