CBVTestCase.test_method_not_allowed()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 1
Metric Value
cc 2
c 3
b 0
f 1
dl 0
loc 7
rs 9.4285
1
import json
2
3
from django.http.response import HttpResponse, HttpResponseNotAllowed, HttpResponseBadRequest
4
from django.test import TestCase
5
from django.test.client import RequestFactory
6
from django.views.generic import View
7
8
from django_jsonp.decorators import jsonp
9
10
from django_jsonp.utils import APPLICATION_JS
11
12
13
class FBVTestCase(TestCase):
14
15
    def setUp(self):
16
17
        self.factory = RequestFactory()
18
        self.dict_response = dict(foo='bar')
19
20
        @jsonp
21
        def simple_dict_view(request):
22
            return self.dict_response
23
24
        @jsonp
25
        def simple_http_response_view(request):
26
            return HttpResponse(json.dumps(self.dict_response))
27
28
        self.simple_dict_view = simple_dict_view
29
        self.simple_http_response_view = simple_http_response_view
30
31
    def assert_content_and_content_type(self, response, callback):
32
        self.assertContains(response, callback)
33
        self.assertContains(response, json.dumps(self.dict_response))
34
        self.assertEqual(response['Content-Type'], APPLICATION_JS)
35
36
    def test_response_correct_format_from_dict(self):
37
        callback = 'showMeTheMoney'
38
        request = self.factory.get('/fake.json?callback={0}'.format(callback))
39
        response = self.simple_dict_view(request)
40
        self.assertContains(response, '{0}({1})'.format(callback, json.dumps(self.dict_response)))
41
        self.assertEqual(APPLICATION_JS, response['Content-Type'])
42
43
    def test_response_correct_from_http_response(self):
44
        callback = 'whatsMyAgeAgain'
45
        response = self.simple_http_response_view(self.factory.get('/fake.json?callback={0}'.format(callback)))
46
        self.assert_content_and_content_type(response, callback)
47
48
    def test_with_different_callback_param_name(self):
49
        callback = 'giveMeNovocaine'
50
        response = self.simple_http_response_view(request=self.factory.get('/fake.json?jsonp={0}'.format(callback)))
51
        self.assert_content_and_content_type(response, callback)
52
53
    def test_method_not_allowed(self):
54
        callback = 'isThereASpoon'
55
        put_response = self.simple_dict_view(request=self.factory.put('/fake.json?jsonp={0}'.format(callback)))
56
        post_response = self.simple_dict_view(request=self.factory.post('/fake.json?jsonp={0}'.format(callback)))
57
        delete_response = self.simple_dict_view(request=self.factory.delete('/fake.json?jsonp={0}'.format(callback)))
58
        for r in [put_response, post_response, delete_response]:
59
            self.assertIsInstance(r, HttpResponseNotAllowed)
60
61
62
class CBVTestCase(TestCase):
63
    def setUp(self):
64
65
        self.factory = RequestFactory()
66
        dict_response = dict(foo='bar')
67
        self.dict_response = dict_response
68
69
        @jsonp
70
        class DictResponse(View):
71
            def get(self, request):
72
                return dict_response
73
74
        @jsonp
75
        class InvalidResponseFormat(View):
76
            def get(self, request):
77
                return []
78
79
        self.simple_dict_view = DictResponse.as_view()
80
        self.invalid_view = InvalidResponseFormat.as_view()
81
82
    def assert_content_and_content_type(self, response, callback):
83
        self.assertContains(response, callback)
84
        self.assertContains(response, json.dumps(self.dict_response))
85
        self.assertEqual(response['Content-Type'], APPLICATION_JS)
86
87
    def test_correct_response(self):
88
        callback = 'isThereASpoon'
89
        response = self.simple_dict_view(request=self.factory.get('/fake.json?jsonp={0}'.format(callback)))
90
        self.assert_content_and_content_type(response, callback)
91
92
    def test_method_not_allowed(self):
93
        callback = 'isThereASpoon'
94
        put_response = self.simple_dict_view(request=self.factory.put('/fake.json?jsonp={0}'.format(callback)))
95
        post_response = self.simple_dict_view(request=self.factory.post('/fake.json?jsonp={0}'.format(callback)))
96
        delete_response = self.simple_dict_view(request=self.factory.delete('/fake.json?jsonp={0}'.format(callback)))
97
        for r in [put_response, post_response, delete_response]:
98
            self.assertIsInstance(r, HttpResponseNotAllowed)
99
100
    def test_invalid_response_format(self):
101
        callback = 'howMuchIsTheFish'
102
        self.assertRaises(NotImplementedError,
103
                          lambda: self.invalid_view(request=self.factory.get('/fake.json?jsonp={0}'.format(callback))))
104
105
    def test_no_callback(self):
106
        response = self.simple_dict_view(request=self.factory.get('/fake.json?'))
107
        self.assertIsInstance(response, HttpResponseBadRequest)
108