66from responses import matchers
77
88from posit .connect .client import Client
9+ from posit .connect .groups import Group
10+ from posit .connect .users import User
911
1012from .api import load_mock , load_mock_dict
1113
@@ -139,13 +141,18 @@ class TestUserGroups:
139141 def test_groups (self ):
140142 # Get user
141143 carlos_guid = "20a79ce3-6e87-4522-9faf-be24228800a4"
144+ carlos_empty_group_guid = "empty-group-guid"
142145 responses .get (
143146 f"https://connect.example/__api__/v1/users/{ carlos_guid } " ,
144147 json = load_mock_dict (f"v1/users/{ carlos_guid } .json" ),
145148 )
149+ responses .get (
150+ f"https://connect.example/__api__/v1/groups/{ carlos_empty_group_guid } /members?page_number=1&page_size=500" ,
151+ json = load_mock_dict (f"v1/groups/{ carlos_empty_group_guid } /members.json" ),
152+ )
146153 responses .get (
147154 "https://connect.example/__api__/v1/users" ,
148- json = load_mock ("v1/users?page_number=1&page_size=500.jsonc" ),
155+ json = load_mock_dict ("v1/users?page_number=1&page_size=500.jsonc" ),
149156 )
150157 # Get groups
151158 responses .get (
@@ -154,29 +161,90 @@ def test_groups(self):
154161 )
155162 # Get group members
156163 group_guid = "6f300623-1e0c-48e6-a473-ddf630c0c0c3"
157- empty_group_guid = "empty-group-guid"
158- for guid in (group_guid , empty_group_guid ):
159- responses .get (
160- f"https://connect.example/__api__/v1/groups/{ guid } /members" ,
161- json = load_mock_dict (f"v1/groups/{ guid } /members.json" ),
162- )
164+ responses .get (
165+ f"https://connect.example/__api__/v1/groups/{ group_guid } /members" ,
166+ json = load_mock_dict (f"v1/groups/{ group_guid } /members.json" ),
167+ )
163168
164169 client = Client ("https://connect.example/" , "12345" )
165- users = client .users .find ()
166- assert len (users ) == 2 + 2
167170
168171 carlos = client .users .get (carlos_guid )
169172 no_groups = carlos .groups .find ()
170173 assert len (no_groups ) == 0
171174
172- user = users [1 ]
175+ user = client . users . find () [1 ]
173176 assert user ["guid" ] == "87c12c08-11cd-4de1-8da3-12a7579c4998"
174177
175178 groups = user .groups .find ()
179+ assert isinstance (groups , list )
176180 assert len (groups ) == 1
177181 group = groups [0 ]
182+ assert isinstance (group , Group )
178183 assert group ["name" ] == "Friends"
179184
185+ @responses .activate
186+ def test_groups_add (self ):
187+ group_guid = "new-group-guid"
188+ user_guid = "user-guid"
189+ responses .get (
190+ f"https://connect.example/__api__/v1/groups/{ group_guid } " ,
191+ json = {"guid" : group_guid },
192+ )
193+ responses .post (
194+ f"https://connect.example/__api__/v1/groups/{ group_guid } /members" ,
195+ json = [],
196+ )
197+
198+ client = Client ("https://connect.example/" , "12345" )
199+
200+ user = User (client ._ctx , guid = user_guid )
201+ new_group = Group (client ._ctx , guid = group_guid )
202+ # Add via Group
203+ user .groups .add (new_group )
204+ # Add via guid
205+ user .groups .add (group_guid = new_group ["guid" ])
206+
207+ with pytest .raises (TypeError ):
208+ user .groups .add (
209+ "not a group" , # pyright: ignore[reportArgumentType]
210+ )
211+ with pytest .raises (ValueError ):
212+ user .groups .add (group_guid = "" )
213+ with pytest .raises (ValueError ):
214+ user .groups .add (new_group , group_guid = new_group ["guid" ]) # pyright: ignore[reportCallIssue]
215+
216+ @responses .activate
217+ def test_groups_delete (self ):
218+ group_guid = "new-group-guid"
219+ user_guid = "user-guid"
220+ responses .get (
221+ f"https://connect.example/__api__/v1/groups/{ group_guid } " ,
222+ json = {"guid" : group_guid },
223+ )
224+ responses .delete (
225+ f"https://connect.example/__api__/v1/groups/{ group_guid } /members/{ user_guid } " ,
226+ json = [],
227+ )
228+
229+ client = Client ("https://connect.example/" , "12345" )
230+
231+ user = User (client ._ctx , guid = user_guid )
232+ group = Group (client ._ctx , guid = group_guid )
233+
234+ # Delete via Group
235+ user .groups .delete (group )
236+ # Delete via guid
237+ user .groups .delete (group_guid = group ["guid" ])
238+
239+ with pytest .raises (TypeError ):
240+ user .groups .delete (
241+ "not a group" , # pyright: ignore[reportArgumentType]
242+ )
243+ with pytest .raises (ValueError ):
244+ user .groups .delete (group_guid = "" )
245+ with pytest .raises (ValueError ):
246+ user .groups .delete (group , group_guid = group ["guid" ]) # pyright: ignore[reportCallIssue]
247+
180248
181249class TestUsers :
182250 @responses .activate
0 commit comments