Completed
Push — master ( 4f7ee6...646424 )
by Paolo
08:30 queued 06:53
created

uid.tests.test_views   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 184
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 18
eloc 100
dl 0
loc 184
rs 10
c 0
b 0
f 0

18 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 ProtectedViewTest.setUp() 0 13 1
A AboutViewTest.test_url_resolves_view() 0 3 1
A DashBoardViewTest.setUp() 0 9 1
A SummaryViewTest.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 ProtectedViewTest.test_response() 0 8 1
A AboutViewTest.setUp() 0 7 1
A TermsViewTest.test_url_resolves_view() 0 3 1
A SummaryViewTest.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
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,
14
    OwnerMixinTestCase, LoginMixinTestCase)
15
16
from . import DataSourceMixinTestCase
17
from ..models import Submission
18
from ..views import (
19
    DashBoardView, SummaryView, AboutView, IndexView, PrivacyView, TermsView,
20
    AboutUploadingView)
21
22
23
class Initialize(TestCase):
24
    """Does the common stuff when testing cases are run"""
25
26
    fixtures = [
27
        "uid/user"
28
    ]
29
30
    def setUp(self):
31
        self.client = Client()
32
        self.client.login(username='test', password='test')
33
34
35
class IndexViewTest(StatusMixinTestCase, Initialize):
36
    def setUp(self):
37
        # create a test user
38
        super().setUp()
39
40
        # test page
41
        self.url = reverse('index')
42
        self.response = self.client.get(self.url)
43
44
    def test_url_resolves_view(self):
45
        view = resolve('/')
46
        self.assertIsInstance(view.func.view_class(), IndexView)
47
48
49
class DashBoardViewTest(GeneralMixinTestCase, Initialize):
50
    def setUp(self):
51
        # create a test user
52
        super().setUp()
53
54
        # get the url for dashboard
55
        self.url = reverse('uid:dashboard')
56
57
        # get a response
58
        self.response = self.client.get(self.url)
59
60
    def test_url_resolves_view(self):
61
        view = resolve('/uid/dashboard/')
62
        self.assertIsInstance(view.func.view_class(), DashBoardView)
63
64
    def test_contains_navigation_links(self):
65
        create_url = reverse('submissions:create')
66
        summary_url = reverse('uid:summary')
67
68
        self.assertContains(self.response, 'href="{0}"'.format(create_url))
69
        self.assertContains(self.response, 'href="{0}"'.format(summary_url))
70
71
        # TODO: test resume submission link
72
73
    # TODO: test submission button inactive
74
75
76
class AboutViewTest(StatusMixinTestCase, Initialize):
77
    def setUp(self):
78
        # create a test user
79
        super().setUp()
80
81
        # get the url and a respose
82
        self.url = reverse('about')
83
        self.response = self.client.get(self.url)
84
85
    def test_url_resolves_view(self):
86
        view = resolve('/about/')
87
        self.assertIsInstance(view.func.view_class(), AboutView)
88
89
90
class PrivacyViewTest(StatusMixinTestCase, Initialize):
91
    def setUp(self):
92
        # create a test user
93
        super().setUp()
94
95
        # get the url and a respose
96
        self.url = reverse('privacy-policy')
97
        self.response = self.client.get(self.url)
98
99
    def test_url_resolves_view(self):
100
        view = resolve('/privacy/')
101
        self.assertIsInstance(view.func.view_class(), PrivacyView)
102
103
104
class TermsViewTest(StatusMixinTestCase, Initialize):
105
    def setUp(self):
106
        # create a test user
107
        super().setUp()
108
109
        # get the url and a respose
110
        self.url = reverse('terms-and-conditions')
111
        self.response = self.client.get(self.url)
112
113
    def test_url_resolves_view(self):
114
        view = resolve('/terms/')
115
        self.assertIsInstance(view.func.view_class(), TermsView)
116
117
118
class AboutUploadingViewTest(StatusMixinTestCase, Initialize):
119
    def setUp(self):
120
        # create a test user
121
        super().setUp()
122
123
        # get the url and a respose
124
        self.url = reverse('about-uploading')
125
        self.response = self.client.get(self.url)
126
127
    def test_url_resolves_view(self):
128
        view = resolve('/about_uploading/')
129
        self.assertIsInstance(view.func.view_class(), AboutUploadingView)
130
131
132
class SummaryViewTest(GeneralMixinTestCase, Initialize):
133
    def setUp(self):
134
        # create a test user
135
        super().setUp()
136
137
        # get the url for dashboard
138
        self.url = reverse('uid:summary')
139
140
        # get a response
141
        self.response = self.client.get(self.url)
142
143
    def test_url_resolves_view(self):
144
        view = resolve('/uid/summary/')
145
        self.assertIsInstance(view.func.view_class(), SummaryView)
146
147
    # TODO: test summary after data load
148
149
150
class ProtectedViewTest(DataSourceMixinTestCase, OwnerMixinTestCase,
151
                        LoginMixinTestCase, TestCase):
152
    """A class to test protected view"""
153
154
    fixtures = [
155
        "uid/user",
156
        "uid/dictcountry",
157
        "uid/dictrole",
158
        "uid/organization",
159
        "uid/submission"
160
    ]
161
162
    def setUp(self):
163
        super().setUp()
164
165
        self.client = Client()
166
        self.client.login(username='test', password='test')
167
168
        self.submission_id = 1
169
        self.submission = Submission.objects.get(pk=self.submission_id)
170
171
        self.file_name = self.submission.get_uploaded_file_basename()
172
173
        # define url
174
        self.url = "/protected/%s" % (self.submission.uploaded_file)
175
176
    def test_response(self):
177
        # get a response
178
        response = self.client.get(self.url)
179
180
        self.assertEqual(
181
            response.get('Content-Disposition'),
182
            'attachment; filename="{}"'.format(
183
                self.file_name)
184
        )
185