1
- import django_dynamic_fixture as fixture
2
1
from allauth .account .views import SignupView
3
2
from django .contrib .auth .models import User
4
3
from django .core .cache import cache
5
4
from django .test import TestCase
6
5
from django .test .utils import override_settings
7
6
from django .urls import reverse
7
+ from django_dynamic_fixture import get
8
8
9
9
from readthedocs .organizations .models import (
10
10
Organization ,
11
11
Team ,
12
12
TeamInvite ,
13
13
TeamMember ,
14
14
)
15
- from readthedocs .organizations .views import private as private_views
16
15
from readthedocs .organizations .views import public as public_views
17
16
from readthedocs .projects .models import Project
18
17
from readthedocs .rtd_tests .base import RequestFactoryTestMixin
@@ -24,24 +23,23 @@ class OrganizationViewTests(RequestFactoryTestMixin, TestCase):
24
23
"""Organization views tests."""
25
24
26
25
def setUp (self ):
27
- self .owner = fixture .get (User )
28
- self .project = fixture .get (Project )
29
- self .organization = fixture .get (
26
+ self .
owner = get (
User ,
username = 'owner' ,
email = '[email protected] ' )
27
+ self .owner .emailaddress_set .create (email = self .owner .email , verified = True )
28
+ self .project = get (Project )
29
+ self .organization = get (
30
30
Organization ,
31
31
owners = [self .owner ],
32
32
projects = [self .project ],
33
33
)
34
- self .team = fixture .get (Team , organization = self .organization )
34
+ self .team = get (Team , organization = self .organization )
35
+ self .client .force_login (self .owner )
35
36
36
37
def test_delete (self ):
37
38
"""Delete organization on post."""
38
- req = self .request (
39
- 'post' ,
40
- '/organizations/{}/delete/' .format (self .organization .slug ),
41
- user = self .owner ,
39
+ resp = self .client .post (
40
+ reverse ('organization_delete' , args = [self .organization .slug ])
42
41
)
43
- view = private_views .DeleteOrganization .as_view ()
44
- resp = view (req , slug = self .organization .slug )
42
+ self .assertEqual (resp .status_code , 302 )
45
43
46
44
self .assertFalse (Organization .objects
47
45
.filter (pk = self .organization .pk )
@@ -53,30 +51,69 @@ def test_delete(self):
53
51
.filter (pk = self .project .pk )
54
52
.exists ())
55
53
54
+ def test_add_owner (self ):
55
+ url = reverse ('organization_owner_add' , args = [self .organization ])
56
+ user = get (
User ,
username = 'test-user' ,
email = '[email protected] ' )
57
+ user .emailaddress_set .create (email = user .email , verified = False )
58
+
59
+ user_b = get (
User ,
username = 'test-user-b' ,
email = '[email protected] ' )
60
+ user_b .emailaddress_set .create (email = user_b .email , verified = True )
61
+
62
+ # Adding an already owner.
63
+ for username in [self .owner .username , self .owner .email ]:
64
+ resp = self .client .post (url , data = {'owner' : username })
65
+ form = resp .context_data ['form' ]
66
+ self .assertFalse (form .is_valid ())
67
+ self .assertIn ('is already an owner' , form .errors ['owner' ][0 ])
68
+
69
+ # Unknown user.
70
+ resp = self .client .post (url , data = {'owner' : 'non-existent' })
71
+ form = resp .context_data ['form' ]
72
+ self .assertFalse (form .is_valid ())
73
+ self .assertIn ('does not exist' , form .errors ['owner' ][0 ])
74
+
75
+ # From an unverified email.
76
+ resp = self .client .post (url , data = {'owner' : user .email })
77
+ form = resp .context_data ['form' ]
78
+ self .assertFalse (form .is_valid ())
79
+ self .assertIn ('does not exist' , form .errors ['owner' ][0 ])
80
+
81
+ # Using a username.
82
+ self .assertFalse (user in self .organization .owners .all ())
83
+ resp = self .client .post (url , data = {'owner' : user .username })
84
+ self .assertEqual (resp .status_code , 302 )
85
+ self .assertTrue (user in self .organization .owners .all ())
86
+
87
+ # Using an email.
88
+ self .assertFalse (user_b in self .organization .owners .all ())
89
+ resp = self .client .post (url , data = {'owner' : user_b .email })
90
+ self .assertEqual (resp .status_code , 302 )
91
+ self .assertTrue (user_b in self .organization .owners .all ())
92
+
56
93
57
94
@override_settings (RTD_ALLOW_ORGANIZATIONS = True )
58
95
class OrganizationInviteViewTests (RequestFactoryTestMixin , TestCase ):
59
96
60
97
"""Tests for invite handling in views."""
61
98
62
99
def setUp (self ):
63
- self .owner = fixture . get (User )
64
- self .organization = fixture . get (
100
+ self .owner = get (User )
101
+ self .organization = get (
65
102
Organization ,
66
103
owners = [self .owner ],
67
104
)
68
- self .team = fixture . get (Team , organization = self .organization )
105
+ self .team = get (Team , organization = self .organization )
69
106
70
107
def tearDown (self ):
71
108
cache .clear ()
72
109
73
110
def test_redemption_by_authed_user (self ):
74
- user = fixture . get (User )
75
- invite = fixture . get (
111
+ user = get (User )
112
+ invite = get (
76
113
TeamInvite , email = user .email , team = self .team ,
77
114
organization = self .organization ,
78
115
)
79
- team_member = fixture . get (
116
+ team_member = get (
80
117
TeamMember ,
81
118
invite = invite ,
82
119
member = None ,
@@ -102,11 +139,11 @@ def test_redemption_by_unauthed_user(self):
102
139
103
140
with self .assertRaises (User .DoesNotExist ):
104
141
User .objects .get (email = email )
105
- invite = fixture . get (
142
+ invite = get (
106
143
TeamInvite , email = email , team = self .team ,
107
144
organization = self .organization ,
108
145
)
109
- team_member = fixture . get (
146
+ team_member = get (
110
147
TeamMember ,
111
148
invite = invite ,
112
149
member = None ,
@@ -163,18 +200,18 @@ def test_redemption_by_unauthed_user(self):
163
200
)
164
201
165
202
def test_redemption_by_dulpicate_user (self ):
166
- user = fixture . get (User )
167
- invite = fixture . get (
203
+ user = get (User )
204
+ invite = get (
168
205
TeamInvite , email = user .email , team = self .team ,
169
206
organization = self .organization ,
170
207
)
171
- team_member_a = fixture . get (
208
+ team_member_a = get (
172
209
TeamMember ,
173
210
invite = None ,
174
211
member = user ,
175
212
team = self .team ,
176
213
)
177
- team_member_b = fixture . get (
214
+ team_member_b = get (
178
215
TeamMember ,
179
216
invite = invite ,
180
217
member = None ,
@@ -204,7 +241,7 @@ def tearDown(self):
204
241
205
242
def test_organization_signup (self ):
206
243
self .assertEqual (Organization .objects .count (), 0 )
207
- user = fixture . get (User )
244
+ user = get (User )
208
245
self .client .force_login (user )
209
246
data = {
210
247
'name' : 'Testing Organization' ,
0 commit comments