Skip to content

Commit 90d92c3

Browse files
committed
docs(scripts): add docstring on each ensure_* to list the requirements being checked
1 parent c7b5714 commit 90d92c3

File tree

1 file changed

+50
-18
lines changed

1 file changed

+50
-18
lines changed

scripts/setup_test_workspace.py

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
there are a few limitations due to actions that cannot be performed through
55
the API, notably :
66
- Create the workspace
7-
- Create members
8-
- Add deleted members back to the workspace
9-
- Integrate a source
7+
- We cannot create members, so there must exist a minimum amount of members in the workspace
8+
- This also means deleted members cannot be brought back from the script
9+
- We cannot integrate a source entirely from the public API
10+
- There must exist a source in the workspace
1011
"""
1112

1213
import os
@@ -50,7 +51,7 @@
5051
PYGITGUARDIAN_TEST_TEAM = "PyGitGuardian team"
5152

5253

53-
def ensure_not_detail(var: T | Detail) -> T:
54+
def ensure_success(var: T | Detail) -> T:
5455
if not isinstance(var, Detail):
5556
return var
5657
else:
@@ -60,12 +61,21 @@ def ensure_not_detail(var: T | Detail) -> T:
6061
def unwrap_paginated_response(
6162
var: CursorPaginatedResponse[PaginatedDataType] | Detail,
6263
) -> List[PaginatedDataType]:
63-
data = ensure_not_detail(var)
64+
data = ensure_success(var)
6465

6566
return data.data
6667

6768

6869
def ensure_member_coherence():
70+
"""
71+
This function ensures that the workspace :
72+
- Has no deactivated members
73+
- If there are, they will be activated
74+
- Has at most 1 admin / manager (excluding owner)
75+
- It may demote some manager to member
76+
- There is at least `MIN_NB_MEMBER`
77+
"""
78+
6979
deactivated_members = unwrap_paginated_response(
7080
client.list_members(MembersParameters(active=False))
7181
)
@@ -78,7 +88,7 @@ def ensure_member_coherence():
7888

7989
if len(admin_members) > 1:
8090
for member in admin_members[1:]:
81-
ensure_not_detail(
91+
ensure_success(
8292
client.update_member(UpdateMember(member.id, AccessLevel.MEMBER))
8393
)
8494
else:
@@ -89,20 +99,22 @@ def ensure_member_coherence():
8999
len(members) > 0
90100
), "There must be at least one member with access level member in the workspace"
91101

92-
ensure_not_detail(
102+
ensure_success(
93103
client.update_member(UpdateMember(members[0].id, AccessLevel.MANAGER))
94104
)
95105

96-
members = ensure_not_detail(client.list_members(MembersParameters(per_page=5)))
106+
members = ensure_success(client.list_members(MembersParameters(per_page=5)))
97107

98-
assert len(members.data) > 3, "There must be at least 3 members in the workspace"
108+
assert (
109+
len(members.data) > MIN_NB_MEMBER
110+
), "There must be at least 3 members in the workspace"
99111

100112

101113
def add_source_to_team(team: Team, available_sources: Iterable[Source] | None = None):
102114
if available_sources is None:
103-
available_sources = ensure_not_detail(client.list_sources()).data
115+
available_sources = ensure_success(client.list_sources()).data
104116

105-
ensure_not_detail(
117+
ensure_success(
106118
client.update_team_source(
107119
UpdateTeamSource(team.id, [source.id for source in available_sources], [])
108120
)
@@ -133,7 +145,7 @@ def add_team_members(
133145
)
134146
assert admin_member is not None, "There should be at least one admin member"
135147

136-
ensure_not_detail(
148+
ensure_success(
137149
client.create_team_member(
138150
team.id,
139151
CreateTeamMember(
@@ -163,7 +175,7 @@ def add_team_members(
163175
if to_add_member.access_level == AccessLevel.MANAGER:
164176
is_team_leader = True
165177

166-
ensure_not_detail(
178+
ensure_success(
167179
client.create_team_member(
168180
team.id,
169181
CreateTeamMember(
@@ -176,6 +188,17 @@ def add_team_members(
176188

177189

178190
def ensure_team_coherence():
191+
"""
192+
This function ensures that the workspace :
193+
- Has no team with name prefixed by `PYGITGUARDIAN_TEST_TEAM`
194+
- At least `MIN_NB_TEAM` exist
195+
- If not they will be created
196+
- Every team has at least one source
197+
- If possible, it will try to add at least one source
198+
- Every team has at least 2 members, an admin and a member
199+
- If possible, it will try to add those members
200+
"""
201+
179202
pygitguardian_teams = []
180203
try:
181204
pygitguardian_teams = unwrap_paginated_response(
@@ -186,7 +209,7 @@ def ensure_team_coherence():
186209
raise
187210
finally:
188211
for team in pygitguardian_teams:
189-
ensure_not_detail(client.delete_team(team.id))
212+
ensure_success(client.delete_team(team.id))
190213

191214
teams = unwrap_paginated_response(
192215
# exclude global team since we can't add sources / members to it
@@ -196,7 +219,7 @@ def ensure_team_coherence():
196219
nb_teams = len(teams)
197220
if nb_teams < MIN_NB_TEAM:
198221
for i in range(MIN_NB_TEAM - nb_teams):
199-
new_team = ensure_not_detail(
222+
new_team = ensure_success(
200223
client.create_team(CreateTeam(name=f"PyGitGuardian Team {i}"))
201224
)
202225
teams.append(new_team)
@@ -217,16 +240,25 @@ def ensure_team_coherence():
217240

218241

219242
def ensure_invitation_coherence():
243+
"""
244+
This function ensures that the workspace :
245+
- Has no invitation for emails starting with `pygitguardian`
246+
- There is at least one pending invitation
247+
- If not, an invitation will be sent to `pygitguardian@example.com`
248+
- All team have attached team invitations
249+
- If not, they will be created
250+
"""
251+
220252
test_invitation = unwrap_paginated_response(
221253
client.list_invitations(InvitationParameters(search="pygitguardian"))
222254
)
223255

224256
for invitation in test_invitation:
225-
ensure_not_detail(client.delete_invitation(invitation.id))
257+
ensure_success(client.delete_invitation(invitation.id))
226258
invitations = unwrap_paginated_response(client.list_invitations())
227259

228260
if len(invitations) < 1:
229-
invitation = ensure_not_detail(
261+
invitation = ensure_success(
230262
client.create_invitation(
231263
CreateInvitation(
232264
email="pygitguardian@invitation.com",
@@ -243,7 +275,7 @@ def ensure_invitation_coherence():
243275
client.list_team_invitations(team.id)
244276
)
245277
if not team_invitations:
246-
ensure_not_detail(
278+
ensure_success(
247279
client.create_team_invitation(
248280
team.id,
249281
CreateTeamInvitation(

0 commit comments

Comments
 (0)