class TestDRFSwitch(TestCase): def setUp(self): self.factory = RequestFactory() def test_responses(self): view = SwitchToDRF('LanguageView') request = self.factory.get(reverse('api.language', args=['1.5'])) request.APP = Mock(id=1) request.user = AnonymousUser() eq_(view(request, api_version=1.5).__module__, 'django.http') piston_response = view(request, api_version=1.5).content self.create_switch('drf', db=True) eq_(view(request, api_version=1.5).__module__, 'rest_framework.response') drf_response = view(request, api_version=1.5).render().content eq_(piston_response, drf_response) def test_wrong_format_exceptions(self): view = SwitchToDRF('LanguageView') request = self.factory.get(reverse('api.language', args=['1.5'])) request.APP = Mock(id=1) request.GET = {'format': 'foo'} request.user = AnonymousUser() response = view(request, api_version=1.5) eq_(response.content, '{"msg": "Not implemented yet."}') eq_(response.status_code, 200) self.create_switch('drf', db=True) response = view(request, api_version=1.5) self.assertTrue('<error>Not found</error>' in response.render().content) eq_(response.status_code, 404)
def test_session_version_sidebar(self): request = RequestFactory() request.GET = {} request.session = {} request.APP = amo.FIREFOX request.get(reverse('search.search')) facets = { u'platforms': [{u'count': 58, u'term': 1}], u'appversions': [{u'count': 58, u'term': 5000000200100}], u'categories': [{u'count': 55, u'term': 1}], u'tags': [], } versions = version_sidebar(request, {}, facets) assert versions[0].selected versions = version_sidebar(request, {'appver': '5.0'}, facets) assert versions[1].selected versions = version_sidebar(request, {}, facets) assert versions[1].selected request.GET['appver'] = '' versions = version_sidebar(request, {}, facets) assert versions[0].selected
def test_version_sidebar(self): request = RequestFactory() request.GET = {} request.APP = amo.FIREFOX request.get(reverse('search.search')) facets = { u'platforms': [{u'count': 58, u'term': 1}], u'appversions': [{u'count': 58, u'term': 5000000200100}], u'categories': [{u'count': 55, u'term': 1}], u'tags': [], } versions = version_sidebar(request, {}, facets) assert versions[0].selected versions = version_sidebar(request, {'appver': '5.0'}, facets) assert versions[1].selected # We're not storing the version in the session anymore: no memories. versions = version_sidebar(request, {}, facets) assert versions[0].selected # We read the appver from the cleaned form data. request.GET['appver'] = '123.4' # No form data, fallback to default (first entry). versions = version_sidebar(request, {}, facets) assert versions[0].selected # Form data has the proper version, use it. versions = version_sidebar(request, {'appver': '5.0'}, facets) assert versions[1].selected # Form data has the proper version, which is new: add it. versions = version_sidebar(request, {'appver': '123.4'}, facets) assert versions[1].selected eq_(len(versions), 3)
class TestProfileMiddleware(TestCase): def setUp(self): self.factory = RequestFactory() def test_safe_view_request(self): request = self.factory.get(reverse("users_edit")) middleware = ProfileMiddleware() response = middleware.process_request(request) self.assertFalse(response) def test_safe_path_request(self): request = self.factory.get("/admin/something/") middleware = ProfileMiddleware() response = middleware.process_request(request) self.assertFalse(response) def test_authed_user_request(self): request = self.factory.get(reverse("users_dashboard")) request.user = complete_user middleware = ProfileMiddleware() response = middleware.process_request(request) self.assertFalse(response) def test_anon_user_request(self): request = self.factory.get(reverse("users_dashboard")) request.user = incomplete_user middleware = ProfileMiddleware() response = middleware.process_request(request) self.assertEqual(response.status_code, 302) self.assertEqual(response["Location"], reverse("users_edit"))
def test_version_sidebar(self): request = RequestFactory() request.GET = {} request.APP = amo.FIREFOX request.get(reverse("search.search")) facets = { u"platforms": [{u"count": 58, u"term": 1}], u"appversions": [{u"count": 58, u"term": 5000000200100}], u"categories": [{u"count": 55, u"term": 1}], u"tags": [], } versions = version_sidebar(request, {}, facets) assert versions[0].selected versions = version_sidebar(request, {"appver": "5.0"}, facets) assert versions[1].selected # We're not storing the version in the session anymore: no memories. versions = version_sidebar(request, {}, facets) assert versions[0].selected # We read the appver from the cleaned form data. request.GET["appver"] = "123.4" # No form data, fallback to default (first entry). versions = version_sidebar(request, {}, facets) assert versions[0].selected # Form data has the proper version, use it. versions = version_sidebar(request, {"appver": "5.0"}, facets) assert versions[1].selected # Form data has the proper version, which is new: add it. versions = version_sidebar(request, {"appver": "123.4"}, facets) assert versions[1].selected eq_(len(versions), 3)
class TestCollectionMembershipField(CollectionDataMixin, amo.tests.TestCase): def setUp(self): self.collection = Collection.objects.create(**self.collection_data) self.app = amo.tests.app_factory() self.collection.add_app(self.app) self.field = CollectionMembershipField() self.membership = CollectionMembership.objects.all()[0] self.request = RequestFactory() self.profile = FeatureProfile(apps=True).to_signature() def test_to_native(self): resource = AppResource().full_dehydrate(Bundle(obj=self.app)) native = self.field.to_native(self.membership) for key, value in native.iteritems(): if key == 'resource_uri': eq_(value, self.app.get_api_url(pk=self.app.pk)) else: eq_(value, resource.data[key]) def test_field_to_native(self): self.field.parent = self.collection self.field.source = 'collectionmembership_set' self.field.context = { 'request': self.request.get('/', {'pro': self.profile}) } # Ensure that the one app is included in the default response. native = self.field.field_to_native(self.collection, 'collectionmembership_set') eq_(len(native), 1) eq_(int(native[0]['id']), self.app.id) # ...but is not included when there is a feature profile mismatch. self.app.current_version.features.update(has_geolocation=True) native_without = self.field.field_to_native(self.collection, 'collectionmembership_set') eq_(len(native_without), 0) def test_field_to_native_invalid_profile(self): self.field.parent = self.collection self.field.source = 'collectionmembership_set' self.field.context = { 'request': self.request.get('/', {'pro': 'muahaha'}) } # Ensure that no exceptions were raised. native = self.field.field_to_native(self.collection, 'collectionmembership_set') # Ensure that no filtering took place. eq_(len(native), 1) eq_(int(native[0]['id']), self.app.id)
class TestDRFSwitch(TestCase): fixtures = ['base/addon_3615',] def setUp(self): self.factory = RequestFactory() self.user = UserProfile.objects.get(email='*****@*****.**') def test_responses(self): view = SwitchToDRF('Language') request = self.factory.get(reverse('api.language', args=['1.5'])) request.APP = Mock(id=1) request.user = AnonymousUser() eq_(view(request, api_version=1.5).__module__, 'django.http.response') piston_response = view(request, api_version=1.5).content self.create_switch('drf', db=True) eq_(view(request, api_version=1.5).__module__, 'rest_framework.response') drf_response = view(request, api_version=1.5).render().content eq_(piston_response, drf_response) def test_responses_with_handler(self): view = SwitchToDRF('User', with_handler=True) request = self.factory.get(reverse('api.language', args=['2'])) class App(): id = 1 def __str__(self): return str(self.id) request.APP = App() request.user = AnonymousUser() request.amo_user = self.user eq_(view(request, api_version=2).__module__, 'django.http.response') self.create_switch('drf', db=True) eq_(view(request, api_version=2).__module__, 'rest_framework.response') def test_wrong_format_exceptions(self): view = SwitchToDRF('Language') request = self.factory.get(reverse('api.language', args=['1.5'])) request.APP = Mock(id=1) request.GET = {'format': 'foo'} request.user = AnonymousUser() response = view(request, api_version=1.5) eq_(response.content, '{"msg": "Not implemented yet."}') eq_(response.status_code, 200) self.create_switch('drf', db=True) response = view(request, api_version=1.5) self.assertTrue('<error>Not found</error>' in response.render().content) eq_(response.status_code, 404)
class TestAddSubmissionView(TestCase): def __init__(self, *args, **kwargs): super(TestAddSubmissionView, self).__init__(*args, **kwargs) # Add context and template to the response on_template_render = curry(store_rendered_templates, {}) signals.template_rendered.connect(on_template_render, dispatch_uid="template-render") def setUp(self): self.factory = RequestFactory() self.ideation = MagicMock() def test_add_submission_get(self): request = self.factory.get('/') request.user = AnonymousUser() request.development = development_mock response = views.add_submission(request, self.ideation) eq_(response.status_code, 200) def test_invalid_form(self): request = self.factory.post('/', BLANK_EXTERNALS) request.user = AnonymousUser() request.development = development_mock response = views.add_submission(request, self.ideation) eq_(response.status_code, 200)
class TestContext(TestCase): def setUp(self): self.factory = RequestFactory() def render(self, content, request=None): if not request: request = self.factory.get('/') tpl = jinja2.Template(content) return jingo.render_to_string(request, tpl) def test_request(self): eq_(self.render('{{ request.path }}'), '/') def test_settings(self): eq_(self.render('{{ settings.SITE_ID }}'), '1') def test_languages(self): eq_(self.render("{{ LANGUAGES['en-us'] }}"), 'English (US)') def test_languages(self): eq_(self.render("{{ LANG }}"), 'en-US') def test_lang_dir(self): eq_(self.render("{{ DIR }}"), 'ltr')
class GetNextUrlTests(TestCase): def setUp(self): super(GetNextUrlTests, self).setUp() self.r = RequestFactory() self.patcher = patch('django.contrib.sites.models.Site.objects') mock = self.patcher.start() mock.get_current.return_value.domain = 'su.mo.com' def tearDown(self): self.patcher.stop() super(GetNextUrlTests, self).tearDown() def test_query_string(self): """Query-strings remain intact.""" r = self.r.get('/', {'next': '/new?f=b'}) eq_('/new?f=b', get_next_url(r)) def test_good_host_https(self): """Full URLs work with valid hosts.""" r = self.r.post('/users/login', {'next': 'https://su.mo.com/kb/new'}) eq_('https://su.mo.com/kb/new', get_next_url(r)) def test_post(self): """'next' in POST overrides GET.""" r = self.r.post('/?next=/foo', {'next': '/bar'}) eq_('/bar', get_next_url(r)) def test_get(self): """'next' can be a query-string parameter.""" r = self.r.get('/users/login', {'next': '/kb/new'}) eq_('/kb/new', get_next_url(r)) def test_referer(self): """Use HTTP referer if nothing else.""" r = self.r.get('/') r.META['HTTP_REFERER'] = 'http://su.mo.com/new' eq_('http://su.mo.com/new', get_next_url(r)) def test_bad_host_https(self): r = self.r.get('/', {'next': 'https://example.com'}) eq_(None, get_next_url(r)) def test_bad_host_protocol_relative(self): """Protocol-relative URLs do not let bad hosts through.""" r = self.r.get('/', {'next': '//example.com'}) eq_(None, get_next_url(r))
def test_authenticated(self, unread_count_for): """Test authenticated user with flag active.""" unread_count_for.return_value = 3 rf = RequestFactory() request = rf.get("/") request.user = user(save=True) eq_(3, unread_message_count(request)["unread_message_count"]) assert unread_count_for.called
def test_anonymous(self, unread_count_for): """Test anonymous user with flag active.""" unread_count_for.return_value = 3 rf = RequestFactory() request = rf.get('/') request.user = AnonymousUser() eq_(0, unread_message_count(request)['unread_message_count']) assert not unread_count_for.called
def test_authenticated(self, unread_count_for): """Test authenticated user with flag active.""" unread_count_for.return_value = 3 rf = RequestFactory() request = rf.get('/') request.user = get_user('rrosario') eq_(3, unread_message_count(request)['unread_message_count']) assert unread_count_for.called
def test_stub_aurora_installer_override_locale(self): rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "fr" doc = pq(render("{{ download_firefox('aurora', " "force_full_installer=True) }}", {"request": get_request})) links = doc(".download-list a")[:3] for link in links: ok_("stub" not in pq(link).attr("href"))
def test_stub_aurora_installer_disabled_en_us(self): rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "en-US" doc = pq(render("{{ download_firefox('aurora') }}", {"request": get_request})) links = doc("li a")[:3] for link in links: ok_("stub" not in pq(link).attr("href"))
def test_stub_aurora_installer_disabled_locale(self): rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "fr" doc = pq(render("{{ download_button('button', build='aurora') }}", {"request": get_request})) links = doc(".download-list a")[:3] for link in links: ok_("stub" not in pq(link).attr("href"))
def test_flag_off(self, flag_is_active, unread_count_for): """Test authenticated user with flag inactive.""" unread_count_for.return_value = 3 flag_is_active.return_value = False rf = RequestFactory() request = rf.get('/') request.user = get_user('rrosario') eq_(0, unread_message_count(request)['unread_message_count']) assert not unread_count_for.called
def test_stub_aurora_installer_disabled_en_us(self): rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'en-US' doc = pq(render("{{ download_button('button', build='aurora') }}", {'request': get_request})) links = doc('li a')[:3] for link in links: ok_('stub' not in pq(link).attr('href'))
def test_stub_aurora_installer_disabled_locale(self): rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'fr' doc = pq(render("{{ download_firefox('aurora') }}", {'request': get_request})) links = doc('.download-list a')[:3] for link in links: ok_('stub' not in pq(link).attr('href'))
def test_stub_aurora_installer_enabled_locales(self): """Check that the stub is not served to locales""" rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "fr" doc = pq(render("{{ download_firefox('aurora') }}", {"request": get_request})) links = doc(".download-list a") for link in links: ok_("stub" not in pq(link).attr("href"))
def test_stub_aurora_installer_enabled_locales(self): """Check that the stub is not served to locales""" rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'fr' doc = pq(render("{{ download_firefox('aurora') }}", {'request': get_request})) links = doc('.download-list a') for link in links: ok_('stub' not in pq(link).attr('href'))
def test_stub_aurora_installer_enabled_en_us(self): """Check that only the windows link goes to stub with en-US""" rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "en-US" doc = pq(render("{{ download_firefox('aurora') }}", {"request": get_request})) links = doc(".download-list a")[:3] ok_("stub" in pq(links[0]).attr("href")) for link in links[1:]: ok_("stub" not in pq(link).attr("href"))
def test_stub_aurora_installer_override_en_us(self): rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'en-US' doc = pq(render("{{ download_firefox('aurora', " "force_full_installer=True) }}", {'request': get_request})) links = doc('.download-list a')[:3] for link in links: ok_('stub' not in pq(link).attr('href'))
def test_stub_aurora_installer_override_locale(self): rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'fr' doc = pq(render("{{ download_button('button', build='aurora', \ force_full_installer=True) }}", {'request': get_request})) links = doc('.download-list a')[:3] for link in links: ok_('stub' not in pq(link).attr('href'))
def test_stub_aurora_installer_enabled_en_us(self): """Check that only the windows link goes to stub with en-US""" rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'en-US' doc = pq(render("{{ download_firefox('aurora') }}", {'request': get_request})) links = doc('.download-list a')[:3] ok_('stub' in pq(links[0]).attr('href')) for link in links[1:]: ok_('stub' not in pq(link).attr('href'))
def req_factory_factory(url, user=None, post=False, data=None): """Creates a request factory, logged in with the user.""" req = RequestFactory() if post: req = req.post(url, data or {}) else: req = req.get(url, data or {}) if user: req.amo_user = user req.user = user.user req.groups = req.user.get_profile().groups.all() return req
def req_factory_factory(url, user=None, post=False, data=None): """Creates a request factory, logged in with the user.""" req = RequestFactory() if post: req = req.post(url, data or {}) else: req = req.get(url, data or {}) if user: req.amo_user = UserProfile.objects.get(id=user.id) req.user = user req.groups = user.groups.all() req.check_ownership = partial(check_ownership, req) return req
def test_button(self, small=False): rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "fr" doc = pq(render("{{ download_firefox(small=%s, " "dom_id='button') }}" % small, {"request": get_request})) eq_(doc.attr("id"), "button") self.check_dumb_button(doc("noscript")) self.check_dumb_button(doc(".unrecognized-download")) self.check_dumb_button(doc(".download-list")) eq_(doc(".download-other a").length, 6)
def test_button(self, format="large"): rf = RequestFactory() get_request = rf.get("/fake") get_request.locale = "fr" doc = pq(render("{{ download_button('button', '%s') }}" % format, {"request": get_request})) eq_(doc.attr("id"), "button") self.check_dumb_button(doc("noscript")) self.check_dumb_button(doc(".unrecognized-download")) self.check_dumb_button(doc(".download-list")) eq_(doc(".download-other a").length, 3)
def test_button(self, format='large'): rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'fr' doc = pq(render("{{ download_button('button', '%s') }}" % format, {'request': get_request})) eq_(doc.attr('id'), 'button') self.check_dumb_button(doc('noscript')) self.check_dumb_button(doc('.unsupported-download')) self.check_dumb_button(doc('.download-list')) eq_(doc('.download-other a').length, 3)
def req_factory_factory(url='', user=None, post=False, data=None, **kwargs): """Creates a request factory, logged in with the user.""" req = RequestFactory() if post: req = req.post(url, data or {}) else: req = req.get(url, data or {}) if user: req.user = UserProfile.objects.get(id=user.id) req.groups = user.groups.all() else: req.user = AnonymousUser() req.check_ownership = partial(check_ownership, req) req.REGION = kwargs.pop('region', mkt.regions.REGIONS_CHOICES[0][1]) req.API_VERSION = 2 for key in kwargs: setattr(req, key, kwargs[key]) return req
def test_button_force_direct(self): """ If the force_direct parameter is True, all download links must be directly to https://download.mozilla.org. """ rf = RequestFactory() get_request = rf.get('/fake') get_request.locale = 'fr' doc = pq( render("{{ download_firefox(force_direct=true) }}", {'request': get_request})) # Check that the first 3 links are direct. links = doc('.download-list a') for link in links[:3]: link = pq(link) ok_(link.attr('href').startswith('https://download.mozilla.org')) # direct links should not have the data attr. ok_(link.attr('data-direct-link') is None)
class TestClosedPhaseRequiredDecorator(TestCase): def setUp(self): self.factory = RequestFactory() self.request = self.factory.get('/') self.request.ideation = phase_mock def test_decorator_defaults(self): response = mock_phase_view(self.request, phase='ideation') eq_(response.status_code, 403) def test_phase_method_allowed(self): response = mock_phase_view_get(self.request, phase='ideation') eq_(response['phase'], 'ideation') def test_phase_method_not_allowed(self): request = self.factory.post('/', {}) request.ideation = phase_mock response = mock_phase_view_get(request, phase='ideation') eq_(response.status_code, 403)
class TestPhaseRequiredDecorator(TestCase): def setUp(self): self.factory = RequestFactory() self.request = self.factory.get('/') self.request.ideation = phase_mock def test_method_allowed(self): response = mock_view(self.request, phase='ideation') eq_(response['phase'], 'ideation') def test_method_not_allowed(self): request = self.factory.post('/', {}) request.ideation = phase_mock response = mock_view(request, phase='ideation') eq_(response.status_code, 403) @raises(ImproperlyConfigured) def test_invalid_phase(self): mock_view(self.request, phase='development') def test_defaults(self): response = mock_default_view(self.request, phase='ideation') eq_(response.status_code, 403)
class TestFilterMiddleware(amo.tests.TestCase): def setUp(self): self.middleware = APIFilterMiddleware() self.factory = RequestFactory() def _header(self, url='/', api=True, region=mkt.regions.US, lang='en-US', gaia=True, tablet=True, mobile=True, pro='8a7d546c.32.1', response_cls=HttpResponse): self.request = self.factory.get(url, {'pro': pro}) self.request.API = api self.request.REGION = region self.request.LANG = lang or '' self.request.GAIA = gaia self.request.TABLET = tablet self.request.MOBILE = mobile res = self.middleware.process_response(self.request, response_cls()) if api and response_cls.status_code < 500: header = res.get('API-Filter') assert 'vary' in res._headers eq_(res._headers['vary'][1], 'API-Filter') self._test_order(header) return parse_qs(header) else: assert 'vary' not in res._headers return None def _test_order(self, header): order = [item.split('=')[0] for item in header.split('&')] eq_(order, sorted(order)) @mock.patch('mkt.api.middleware.get_carrier') def test_success(self, gc): carrier = 'telerizon' gc.return_value = carrier header = self._header() self.assertIsInstance(header, dict) assert mkt.regions.US.slug in header['region'] assert 'en-US' in header['lang'] assert '8a7d546c.32.1' in header['pro'] assert carrier in header['carrier'] self.assertSetEqual(['gaia', 'mobile', 'tablet'], header['device']) def test_api_false(self): header = self._header(api=False) eq_(header, None) def test_no_devices(self): header = self._header(gaia=False, tablet=False, mobile=False) assert 'device' not in header def test_one_device(self): header = self._header(gaia=True, tablet=False, mobile=False) self.assertSetEqual(['gaia'], header['device']) @mock.patch('mkt.api.middleware.get_carrier') def test_no_carrier(self, gc): gc.return_value = None header = self._header() assert 'carrier' not in header def test_region(self): region = mkt.regions.BR header = self._header(region=region) assert region.slug in header['region'] def test_no_region(self): with self.assertRaises(AttributeError): self._header(region=None) def test_lang(self): lang = 'pt-BR' header = self._header(lang=lang) assert lang in header['lang'] def test_no_lang(self): header = self._header(lang=None) assert 'lang' not in header def test_500(self): self._header(response_cls=HttpResponseServerError)
class TestLazyPjaxMiddleware(amo.tests.TestCase): def setUp(self): self.factory = RequestFactory() self.patch = patch.object(settings, 'PJAX_SELECTOR', '#page') self.patch.start() def tearDown(self): self.patch.stop() def process(self, page_content=None, title='', response=None): request = self.factory.get('/', HTTP_X_PJAX=True) if not response: assert page_content is not None, ( 'Without a response, page_content= cannot be None') response = self.view(request, page_content, title=title) return LazyPjaxMiddleware().process_response(request, response) def view(self, request, page_content, title=''): if title: title = '<title>%s</title>' % title return http.HttpResponse("""<html>%s<body> <div id="header">the header</div> <div id="page">%s</div> </body></html>""" % (title, page_content)) def test_render_text(self): eq_(self.process('the page').content, 'the page') def test_render_empty(self): eq_(self.process('').content, '') def test_render_mixed(self): eq_(self.process('the page <div>foo</div>').content, 'the page <div>foo</div>') def test_render_nested(self): eq_(self.process('<div><b>strong</b> tea</div>').content, '<div><b>strong</b> tea</div>') def test_trailing_text(self): eq_(self.process('head <b>middle</b> tail').content, 'head <b>middle</b> tail') def test_title(self): eq_(self.process('the page', title='Title').content, '<title>Title</title>the page') def test_unicode(self): from nose import SkipTest # TODO(Kumar) investigate encoding differences raise SkipTest('this is different on Jenkins') rs = self.process(u'Ivan Krsti\u0107 <div>Ivan Krsti\u0107</div>') eq_(rs.content, 'Ivan Krstić <div>Ivan Krstić</div>') @raises(ValueError) @patch.object(settings, 'DEBUG', True) def test_missing_page_element(self): request = self.factory.get('/', HTTP_X_PJAX=True) response = http.HttpResponse('<html><body></body></html>') LazyPjaxMiddleware().process_response(request, response) @patch.object(settings, 'DEBUG', False) def test_missing_page_element_logged_in_prod(self): request = self.factory.get('/', HTTP_X_PJAX=True) body = '<html><body></body></html>' response = http.HttpResponse(body) response = LazyPjaxMiddleware().process_response(request, response) eq_(response.content, body) def test_non_200_response(self): request = self.factory.get('/', HTTP_X_PJAX=True) response = http.HttpResponse('<html><body>Error</body></html>', status=500) response = LazyPjaxMiddleware().process_response(request, response) assert response.content.startswith('<html>'), ( 'Did not expect a pjax response: %s' % response.content) @patch.object(settings, 'DEBUG', True) def test_non_html_is_ignored(self): # The client should never request a non-html page with the pjax # header but let's handle it just in case. resp = http.HttpResponse(json.dumps({'foo': 1}), content_type='application/json') resp = self.process(response=resp) eq_(json.loads(resp.content), {'foo': 1})