@@ -214,3 +214,82 @@ def test_list_all_users(client_factory: ClientFactory) -> None:
214214 assert len (dynamic_users ) == 5
215215 for i in range (5 ):
216216 client .users .db .delete (user_id = f"list-all-{ i } " )
217+
218+
219+ def test_get_user_created_at_and_api_key_first_letters (client_factory : ClientFactory ) -> None :
220+ with client_factory (ports = RBAC_PORTS , auth_credentials = Auth .api_key ("admin-key" )) as client :
221+ if client ._connection ._weaviate_version .is_lower_than (1 , 30 , 0 ):
222+ pytest .skip ("This test requires Weaviate 1.30.0 or higher" )
223+
224+ randomUserName = "new-user" + str (random .randint (1 , 1000 ))
225+ apiKey = client .users .db .create (user_id = randomUserName )
226+ try :
227+ user = client .users .db .get (user_id = randomUserName )
228+ assert user is not None
229+ assert user .created_at is not None
230+ assert user .api_key_first_letters is not None
231+ assert len (user .api_key_first_letters ) > 0
232+ finally :
233+ client .users .db .delete (user_id = randomUserName )
234+
235+
236+ def test_get_user_include_last_used_time (client_factory : ClientFactory ) -> None :
237+ with client_factory (ports = RBAC_PORTS , auth_credentials = Auth .api_key ("admin-key" )) as client :
238+ if client ._connection ._weaviate_version .is_lower_than (1 , 30 , 0 ):
239+ pytest .skip ("This test requires Weaviate 1.30.0 or higher" )
240+
241+ randomUserName = "new-user" + str (random .randint (1 , 1000 ))
242+ apiKey = client .users .db .create (user_id = randomUserName )
243+ try :
244+ # log in with the new user to generate a lastUsedAt timestamp
245+ with weaviate .connect_to_local (
246+ port = RBAC_PORTS [0 ],
247+ grpc_port = RBAC_PORTS [1 ],
248+ auth_credentials = Auth .api_key (apiKey ),
249+ ) as client2 :
250+ assert client2 .users .get_my_user ().user_id == randomUserName
251+
252+ # without include_last_used_time, last_used_time should be None
253+ user = client .users .db .get (user_id = randomUserName )
254+ assert user is not None
255+ assert user .last_used_time is None
256+
257+ # with include_last_used_time=True, last_used_time should be populated
258+ user = client .users .db .get (user_id = randomUserName , include_last_used_time = True )
259+ assert user is not None
260+ assert user .last_used_time is not None
261+ finally :
262+ client .users .db .delete (user_id = randomUserName )
263+
264+
265+ def test_list_all_include_last_used_time (client_factory : ClientFactory ) -> None :
266+ with client_factory (ports = RBAC_PORTS , auth_credentials = Auth .api_key ("admin-key" )) as client :
267+ if client ._connection ._weaviate_version .is_lower_than (1 , 30 , 0 ):
268+ pytest .skip ("This test requires Weaviate 1.30.0 or higher" )
269+
270+ randomUserName = "new-user" + str (random .randint (1 , 1000 ))
271+ apiKey = client .users .db .create (user_id = randomUserName )
272+ try :
273+ # log in with the new user to generate a lastUsedAt timestamp
274+ with weaviate .connect_to_local (
275+ port = RBAC_PORTS [0 ],
276+ grpc_port = RBAC_PORTS [1 ],
277+ auth_credentials = Auth .api_key (apiKey ),
278+ ) as client2 :
279+ assert client2 .users .get_my_user ().user_id == randomUserName
280+
281+ # without include_last_used_time, last_used_time should be None
282+ users = client .users .db .list_all ()
283+ target = next ((u for u in users if u .user_id == randomUserName ), None )
284+ assert target is not None
285+ assert target .created_at is not None
286+ assert target .api_key_first_letters is not None
287+ assert target .last_used_time is None
288+
289+ # with include_last_used_time=True, last_used_time should be populated
290+ users = client .users .db .list_all (include_last_used_time = True )
291+ target = next ((u for u in users if u .user_id == randomUserName ), None )
292+ assert target is not None
293+ assert target .last_used_time is not None
294+ finally :
295+ client .users .db .delete (user_id = randomUserName )
0 commit comments