@@ -181,3 +181,137 @@ func TestDeleteAllEmptyService(t *testing.T) {
181181 t .Errorf ("Should not have deleted secret from another service" )
182182 }
183183}
184+
185+ // TestListUsers tests listing all users for a service.
186+ func TestListUsers (t * testing.T ) {
187+ // Set up multiple secrets for the same service
188+ const service2 = "test-service-list"
189+ err := Set (service2 , "user1" , "password1" )
190+ if err != nil {
191+ t .Errorf ("Should not fail, got: %s" , err )
192+ }
193+
194+ err = Set (service2 , "user2" , "password2" )
195+ if err != nil {
196+ t .Errorf ("Should not fail, got: %s" , err )
197+ }
198+
199+ err = Set (service2 , "user3" , "password3" )
200+ if err != nil {
201+ t .Errorf ("Should not fail, got: %s" , err )
202+ }
203+
204+ // List all users for the service
205+ users , err := ListUsers (service2 )
206+ if err != nil {
207+ t .Errorf ("Should not fail, got: %s" , err )
208+ }
209+
210+ // Verify we got all three users
211+ if len (users ) != 3 {
212+ t .Errorf ("Expected 3 users, got %d" , len (users ))
213+ }
214+
215+ // Verify the users are correct (order doesn't matter)
216+ expectedUsers := map [string ]bool {"user1" : true , "user2" : true , "user3" : true }
217+ for _ , user := range users {
218+ if ! expectedUsers [user ] {
219+ t .Errorf ("Unexpected user: %s" , user )
220+ }
221+ delete (expectedUsers , user )
222+ }
223+
224+ if len (expectedUsers ) > 0 {
225+ t .Errorf ("Missing users: %v" , expectedUsers )
226+ }
227+
228+ // Clean up
229+ _ = DeleteAll (service2 )
230+ }
231+
232+ // TestListUsersEmpty tests listing users for a service with no secrets.
233+ func TestListUsersEmpty (t * testing.T ) {
234+ const nonExistentService = "non-existent-service-12345"
235+ users , err := ListUsers (nonExistentService )
236+ if err != nil {
237+ t .Errorf ("Should not fail on empty service, got: %s" , err )
238+ }
239+
240+ if len (users ) != 0 {
241+ t .Errorf ("Expected 0 users for non-existent service, got %d" , len (users ))
242+ }
243+ }
244+
245+ // TestListUsersSingleUser tests listing users for a service with a single user.
246+ func TestListUsersSingleUser (t * testing.T ) {
247+ const service3 = "test-service-single"
248+ err := Set (service3 , "single-user" , "password" )
249+ if err != nil {
250+ t .Errorf ("Should not fail, got: %s" , err )
251+ }
252+
253+ users , err := ListUsers (service3 )
254+ if err != nil {
255+ t .Errorf ("Should not fail, got: %s" , err )
256+ }
257+
258+ if len (users ) != 1 {
259+ t .Errorf ("Expected 1 user, got %d" , len (users ))
260+ }
261+
262+ if users [0 ] != "single-user" {
263+ t .Errorf ("Expected user 'single-user', got '%s'" , users [0 ])
264+ }
265+
266+ // Clean up
267+ _ = Delete (service3 , "single-user" )
268+ }
269+
270+ // TestListUsersMultipleServices tests that ListUsers only returns users for the specified service.
271+ func TestListUsersMultipleServices (t * testing.T ) {
272+ const serviceA = "service-a"
273+ const serviceB = "service-b"
274+
275+ // Set up users for service A
276+ _ = Set (serviceA , "userA1" , "passwordA1" )
277+ _ = Set (serviceA , "userA2" , "passwordA2" )
278+
279+ // Set up users for service B
280+ _ = Set (serviceB , "userB1" , "passwordB1" )
281+
282+ // List users for service A
283+ usersA , err := ListUsers (serviceA )
284+ if err != nil {
285+ t .Errorf ("Should not fail, got: %s" , err )
286+ }
287+
288+ if len (usersA ) != 2 {
289+ t .Errorf ("Expected 2 users for service A, got %d" , len (usersA ))
290+ }
291+
292+ // Verify service A users don't include service B users
293+ for _ , user := range usersA {
294+ if user == "userB1" {
295+ t .Errorf ("Service A should not include users from service B" )
296+ }
297+ }
298+
299+ // List users for service B
300+ usersB , err := ListUsers (serviceB )
301+ if err != nil {
302+ t .Errorf ("Should not fail, got: %s" , err )
303+ }
304+
305+ if len (usersB ) != 1 {
306+ t .Errorf ("Expected 1 user for service B, got %d" , len (usersB ))
307+ }
308+
309+ if usersB [0 ] != "userB1" {
310+ t .Errorf ("Expected user 'userB1', got '%s'" , usersB [0 ])
311+ }
312+
313+ // Clean up
314+ _ = DeleteAll (serviceA )
315+ _ = DeleteAll (serviceB )
316+ }
317+
0 commit comments