Skip to content

Commit d51f3fa

Browse files
committed
Typos and wrote tests
1 parent affd0a2 commit d51f3fa

File tree

2 files changed

+119
-4
lines changed

2 files changed

+119
-4
lines changed

libs/labelbox/src/labelbox/schema/member.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,26 @@
66
)
77
from typing import Set, Iterator, Any
88
from pydantic import (
9-
ConfigDict,
109
Field,
1110
field_validator,
1211
model_serializer,
1312
model_validator,
14-
PrivateAttr,
1513
)
1614
from labelbox.utils import _CamelCaseMixin
1715
from labelbox.schema.role import Role
1816
from labelbox import Client
1917

2018

2119
class ProjectMembership(_CamelCaseMixin):
20+
"""Represents a members project role
21+
22+
Args:
23+
project_id (str): id of the project you want the member included
24+
role (Optional[Role]): Members role for the project. None represents the member having a default role.
25+
"""
26+
2227
project_id: str
23-
role: Role
28+
role: Optional[Role] = None
2429

2530
def __hash__(self) -> int:
2631
return self.project_id.__hash__()
@@ -29,7 +34,7 @@ def __hash__(self) -> int:
2934
def serialize_model(self):
3035
return {
3136
"projectId": self.project_id,
32-
"roleId": None if self.role.name is None else self.role.id,
37+
"roleId": None if self.role is None else self.role.id,
3338
}
3439

3540

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
from uuid import uuid4
2+
3+
import faker
4+
from labelbox.schema.member import Member, ProjectMembership
5+
import pytest
6+
7+
from labelbox.exceptions import (
8+
ResourceNotFoundError,
9+
)
10+
from labelbox.schema.user_group import UserGroup, UserGroupColor
11+
12+
data = faker.Faker()
13+
14+
15+
@pytest.fixture
16+
def current_member(client):
17+
yield Member(client=client).get()
18+
19+
20+
@pytest.fixture
21+
def member(client, current_member):
22+
members = list(Member(client).get_members())
23+
test_member = None
24+
for member in members:
25+
if member.id != current_member.id:
26+
test_member = member
27+
return test_member
28+
29+
30+
@pytest.fixture
31+
def user_group(client):
32+
group_name = data.name()
33+
user_group = UserGroup(client)
34+
user_group.name = group_name
35+
user_group.color = UserGroupColor.BLUE
36+
37+
yield user_group.create()
38+
39+
user_group.delete()
40+
41+
42+
def test_get_member(current_member, client):
43+
current_member_eq = Member(client)
44+
current_member_eq.get()
45+
assert current_member_eq.id == current_member.id
46+
assert current_member_eq.email == current_member.email
47+
48+
49+
def test_throw_error_cannot_get_user_group_with_invalid_id(client):
50+
Member = UserGroup(Member=client, id=str(uuid4()))
51+
with pytest.raises(ResourceNotFoundError):
52+
Member.get()
53+
54+
55+
def test_throw_error_when_deleting_self(current_member, client):
56+
with pytest.raises(ValueError):
57+
current_member.delete()
58+
59+
60+
def test_update_member(client, test_member, project_pack, user_group):
61+
labeler_role = client.get_roles()["LABELER"]
62+
reviewer_role = client.get_roles()["REVIEWER"]
63+
for project in project_pack:
64+
test_member.project_memberships.add(
65+
ProjectMembership(project_id=project.uid, role=labeler_role)
66+
)
67+
test_member.default_role = reviewer_role
68+
test_member.user_group_ids.add(user_group.id)
69+
test_member.can_access_all_projects = False
70+
updated_member = test_member.update()
71+
72+
# Verify that the member was updated successfully
73+
assert test_member.email == updated_member.email
74+
for project in project_pack:
75+
assert (
76+
ProjectMembership(project_id=project.uid, role=labeler_role)
77+
in updated_member.project_memberships
78+
)
79+
assert user_group.id in updated_member.user_group_ids
80+
assert updated_member.default_role == reviewer_role
81+
82+
# Remove memberships and check if updated
83+
updated_member.project_memberships = set()
84+
updated_member.user_group_ids = set()
85+
updated_member.default_role = labeler_role
86+
updated_member.can_access_all_projects = True
87+
updated_member = updated_member.update()
88+
89+
assert updated_member.project_memberships == set()
90+
assert updated_member.user_group_ids == set()
91+
assert updated_member.default_role == labeler_role
92+
assert updated_member.can_access_all_projects
93+
94+
95+
def test_get_members(test_member, current_member, client):
96+
members = list(Member(client).get_members(search=current_member.email))
97+
assert current_member in members
98+
members = list(
99+
Member(client).get_members(roles=[current_member.default_role])
100+
)
101+
assert current_member in members
102+
members = list(Member(client).get_members())
103+
assert test_member in members
104+
assert current_member in members
105+
106+
107+
if __name__ == "__main__":
108+
import subprocess
109+
110+
subprocess.call(["pytest", "-v", __file__])

0 commit comments

Comments
 (0)