Completed
Push — master ( 897349...4f09bf )
by Alexander
109:51 queued 107:08
created

TestAdminView.test_admin_display()   A

Complexity

Conditions 1

Size

Total Lines 47
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 31
dl 0
loc 47
rs 9.1359
c 0
b 0
f 0
cc 1
nop 1
1
# -*- coding: utf-8 -*-
2
# pylint: disable=invalid-name
3
4
from http import HTTPStatus
5
6
from django.urls import reverse
7
from django.conf import settings
8
from django.utils.translation import ugettext_lazy as _
9
10
from tcms.tests import LoggedInTestCase
11
from tcms.tests.factories import UserFactory
12
13
14
class TestAdminView(LoggedInTestCase):
15
    @classmethod
16
    def setUpTestData(cls):
17
        super().setUpTestData()
18
        cls.tester.is_staff = True  # can access admin
19
        cls.tester.is_superuser = True  # has all perms
20
        cls.tester.save()
21
22
        cls.url = reverse('admin:index')
23
24
    def test_admin_display(self):
25
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
26
            username=self.tester.username,
27
            password='password')
28
        response = self.client.get(self.url)
29
30
        self.assertEqual(HTTPStatus.OK, response.status_code)
31
        self.assertNotContains(response, "You don't have permission to edit anything")
32
33
        # for tcms.management
34
        self.assertContains(response, 'Builds')
35
        self.assertContains(response, 'Classifications')
36
        self.assertContains(response, 'Components')
37
        self.assertContains(response, 'Priorities')
38
        self.assertContains(response, 'Products')
39
        self.assertContains(response, 'Tags')
40
        self.assertContains(response, 'Versions')
41
42
        # for tcms.bugs
43
        self.assertContains(response, '<a href="/admin/bugs/" class="grp-section">%s</a>' %
44
                            _('Bugs'), html=True)
45
        self.assertContains(response, '<strong>Bugs</strong>', html=True)
46
47
        # for tcms.testcases
48
        self.assertContains(response, 'Bug trackers')
49
        self.assertContains(response, 'Test case categories')
50
51
        self.assertNotContains(response, 'Test case status')
52
        self.assertContains(response, 'Testcases')
53
        self.assertContains(response, 'Test cases')
54
55
        # for tcms.testplans
56
        self.assertContains(response, 'Plan types')
57
        self.assertContains(response, 'Testplans')
58
        self.assertContains(response, 'Test plans')
59
60
        # for tcms.testruns
61
        self.assertNotContains(response, 'Test execution status')
62
        self.assertContains(response, 'Testruns')
63
        self.assertContains(response, 'Test runs')
64
65
        # for django_comments
66
        self.assertNotContains(response, 'Django_Comments')
67
        self.assertNotContains(response, 'Comments')
68
69
        # for django.contrib.sites
70
        self.assertContains(response, _('Sites'))
71
72
    def test_sites_admin_add(self):
73
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
74
            username=self.tester.username,
75
            password='password')
76
        response = self.client.get(reverse('admin:sites_site_add'))
77
        self.assertRedirects(response, reverse('admin:sites_site_change', args=[settings.SITE_ID]))
78
79
    def test_sites_admin_delete(self):
80
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
81
            username=self.tester.username,
82
            password='password')
83
        response = self.client.get(reverse('admin:sites_site_delete', args=[settings.SITE_ID]))
84
        self.assertRedirects(response, reverse('admin:sites_site_change', args=[settings.SITE_ID]))
85
86
    def test_users_list_shows_is_superuser_column(self):
87
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
88
            username=self.tester.username,
89
            password='password')
90
        response = self.client.get(reverse('admin:auth_user_changelist'))
91
        self.assertContains(response, 'column-is_superuser')
92
93
94
class TestUserDeletionViaAdminView(LoggedInTestCase):
95
    @classmethod
96
    def setUpTestData(cls):
97
        super().setUpTestData()
98
99
        cls.superuser = UserFactory()
100
        cls.superuser.is_staff = True
101
        cls.superuser.is_superuser = True
102
        cls.superuser.set_password('password')
103
        cls.superuser.save()
104
105
        cls.regular_user = UserFactory()
106
        cls.regular_user.is_staff = True
107
        cls.regular_user.set_password('password')
108
        cls.regular_user.save()
109
110
        cls.url = reverse('admin:auth_user_delete', args=[cls.regular_user.pk])
111
112
    def test_regular_user_should_not_delete_another_user(self):
113
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
114
            username=self.regular_user.username,
115
            password='password')
116
        response = self.client.get(reverse('admin:auth_user_delete', args=[self.superuser.pk]))
117
118
        # it is not possible to delete other user accounts
119
        self.assertEqual(HTTPStatus.FORBIDDEN, response.status_code)
120
121
    def test_regular_user_should_be_able_to_delete_himself(self):
122
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
123
            username=self.regular_user.username,
124
            password='password')
125
        response = self.client.get(self.url)
126
127
        self.assertEqual(HTTPStatus.OK, response.status_code)
128
        self.assertContains(response, _("Yes, I'm sure"))
129
130
    def test_superuser_should_be_able_to_delete_any_user(self):
131
        self.client.login(  # nosec:B106:hardcoded_password_funcarg
132
            username=self.superuser.username,
133
            password='password')
134
        response = self.client.get(self.url)
135
136
        # verify there's the Yes, I'm certain button
137
        self.assertEqual(HTTPStatus.OK, response.status_code)
138
        self.assertContains(response, _("Yes, I'm sure"))
139
        response = self.client.post(self.url, {'post': 'yes'}, follow=True)
140
        self.assertEqual(HTTPStatus.OK, response.status_code)
141
        self.assertNotContains(response, '<a href="/admin/auth/user/%d/change/">%s</a>' %
142
                               (self.regular_user.pk, self.regular_user.username), html=True)
143