Ticket #687: issue_687.patch

File issue_687.patch, 3.3 KB (added by Ben Sturmfels, 9 years ago)
  • new file mediagoblin/tests/test_response.py

    From 3094061bd6317f2c319d5e9e47890f7df4bc1928 Mon Sep 17 00:00:00 2001
    From: Ben Sturmfels <ben@sturm.com.au>
    Date: Mon, 4 Aug 2014 17:18:36 +1000
    Subject: [PATCH] trac#687: Add unit tests for `redirect` and `redirect_obj`.
    
    ---
     mediagoblin/tests/test_response.py | 65 ++++++++++++++++++++++++++++++++++++++
     1 file changed, 65 insertions(+)
     create mode 100644 mediagoblin/tests/test_response.py
    
    diff --git a/mediagoblin/tests/test_response.py b/mediagoblin/tests/test_response.py
    new file mode 100644
    index 0000000..7f92915
    - +  
     1# GNU MediaGoblin -- federated, autonomous media hosting
     2# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
     3#
     4# This program is free software: you can redistribute it and/or modify
     5# it under the terms of the GNU Affero General Public License as published by
     6# the Free Software Foundation, either version 3 of the License, or
     7# (at your option) any later version.
     8#
     9# This program is distributed in the hope that it will be useful,
     10# but WITHOUT ANY WARRANTY; without even the implied warranty of
     11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12# GNU Affero General Public License for more details.
     13#
     14# You should have received a copy of the GNU Affero General Public License
     15# along with this program.  If not, see <http://www.gnu.org/licenses/>.
     16
     17from __future__ import absolute_import, unicode_literals
     18
     19from werkzeug.wrappers import Request
     20
     21from ..tools.response import redirect, redirect_obj
     22
     23class TestRedirect(object):
     24    def test_redirect_respects_location(self):
     25        """Test that redirect returns a 302 to location specified."""
     26        request = Request({})
     27        response = redirect(request, location='/test')
     28        assert response.status_code == 302
     29        assert response.location == '/test'
     30
     31    def test_redirect_respects_querystring(self):
     32        """Test that redirect includes querystring in returned location."""
     33        request = Request({})
     34        response = redirect(request, location='', querystring='#baz')
     35        assert response.location == '#baz'
     36
     37    def test_redirect_respects_urlgen_args(self):
     38        """Test that redirect returns a 302 to location from urlgen args."""
     39
     40        # Using a mock urlgen here so we're only testing redirect itself. We
     41        # could instantiate a url_map and map_adaptor with WSGI environ as per
     42        # app.py, but that would really just be testing Werkzeug.
     43        def urlgen(endpoint, **kwargs):
     44            return '/test?foo=bar'
     45
     46        request = Request({})
     47        request.urlgen = urlgen
     48        response = redirect(request, 'test-endpoint', foo='bar')
     49        assert response.status_code == 302
     50        assert response.location == '/test?foo=bar'
     51
     52    def test_redirect_obj_calls_url_for_self(self):
     53        """Test that redirect_obj returns a 302 to obj's url_for_self()."""
     54
     55        # Using a mock obj here so that we're only testing redirect_obj itself,
     56        # rather than also testing the url_for_self implementation.
     57        class Foo(object):
     58            def url_for_self(*args, **kwargs):
     59                return '/foo'
     60
     61        request = Request({})
     62        request.urlgen = None
     63        response = redirect_obj(request, Foo())
     64        assert response.status_code == 302
     65        assert response.location == '/foo'