Completed
Push — master ( 307dd7...8bc9c6 )
by Paolo
08:27
created

uid.tests.test_views   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 238
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 23
eloc 132
dl 0
loc 238
rs 10
c 0
b 0
f 0

23 Methods

Rating   Name   Duplication   Size   Complexity  
A Initialize.setUp() 0 3 1
A AboutUploadingViewTest.setUp() 0 7 1
A IndexViewTest.test_url_resolves_view() 0 3 1
A AboutViewTest.test_url_resolves_view() 0 3 1
A DashBoardViewTest.setUp() 0 9 1
A TermsViewTest.setUp() 0 7 1
A AboutUploadingViewTest.test_url_resolves_view() 0 3 1
A DashBoardViewTest.test_contains_navigation_links() 0 6 1
A AboutViewTest.setUp() 0 7 1
A TermsViewTest.test_url_resolves_view() 0 3 1
A PrivacyViewTest.test_url_resolves_view() 0 3 1
A PrivacyViewTest.setUp() 0 7 1
A IndexViewTest.setUp() 0 7 1
A DashBoardViewTest.test_url_resolves_view() 0 3 1
A ProtectedViewTest.setUp() 0 13 1
A SummaryViewTest.setUp() 0 9 1
A AboutSubmissionViewTest.test_url_resolves_view() 0 3 1
A ProtectedViewTest.test_response() 0 8 1
A SummaryViewTest.test_url_resolves_view() 0 3 1
A UpdateOrganizationViewTest.setUp() 0 6 1
A UpdateOrganizationViewTest.test_url_resolves_view() 0 3 1
A UpdateOrganizationViewTest.test_form_inputs() 0 12 1
A AboutSubmissionViewTest.setUp() 0 7 1
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
"""
4
Created on Wed Apr  4 16:11:23 2018
5
6
@author: Paolo Cozzi <[email protected]>
7
"""
8
9
from django.test import Client, TestCase
10
from django.urls import resolve, reverse
11
12
from common.tests import (
13
    GeneralMixinTestCase, StatusMixinTestCase, FormMixinTestCase,
14
    OwnerMixinTestCase, LoginMixinTestCase)
15
16
from . import DataSourceMixinTestCase, PersonMixinTestCase
17
from ..forms import OrganizationForm
18
from ..models import Submission
19
from ..views import (
20
    DashBoardView, SummaryView, AboutView, IndexView, PrivacyView, TermsView,
21
    AboutUploadingView, UpdateOrganizationView, AboutSubmissionView)
22
23
24
class Initialize(TestCase):
25
    """Does the common stuff when testing cases are run"""
26
27
    fixtures = [
28
        "uid/user"
29
    ]
30
31
    def setUp(self):
32
        self.client = Client()
33
        self.client.login(username='test', password='test')
34
35
36
class IndexViewTest(StatusMixinTestCase, Initialize):
37
    def setUp(self):
38
        # create a test user
39
        super().setUp()
40
41
        # test page
42
        self.url = reverse('index')
43
        self.response = self.client.get(self.url)
44
45
    def test_url_resolves_view(self):
46
        view = resolve('/')
47
        self.assertIsInstance(view.func.view_class(), IndexView)
48
49
50
class DashBoardViewTest(GeneralMixinTestCase, Initialize):
51
    def setUp(self):
52
        # create a test user
53
        super().setUp()
54
55
        # get the url for dashboard
56
        self.url = reverse('uid:dashboard')
57
58
        # get a response
59
        self.response = self.client.get(self.url)
60
61
    def test_url_resolves_view(self):
62
        view = resolve('/uid/dashboard/')
63
        self.assertIsInstance(view.func.view_class(), DashBoardView)
64
65
    def test_contains_navigation_links(self):
66
        create_url = reverse('submissions:create')
67
        summary_url = reverse('uid:summary')
68
69
        self.assertContains(self.response, 'href="{0}"'.format(create_url))
70
        self.assertContains(self.response, 'href="{0}"'.format(summary_url))
71
72
        # TODO: test resume submission link
73
74
    # TODO: test submission button inactive
75
76
77
class AboutViewTest(StatusMixinTestCase, Initialize):
78
    def setUp(self):
79
        # create a test user
80
        super().setUp()
81
82
        # get the url and a respose
83
        self.url = reverse('about')
84
        self.response = self.client.get(self.url)
85
86
    def test_url_resolves_view(self):
87
        view = resolve('/about/')
88
        self.assertIsInstance(view.func.view_class(), AboutView)
89
90
91
class PrivacyViewTest(StatusMixinTestCase, Initialize):
92
    def setUp(self):
93
        # create a test user
94
        super().setUp()
