FossilRepo

fossilrepo / organization / tests.py
Blame History Raw 180 lines
1
import pytest
2
from django.contrib.auth.models import User
3
4
from .models import Organization, OrganizationMember, Team
5
6
7
@pytest.mark.django_db
8
class TestOrganization:
9
def test_create_organization(self):
10
org = Organization.objects.create(name="Acme Corp")
11
assert org.slug == "acme-corp"
12
assert org.guid is not None
13
14
def test_soft_delete_excludes_from_default_manager(self):
15
user = User.objects.create_user(username="test", password="x")
16
org = Organization.objects.create(name="DeleteMe")
17
org.soft_delete(user=user)
18
assert Organization.objects.filter(slug="deleteme").count() == 0
19
assert Organization.all_objects.filter(slug="deleteme").count() == 1
20
21
22
@pytest.mark.django_db
23
class TestOrganizationMember:
24
def test_create_membership(self, admin_user, org):
25
assert OrganizationMember.objects.filter(member=admin_user, organization=org).exists()
26
27
def test_unique_membership(self, admin_user, org):
28
from django.db import IntegrityError
29
30
with pytest.raises(IntegrityError):
31
OrganizationMember.objects.create(member=admin_user, organization=org)
32
33
def test_str_representation(self, admin_user, org):
34
member = OrganizationMember.objects.get(member=admin_user, organization=org)
35
assert str(member) == f"{org}/{admin_user}"
36
37
38
@pytest.mark.django_db
39
class TestOrgSettingsViews:
40
def test_settings_page_renders(self, admin_client, org):
41
response = admin_client.get("/settings/")
42
assert response.status_code == 200
43
assert org.name in response.content.decode()
44
45
def test_settings_denied_without_perm(self, no_perm_client, org):
46
response = no_perm_client.get("/settings/")
47
assert response.status_code == 403
48
49
def test_settings_edit_renders(self, admin_client, org):
50
response = admin_client.get("/settings/edit/")
51
assert response.status_code == 200
52
53
def test_settings_edit_saves(self, admin_client, org):
54
response = admin_client.post("/settings/edit/", {"name": "Updated Org", "description": "New desc", "website": ""})
55
assert response.status_code == 302
56
org.refresh_from_db()
57
assert org.name == "Updated Org"
58
59
def test_settings_edit_denied(self, no_perm_client, org):
60
response = no_perm_client.post("/settings/edit/", {"name": "Hacked"})
61
assert response.status_code == 403
62
63
64
@pytest.mark.django_db
65
class TestMemberViews:
66
def test_member_list_renders(self, admin_client, org):
67
response = admin_client.get("/settings/members/")
68
assert response.status_code == 200
69
70
def test_member_list_htmx_returns_partial(self, admin_client, org):
71
response = admin_client.get("/settings/members/", HTTP_HX_REQUEST="true")
72
assert response.status_code == 200
73
assert b"member-table" in response.content
74
75
def test_member_list_search(self, admin_client, org):
76
response = admin_client.get("/settings/members/?search=admin")
77
assert response.status_code == 200
78
79
def test_member_list_denied(self, no_perm_client, org):
80
response = no_perm_client.get("/settings/members/")
81
assert response.status_code == 403
82
83
def test_member_add(self, admin_client, org):
84
User.objects.create_user(username="newuser", password="x")
85
response = admin_client.post("/settings/members/add/", {"user": User.objects.get(username="newuser").id})
86
assert response.status_code == 302
87
assert OrganizationMember.objects.filter(member__username="newuser", organization=org).exists()
88
89
def test_member_add_denied(self, no_perm_client, org):
90
response = no_perm_client.get("/settings/members/add/")
91
assert response.status_code == 403
92
93
def test_member_remove(self, admin_client, org, admin_user):
94
response = admin_client.post(f"/settings/members/{admin_user.username}/remove/")
95
assert response.status_code == 302
96
membership = OrganizationMember.all_objects.get(member=admin_user, organization=org)
97
assert membership.is_deleted
98
99
def test_member_remove_denied(self, no_perm_client, org, admin_user):
100
response = no_perm_client.post(f"/settings/members/{admin_user.username}/remove/")
101
assert response.status_code == 403
102
103
104
@pytest.mark.django_db
105
class TestTeamModel:
106
def test_create_team(self, org, admin_user):
107
team = Team.objects.create(name="Backend", organization=org, created_by=admin_user)
108
assert team.slug == "backend"
109
assert team.guid is not None
110
111
def test_soft_delete_team(self, sample_team, admin_user):
112
sample_team.soft_delete(user=admin_user)
113
assert Team.objects.filter(slug=sample_team.slug).count() == 0
114
assert Team.all_objects.filter(slug=sample_team.slug).count() == 1
115
116
117
@pytest.mark.django_db
118
class TestTeamViews:
119
def test_team_list_renders(self, admin_client, org, sample_team):
120
response = admin_client.get("/settings/teams/")
121
assert response.status_code == 200
122
assert sample_team.name in response.content.decode()
123
124
def test_team_list_htmx(self, admin_client, org, sample_team):
125
response = admin_client.get("/settings/teams/", HTTP_HX_REQUEST="true")
126
assert response.status_code == 200
127
assert b"team-table" in response.content
128
129
def test_team_list_search(self, admin_client, org, sample_team):
130
response = admin_client.get("/settings/teams/?search=Core")
131
assert response.status_code == 200
132
133
def test_team_list_denied(self, no_perm_client, org):
134
response = no_perm_client.get("/settings/teams/")
135
assert response.status_code == 403
136
137
def test_team_create(self, admin_client, org):
138
response = admin_client.post("/settings/teams/create/", {"name": "New Team", "description": "A new team"})
139
assert response.status_code == 302
140
assert Team.objects.filter(slug="new-team").exists()
141
142
def test_team_create_denied(self, no_perm_client, org):
143
response = no_perm_client.post("/settings/teams/create/", {"name": "Hack Team"})
144
assert response.status_code == 403
145
146
def test_team_detail_renders(self, admin_client, sample_team):
147
response = admin_client.get(f"/settings/teams/{sample_team.slug}/")
148
assert response.status_code == 200
149
assert sample_team.name in response.content.decode()
150
151
def test_team_update(self, admin_client, sample_team):
152
response = admin_client.post(f"/settings/teams/{sample_team.slug}/edit/", {"name": "Updated Team", "description": ""})
153
assert response.status_code == 302
154
sample_team.refresh_from_db()
155
assert sample_team.name == "Updated Team"
156
157
def test_team_update_denied(self, no_perm_client, sample_team):
158
response = no_perm_client.post(f"/settings/teams/{sample_team.slug}/edit/", {"name": "Hacked"})
159
assert response.status_code == 403
160
161
def test_team_delete(self, admin_client, sample_team):
162
response = admin_client.post(f"/settings/teams/{sample_team.slug}/delete/")
163
assert response.status_code == 302
164
assert Team.objects.filter(slug=sample_team.slug).count() == 0
165
166
def test_team_delete_denied(self, no_perm_client, sample_team):
167
response = no_perm_client.post(f"/settings/teams/{sample_team.slug}/delete/")
168
assert response.status_code == 403
169
170
def test_team_member_add(self, admin_client, sample_team):
171
new_user = User.objects.create_user(username="teamuser", password="x")
172
response = admin_client.post(f"/settings/teams/{sample_team.slug}/members/add/", {"user": new_user.id})
173
assert response.status_code == 302
174
assert sample_team.members.filter(username="teamuser").exists()
175
176
def test_team_member_remove(self, admin_client, sample_team, admin_user):
177
response = admin_client.post(f"/settings/teams/{sample_team.slug}/members/{admin_user.username}/remove/")
178
assert response.status_code == 302
179
assert not sample_team.members.filter(username=admin_user.username).exists()
180

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button