1
+ from typing import Optional
2
+
1
3
import pytest
4
+ from faker import Faker
2
5
3
6
from labelbox import ProjectRole
4
- from faker import Faker
7
+ from labelbox . schema . invite import Invite
5
8
6
9
faker = Faker ()
7
10
8
11
12
+ def find_invite_and_id_by_email (
13
+ queries , client , invite_email
14
+ ) -> Optional [Invite ]:
15
+ """For security reasons, invite uid is not returned for a query for a single invite.
16
+ This function is a workaround to find the invite uid by email using another query that returns all invites.
17
+ """
18
+ outstanding_invites = queries .get_invites (client )
19
+
20
+ for outstanding_invite in outstanding_invites :
21
+ if outstanding_invite .email == invite_email :
22
+ return outstanding_invite
23
+ return None
24
+
25
+
9
26
@pytest .fixture
10
27
def org_invite (client , organization , environ , queries ):
11
28
role = client .get_roles ()["LABELER" ]
@@ -27,7 +44,9 @@ def org_invite(client, organization, environ, queries):
27
44
28
45
yield invite , invite_limit
29
46
30
- queries .cancel_invite (client , invite .uid )
47
+ found_invite = find_invite_and_id_by_email (queries , client , invite .email )
48
+ assert found_invite is not None , "Invite not found"
49
+ queries .cancel_invite (client , found_invite .uid )
31
50
32
51
33
52
@pytest .fixture
@@ -60,30 +79,32 @@ def create_project_invite(
60
79
61
80
yield invite
62
81
63
- queries .cancel_invite (client , invite .uid )
82
+ found_invite = find_invite_and_id_by_email (queries , client , invite .email )
83
+ assert found_invite is not None , "Invite not found"
84
+ queries .cancel_invite (client , found_invite .uid )
64
85
65
86
66
87
def test_org_invite (client , organization , environ , queries , org_invite ):
67
88
invite , invite_limit = org_invite
68
89
role = client .get_roles ()["LABELER" ]
69
90
91
+ assert (
92
+ invite .uid == "invited"
93
+ ) # for security reasons we don't return the invite uid
94
+
70
95
if environ .value == "prod" :
71
96
invite_limit_after = organization .invite_limit ()
72
97
# One user added
73
98
assert invite_limit .remaining - invite_limit_after .remaining == 1
74
99
# An invite shouldn't effect the user count until after it is accepted
75
100
76
- outstanding_invites = queries .get_invites (client )
77
- in_list = False
101
+ found_invite = find_invite_and_id_by_email (queries , client , invite .email )
78
102
79
- for outstanding_invite in outstanding_invites :
80
- if outstanding_invite .uid == invite .uid :
81
- in_list = True
82
- org_role = outstanding_invite .organization_role_name .lower ()
83
- assert (
84
- org_role == role .name .lower ()
85
- ), "Role should be labeler. Found {org_role} "
86
- assert in_list , "Invite not found"
103
+ assert found_invite is not None , "Invite not found"
104
+ org_role = found_invite .organization_role_name .lower ()
105
+ assert (
106
+ org_role == role .name .lower ()
107
+ ), "Role should be labeler. Found {org_role} "
87
108
88
109
89
110
def test_cancel_invite (
@@ -96,6 +117,10 @@ def test_cancel_invite(
96
117
"" .join (faker .random_letters (26 ))
97
118
)
98
119
invite = organization .invite_user (dummy_email , role )
120
+ found_invite = find_invite_and_id_by_email (queries , client , invite .email )
121
+ assert found_invite is not None , "Invite not found"
122
+ invite .uid = found_invite .uid # for security reasons we don't return the invite uid directly but need it in order to cancel the invite
123
+
99
124
queries .cancel_invite (client , invite .uid )
100
125
outstanding_invites = [i .uid for i in queries .get_invites (client )]
101
126
assert invite .uid not in outstanding_invites
0 commit comments