def test_locale_value_capture_ignore_locale(self): """ Should be able to ignore the original locale. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/", prepend_locale=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/zh-TW/iam/the/walrus/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/donnie/the/walrus/")
def test_value_capture_and_substitution(self): """ Should be able to capture info from URL and use in redirection. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/donnie/the/walrus/'
def test_locale_value_capture_no_locale(self): """ Should get locale value in kwargs and not break if no locale in URL. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/")]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/donnie/the/walrus/")
def test_locale_value_capture(self): """ Should prepend locale value automatically. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/")]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/pt-BR/iam/the/walrus/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/pt-BR/donnie/the/walrus/")
def test_value_capture_and_substitution(self): """ Should be able to capture info from URL and use in redirection. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/")]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/donnie/the/walrus/")
def test_empty_unnamed_captures(self): """ Should be able to define an optional unnamed capture. """ resolver = get_resolver([redirect(r"^iam/the(/.+)?/$", "/donnie/the{}/", locale_prefix=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/iam/the/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/donnie/the/")
def test_empty_unnamed_captures(self): """ Should be able to define an optional unnamed capture. """ resolver = get_resolver([redirect(r"^iam/the(/.+)?/$", "/donnie/the{}/", locale_prefix=False)]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/iam/the/")) assert resp.status_code == 301 assert resp["Location"] == "/donnie/the/"
def test_locale_value_capture(self): """ Should prepend locale value automatically. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/")]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/pt-BR/iam/the/walrus/")) assert resp.status_code == 301 assert resp["Location"] == "/pt-BR/donnie/the/walrus/"
def test_value_capture_and_substitution(self): """ Should be able to capture info from URL and use in redirection. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/donnie/the/walrus/')
def test_locale_value_capture_no_locale(self): """ Should get locale value in kwargs and not break if no locale in URL. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/")]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) assert resp.status_code == 301 assert resp["Location"] == "/donnie/the/walrus/"
def test_locale_value_capture_ignore_locale(self): """ Should be able to ignore the original locale. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/", prepend_locale=False)]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/zh-TW/iam/the/walrus/")) assert resp.status_code == 301 assert resp["Location"] == "/donnie/the/walrus/"
def test_value_capture_and_substitution(self): """ Should be able to capture info from URL and use in redirection. """ resolver = get_resolver([redirect(r"^iam/the/(?P<name>.+)/$", "/donnie/the/{name}/")]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) assert resp.status_code == 301 assert resp["Location"] == "/donnie/the/walrus/"
def test_empty_unnamed_captures(self): """ Should be able to define an optional unnamed capture. """ resolver = get_resolver([redirect(r'^iam/the(/.+)?/$', '/donnie/the{}/', locale_prefix=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/donnie/the/')
def test_locale_value_capture_ignore_locale(self): """ Should be able to ignore the original locale. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/', prepend_locale=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/zh-TW/iam/the/walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/donnie/the/walrus/'
def test_locale_value_capture_no_locale(self): """ Should get locale value in kwargs and not break if no locale in URL. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/donnie/the/walrus/')
def test_locale_value_capture_ignore_locale(self): """ Should be able to ignore the original locale. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/', prepend_locale=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/zh-TW/iam/the/walrus/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/donnie/the/walrus/')
def test_locale_value_capture(self): """ Should prepend locale value automatically. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/pt-BR/iam/the/walrus/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/pt-BR/donnie/the/walrus/')
def test_locale_value_capture_no_locale(self): """ Should get locale value in kwargs and not break if no locale in URL. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/donnie/the/walrus/'
def test_locale_value_capture(self): """ Should prepend locale value automatically. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/pt-BR/iam/the/walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/pt-BR/donnie/the/walrus/'
def test_empty_unnamed_captures(self): """ Should be able to define an optional unnamed capture. """ resolver = get_resolver([redirect(r'^iam/the(/.+)?/$', '/donnie/the{}/', locale_prefix=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/')) assert resp.status_code == 301 assert resp['Location'] == '/donnie/the/'
def test_locale_value_capture(self): """ Should get locale value in kwargs. """ resolver = get_resolver([redirect(r'^iam/the/(?P<name>.+)/$', '/{locale}donnie/the/{name}/')]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/pt-BR/iam/the/walrus/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/pt-BR/donnie/the/walrus/')
def test_no_locale_prefix(self): """ Should be able to define a redirect that ignores locale prefix. Also when not using any named captures (like implied locale) unnamed captures should work. For some reason Django only allows unnamed captures to pass through if there are no named ones. """ resolver = get_resolver([redirect(r"^iam/the/(.+)/$", "/donnie/the/{}/", locale_prefix=False)]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/donnie/the/walrus/")
def test_no_locale_prefix(self): """ Should be able to define a redirect that ignores locale prefix. Also when not using any named captures (like implied locale) unnamed captures should work. For some reason Django only allows unnamed captures to pass through if there are no named ones. """ resolver = get_resolver([redirect(r"^iam/the/(.+)/$", "/donnie/the/{}/", locale_prefix=False)]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) assert resp.status_code == 301 assert resp["Location"] == "/donnie/the/walrus/"
def test_non_ascii_strip_tags(self): """ Should deal with non-ascii characters when there's a substitution as well as strip tags. This is from errors that happened in prod. The following URL caused a 500: https://www.mozilla.org/editor/midasdemo/securityprefs.html%3C/span%3E%3C/a%3E%C2%A0 https://sentry.prod.mozaws.net/marketing/bedrock-prod-eu-west/issues/349078/ """ resolver = get_resolver([redirect(r"^editor/(?P<page>.*)$", "http://www-archive.mozilla.org/editor/{page}")]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/editor/midasdemo/securityprefs.html%3C/span%3E%3C/a%3E%C2%A0")) assert resp.status_code == 301 assert resp["Location"] == "http://www-archive.mozilla.org/editor/midasdemo/securityprefs.html%C2%A0"
def test_no_redirect(self): """Should be able to skip redirects.""" resolver = get_resolver([no_redirect(r"^iam/the/walrus/$"), redirect(r"^iam/the/.*/$", "/coo/coo/cachoo/")]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) self.assertIsNone(resp) # including locale middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/pt-BR/iam/the/walrus/")) self.assertIsNone(resp) resp = middleware.process_request(self.rf.get("/iam/the/marmot/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/coo/coo/cachoo/")
def test_non_ascii_strip_tags(self): """ Should deal with non-ascii characters when there's a substitution as well as strip tags. This is from errors that happened in prod. The following URL caused a 500: https://www.mozilla.org/editor/midasdemo/securityprefs.html%3C/span%3E%3C/a%3E%C2%A0 https://sentry.prod.mozaws.net/marketing/bedrock-prod-eu-west/issues/349078/ """ resolver = get_resolver([redirect(r"^editor/(?P<page>.*)$", "http://www-archive.mozilla.org/editor/{page}")]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request( self.rf.get("/editor/midasdemo/securityprefs.html" "%3C/span%3E%3C/a%3E%C2%A0") ) eq_(resp.status_code, 301) eq_(resp["Location"], "http://www-archive.mozilla.org/editor/midasdemo/securityprefs.html%C2%A0")
def test_no_redirect(self): """Should be able to skip redirects.""" resolver = get_resolver([ no_redirect(r'^iam/the/walrus/$'), redirect(r'^iam/the/.*/$', '/coo/coo/cachoo/'), ]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) self.assertIsNone(resp) # including locale middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/pt-BR/iam/the/walrus/')) self.assertIsNone(resp) resp = middleware.process_request(self.rf.get('/iam/the/marmot/')) assert resp.status_code == 301 assert resp['Location'] == '/coo/coo/cachoo/'
def test_match_flags(self): """ Should be able to set regex flags for redirect URL. """ resolver = get_resolver( [redirect(r"^iam/the/walrus/$", "/coo/coo/cachoo/"), no_redirect(r"^iam/the/walrus/$", re_flags="i")] ) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get("/IAm/The/Walrus/")) self.assertIsNone(resp) # also with locale resp = middleware.process_request(self.rf.get("/es-ES/Iam/The/Walrus/")) self.assertIsNone(resp) # sanity check resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) eq_(resp.status_code, 301) eq_(resp["Location"], "/coo/coo/cachoo/")
def test_match_flags(self): """ Should be able to set regex flags for redirect URL. """ resolver = get_resolver([ redirect(r'^iam/the/walrus/$', '/coo/coo/cachoo/'), no_redirect(r'^iam/the/walrus/$', re_flags='i'), ]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/IAm/The/Walrus/')) self.assertIsNone(resp) # also with locale resp = middleware.process_request(self.rf.get('/es-ES/Iam/The/Walrus/')) self.assertIsNone(resp) # sanity check resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/coo/coo/cachoo/')
def test_match_flags(self): """ Should be able to set regex flags for redirect URL. """ resolver = get_resolver([ redirect(r'^iam/the/walrus/$', '/coo/coo/cachoo/'), no_redirect(r'^iam/the/walrus/$', re_flags='i'), ]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/IAm/The/Walrus/')) self.assertIsNone(resp) # also with locale resp = middleware.process_request(self.rf.get('/es-ES/Iam/The/Walrus/')) self.assertIsNone(resp) # sanity check resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/coo/coo/cachoo/'
def test_match_flags(self): """ Should be able to set regex flags for redirect URL. """ resolver = get_resolver( [ redirect(r"^iam/the/walrus/$", "/coo/coo/cachoo/"), no_redirect(r"^iam/the/walrus/$", re_flags="i"), ] ) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/IAm/The/Walrus/")) self.assertIsNone(resp) # also with locale resp = middleware.process_request(self.rf.get("/es-ES/Iam/The/Walrus/")) self.assertIsNone(resp) # sanity check resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) assert resp.status_code == 301 assert resp["Location"] == "/coo/coo/cachoo/"
def test_match_flags(self): """ Should be able to set regex flags for redirect URL. """ resolver = get_resolver([ redirect(r'^iam/the/walrus/$', '/coo/coo/cachoo/'), redirect(r'^iam/the/walrus/$', '/dammit/donnie/', re_flags='i'), ]) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get('/IAm/The/Walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/dammit/donnie/' # also with locale resp = middleware.process_request( self.rf.get('/es-ES/Iam/The/Walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/es-ES/dammit/donnie/' # sanity check resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) assert resp.status_code == 301 assert resp['Location'] == '/coo/coo/cachoo/'
def test_no_redirect(self): """Should be able to skip redirects.""" resolver = get_resolver([ no_redirect(r'^iam/the/walrus/$'), redirect(r'^iam/the/.*/$', '/coo/coo/cachoo/'), ]) middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/iam/the/walrus/')) self.assertIsNone(resp) # including locale middleware = RedirectsMiddleware(resolver) resp = middleware.process_request(self.rf.get('/pt-BR/iam/the/walrus/')) self.assertIsNone(resp) resp = middleware.process_request(self.rf.get('/iam/the/marmot/')) eq_(resp.status_code, 301) eq_(resp['Location'], '/coo/coo/cachoo/')
def test_no_redirect(self): """Should be able to skip redirects.""" resolver = get_resolver( [ no_redirect(r"^iam/the/walrus/$"), redirect(r"^iam/the/.*/$", "/coo/coo/cachoo/"), ] ) middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/iam/the/walrus/")) self.assertIsNone(resp) # including locale middleware = RedirectsMiddleware(resolver=resolver) resp = middleware.process_request(self.rf.get("/pt-BR/iam/the/walrus/")) self.assertIsNone(resp) resp = middleware.process_request(self.rf.get("/iam/the/marmot/")) assert resp.status_code == 301 assert resp["Location"] == "/coo/coo/cachoo/"
# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. from django.test import RequestFactory from bedrock.mozorg.tests import TestCase from bedrock.redirects.middleware import RedirectsMiddleware from bedrock.redirects.util import get_resolver, redirect patterns = [ redirect(r"^dude/already/10th/", "/far/out/"), redirect(r"^walter/prior/restraint/", "/finishes/coffee/"), ] middleware = RedirectsMiddleware(resolver=get_resolver(patterns)) class TestRedirectsMiddleware(TestCase): def setUp(self): self.rf = RequestFactory() def test_finds_and_uses_redirect(self): resp = middleware.process_request( self.rf.get("/walter/prior/restraint/")) self.assertEqual(resp.status_code, 301) self.assertEqual(resp["location"], "/finishes/coffee/") def test_no_redirect_match(self): resp = middleware.process_request(self.rf.get("/donnie/out/element/")) self.assertIsNone(resp)