Пример #1
0
 def setUp(self):
     self.rf = RequestFactory()
     self.m = DeviceTypeMiddleware()
     super(TestDeviceTypeMiddleware, self).setUp()
Пример #2
0
class TestDeviceTypeMiddleware(TestCase):

    def setUp(self):
        self.rf = RequestFactory()
        self.m = DeviceTypeMiddleware()
        super(TestDeviceTypeMiddleware, self).setUp()

    def test_no_user_agent(self):
        req = self.rf.get('/')
        self.m.process_request(req)

        self.assertEqual(conf.DEFAULT_TYPE, req.devicetype)

    def test_with_template_list(self):
        req = self.rf.get('/', HTTP_USER_AGENT='android 4 tablet')
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse(template_name=['A', 'B']))
        self.assertEqual(['tablet/A', 'tablet/B', 'A', 'B'], resp.template_name)

    def test_tablet(self):
        req = self.rf.get('/', HTTP_USER_AGENT='android 4 tablet')
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse())
        self.assertEqual(['tablet/test.html', 'test.html'], resp.template_name)

    def test_tablet_basename_prefix(self):
        conf.PREFIX_BASENAME = True
        req = self.rf.get('/', HTTP_USER_AGENT='android 4 tablet')
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse('A/B.html'))
        conf.PREFIX_BASENAME = False
        self.assertEqual(['A/tablet/B.html', 'A/B.html'], resp.template_name)

    def test_tablet_no_folder(self):
        conf.TEMPLATE_PREFIX['tablet'] = 't-'
        req = self.rf.get('/', HTTP_USER_AGENT='android 4 tablet')
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse('A/B.html'))
        conf.TEMPLATE_PREFIX['tablet'] = 'tablet/'
        self.assertEqual(['A/t-B.html', 'A/B.html'], resp.template_name)

    def test_mobile(self):
        req = self.rf.get('/', HTTP_USER_AGENT='android mobile')
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse())
        self.assertEqual(['mobile/test.html', 'test.html'], resp.template_name)

    def test_browser(self):
        req = self.rf.get('/', HTTP_USER_AGENT='some browser')
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse())
        self.assertEqual(['test.html'], resp.template_name)

    def test_direct_switch_redirect(self):
        req = self.rf.get('/', data={'devicetype': 'tablet'}, HTTP_USER_AGENT='some browser')
        resp = self.m.process_request(req)

        self.assertEqual(resp.status_code, 302)

    def test_get_from_cookie_first(self):
        req = self.rf.get('/', HTTP_USER_AGENT='some browser', COOKIES={'devicetype': 'tablet'})
        req.COOKIES['devicetype'] = 'tablet'
        self.m.process_request(req)

        resp = self.m.process_template_response(req, MockResponse())
        self.assertEqual(['tablet/test.html', 'test.html'], resp.template_name)

    def test_context_processor_tablet(self):
        req = self.rf.get('/', HTTP_USER_AGENT='Linux Android 3 Unknown Device')
        self.m.process_request(req)

        ctx = devicetype_context_processor(req)
        assert ctx['devicetype'] == conf.DEVICETYPE_TABLET, 'devicetype should be "%s"' % conf.DEVICETYPE_TABLET
        assert ctx['is_tablet'] is True, 'is_tablet should be True'

    def test_context_processor_mobile(self):
        req = self.rf.get('/', HTTP_USER_AGENT='iPhone 6 superduper')
        self.m.process_request(req)
        print(req.COOKIES)

        ctx = devicetype_context_processor(req)
        assert ctx['devicetype'] == conf.DEVICETYPE_MOBILE, 'devicetype should be "%s"' % conf.DEVICETYPE_MOBILE
        assert ctx['is_mobile'] is True, 'is_mobile should be True'