Skip to content

Commit 4701aaa

Browse files
authored
[PLT-1205] More defensive programming on input (#1720)
1 parent e3a7787 commit 4701aaa

File tree

3 files changed

+70
-7
lines changed

3 files changed

+70
-7
lines changed

libs/labelbox/src/labelbox/schema/user_group.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,10 @@ def get(self) -> "UserGroup":
110110
111111
Raises:
112112
ResourceNotFoundError: If the query fails to fetch the group information.
113+
ValueError: If the group ID is not provided.
113114
"""
115+
if not self.id:
116+
raise ValueError("Group id is required")
114117
query = """
115118
query GetUserGroupPyApi($id: ID!) {
116119
userGroup(where: {id: $id}) {
@@ -156,7 +159,12 @@ def update(self) -> "UserGroup":
156159
Raises:
157160
ResourceNotFoundError: If the update fails due to unknown user group
158161
UnprocessableEntityError: If the update fails due to a malformed input
162+
ValueError: If the group id or name is not provided
159163
"""
164+
if not self.id:
165+
raise ValueError("Group id is required")
166+
if not self.name:
167+
raise ValueError("Group name is required")
160168
query = """
161169
mutation UpdateUserGroupPyApi($id: ID!, $name: String!, $color: String!, $projectIds: [String!]!, $userIds: [String!]!) {
162170
updateUserGroup(
@@ -288,7 +296,10 @@ def delete(self) -> bool:
288296
289297
Raises:
290298
ResourceNotFoundError: If the deletion of the user group fails due to not existing
299+
ValueError: If the group ID is not provided.
291300
"""
301+
if not self.id:
302+
raise ValueError("Group id is required")
292303
query = """
293304
mutation DeleteUserGroupPyApi($id: ID!) {
294305
deleteUserGroup(where: {id: $id}) {

libs/labelbox/tests/integration/schema/test_user_group.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def user_group(client):
2121
user_group.delete()
2222

2323

24-
def test_existing_user_groups(user_group, client):
24+
def test_get_user_group(user_group, client):
2525
# Verify that the user group was created successfully
2626
user_group_equal = UserGroup(client)
2727
user_group_equal.id = user_group.id
@@ -31,7 +31,15 @@ def test_existing_user_groups(user_group, client):
3131
assert user_group.color == user_group_equal.color
3232

3333

34-
def test_cannot_get_user_group_with_invalid_id(client):
34+
def test_throw_error_get_user_group_no_id(user_group, client):
35+
old_id = user_group.id
36+
with pytest.raises(ValueError):
37+
user_group.id = ""
38+
user_group.get()
39+
user_group.id = old_id
40+
41+
42+
def test_throw_error_cannot_get_user_group_with_invalid_id(client):
3543
user_group = UserGroup(client=client, id=str(uuid4()))
3644
with pytest.raises(ResourceNotFoundError):
3745
user_group.get()
@@ -108,12 +116,20 @@ def test_update_user_group(user_group):
108116
assert user_group.color == UserGroupColor.PURPLE
109117

110118

111-
def test_cannot_update_name_to_empty_string(user_group):
112-
with pytest.raises(UnprocessableEntityError):
119+
def test_throw_error_cannot_update_name_to_empty_string(user_group):
120+
with pytest.raises(ValueError):
113121
user_group.name = ""
114122
user_group.update()
115123

116124

125+
def test_throw_error_cannot_update_id_to_empty_string(user_group):
126+
old_id = user_group.id
127+
with pytest.raises(ValueError):
128+
user_group.id = ""
129+
user_group.update()
130+
user_group.id = old_id
131+
132+
117133
def test_cannot_update_group_id(user_group):
118134
old_id = user_group.id
119135
with pytest.raises(ResourceNotFoundError):
@@ -160,7 +176,7 @@ def test_get_user_groups_with_creation_deletion(client):
160176

161177

162178
# project_pack creates two projects
163-
def test_update_user_group(user_group, client, project_pack):
179+
def test_update_user_group_users_projects(user_group, client, project_pack):
164180
users = list(client.get_users())
165181
projects = project_pack
166182

@@ -192,6 +208,14 @@ def test_throw_error_when_deleting_invalid_id_group(client):
192208
user_group.delete()
193209

194210

211+
def test_throw_error_delete_user_group_no_id(user_group, client):
212+
old_id = user_group.id
213+
with pytest.raises(ValueError):
214+
user_group.id = ""
215+
user_group.delete()
216+
user_group.id = old_id
217+
218+
195219
if __name__ == "__main__":
196220
import subprocess
197221
subprocess.call(["pytest", "-v", __file__])

libs/labelbox/tests/unit/schema/test_user_group.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ def test_constructor(self):
6565
assert len(group.projects) == 0
6666
assert len(group.users) == 0
6767

68+
def test_update_with_exception_name(self):
69+
group = self.group
70+
group.id = ""
71+
72+
with pytest.raises(ValueError):
73+
group.get()
74+
6875
def test_get(self):
6976
projects = [
7077
{
@@ -115,12 +122,12 @@ def test_get(self):
115122
assert len(group.projects) == 2
116123
assert len(group.users) == 2
117124

118-
def test_get_resource_not_found_error(self):
125+
def test_get_value_error(self):
119126
self.client.execute.return_value = None
120127
group = UserGroup(self.client)
121128
group.name = "Test Group"
122129

123-
with pytest.raises(ResourceNotFoundError):
130+
with pytest.raises(ValueError):
124131
group.get()
125132

126133
def test_update(self, group_user, group_project):
@@ -170,6 +177,20 @@ def test_update_resource_error_unknown_id(self):
170177
with pytest.raises(ResourceNotFoundError) as e:
171178
group.update()
172179

180+
def test_update_with_exception_name(self):
181+
group = self.group
182+
group.name = ""
183+
184+
with pytest.raises(UnprocessableEntityError):
185+
group.update()
186+
187+
def test_update_with_exception_name(self):
188+
group = self.group
189+
group.id = ""
190+
191+
with pytest.raises(ValueError):
192+
group.update()
193+
173194
def test_create_with_exception_id(self):
174195
group = self.group
175196
group.id = "group_id"
@@ -249,6 +270,13 @@ def test_delete_resource_not_found_error(self):
249270
with pytest.raises(ResourceNotFoundError):
250271
group.delete()
251272

273+
def test_delete_no_id(self):
274+
group = UserGroup(self.client)
275+
group.id = None
276+
277+
with pytest.raises(ValueError):
278+
group.delete()
279+
252280
def test_user_groups_empty(self):
253281
self.client.execute.return_value = {"userGroups": None}
254282

0 commit comments

Comments
 (0)