95
96
        # get the url and a respose
97
        self.url = reverse('privacy-policy')
98
        self.response = self.client.get(self.url)
99
100
    def test_url_resolves_view(self):
101
        view = resolve('/privacy/')
102
        self.assertIsInstance(view.func.view_class(), PrivacyView)
103
104
105
class TermsViewTest(StatusMixinTestCase, Initialize):
106
    def setUp(self):
107
        # create a test user
108
        super().setUp()
109
110
        # get the url and a respose
111
        self.url = reverse('terms-and-conditions')
112
        self.response = self.client.get(self.url)
113
114
    def test_url_resolves_view(self):
115
        view = resolve('/terms/')
116
        self.assertIsInstance(view.func.view_class(), TermsView)
117
118
119
class AboutUploadingViewTest(StatusMixinTestCase, Initialize):
120
    def setUp(self):
121
        # create a test user
122
        super().setUp()
123
124
        # get the url and a respose
125
        self.url = reverse('about-uploading')
126
        self.response = self.client.get(self.url)
127
128
    def test_url_resolves_view(self):
129
        view = resolve('/about_uploading/')
130
        self.assertIsInstance(view.func.view_class(), AboutUploadingView)
131
132
133
class AboutSubmissionViewTest(StatusMixinTestCase, Initialize):
134
    def setUp(self):
135
        # create a test user
136
        super().setUp()
137
138
        # get the url and a respose
139
        self.url = reverse('about-submission')
140
        self.response = self.client.get(self.url)
141
142
    def test_url_resolves_view(self):
143
        view = resolve('/about_submission/')
144
        self.assertIsInstance(view.func.view_class(), AboutSubmissionView)
145
146
147
class SummaryViewTest(GeneralMixinTestCase, Initialize):
148
    def setUp(self):
149
        # create a test user
150
        super().setUp()
151
152
        # get the url for dashboard
153
        self.url = reverse('uid:summary')
154
155
        # get a response
156
        self.response = self.client.get(self.url)
157
158
    def test_url_resolves_view(self):
159
        view = resolve('/uid/summary/')
160
        self.assertIsInstance(view.func.view_class(), SummaryView)
161
162
    # TODO: test summary after data load
163
164
165
class ProtectedViewTest(DataSourceMixinTestCase, OwnerMixinTestCase,
166
                        LoginMixinTestCase, TestCase):
167
    """A class to test protected view"""
168
169
    fixtures = [
170
        "uid/user",
171
        "uid/dictcountry",
172
        "uid/dictrole",
173
        "uid/organization",
174
        "uid/submission"
175
    ]
176
177
    def setUp(self):
178
        super().setUp()
179
180
        self.client = Client()
181
        self.client.login(username='test', password='test')
182
183
        self.submission_id = 1
184
        self.submission = Submission.objects.get(pk=self.submission_id)
185
186
        self.file_name = self.submission.get_uploaded_file_basename()
187
188
        # define url
189
        self.url = "/protected/%s" % (self.submission.uploaded_file)
190
191
    def test_response(self):
192
        # get a response
193
        response = self.client.get(self.url)
194
195
        self.assertEqual(
196
            response.get('Content-Disposition'),
197
            'attachment; filename="{}"'.format(
198
                self.file_name)
199
        )
200
201
202
class UpdateOrganizationViewTest(
203
        FormMixinTestCase, PersonMixinTestCase, Initialize):
204
    """A class to test UpdateOrganizationView"""
205
206
    form_class = OrganizationForm
207
208
    fixtures = [
209
        "uid/user",
210
        "uid/dictcountry",
211
        "uid/dictrole",
212
        "uid/organization",
213
    ]
214
215
    def setUp(self):
216
        """call base method"""
217
        super().setUp()
218
219
        self.url = reverse("uid:organization_update")
220
        self.response = self.client.get(self.url)
221
222
    def test_url_resolves_view(self):
223
        view = resolve('/uid/organization/update/')
224
        self.assertIsInstance(view.func.view_class(), UpdateOrganizationView)
225
226
    def test_form_inputs(self):
227
228
        # total input is n of form fields + (CSRF) + 1 select
229
        self.assertContains(self.response, '<input', 4)
230
        self.assertContains(self.response, 'type="text"', 2)
231
        self.assertContains(self.response, '<select', 2)
232
        self.assertContains(self.response, "required disabled", 1)
233
234
        # this is specific to my data
235
        self.assertContains(
236
            self.response,
237
            'name="name" value="Test organization"')
238
239
# HINT: I don't have to test succesful or invalid update cases, since
240
# OrganizationForm inherit from well tested modules and has no custom methods
241
# (apart get_object, which is implicitely tested)
242