Exemplo n.º 1
0
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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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"))
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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')
Exemplo n.º 10
0
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))
Exemplo n.º 11
0
 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
Exemplo n.º 12
0
 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
Exemplo n.º 13
0
 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"))
Exemplo n.º 16
0
    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"))
Exemplo n.º 17
0
 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'))
Exemplo n.º 19
0
    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"))
Exemplo n.º 21
0
    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"))
Exemplo n.º 23
0
    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'))
Exemplo n.º 25
0
    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'))
Exemplo n.º 26
0
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
Exemplo n.º 27
0
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)
Exemplo n.º 29
0
    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)
Exemplo n.º 30
0
    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)
Exemplo n.º 31
0
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)
Exemplo n.º 35
0
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)
Exemplo n.º 36
0
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&#196;&#135; <div>Ivan Krsti&#196;&#135;</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})