@@ -418,6 +418,106 @@ func TestUserLoaderUseBatchMethod(t *testing.T) {
418418 }
419419}
420420
421+ func TestSystemUserLoader (t * testing.T ) {
422+ t .Run ("System user does not call Slack API" , func (t * testing.T ) {
423+ repo , slackClient := setupTestData ()
424+ loaders := NewDataLoaders (repo , slackClient )
425+ ctx := context .Background ()
426+
427+ // Load system user
428+ user , err := GetUserWithLoaders (ctx , loaders , string (types .SystemUserID ))
429+ gt .NoError (t , err )
430+ gt .Equal (t , user .ID , string (types .SystemUserID ))
431+ gt .Equal (t , user .Name , "System" )
432+
433+ // Verify Slack API was NOT called
434+ getUsersInfoCalls := slackClient .GetUsersInfoCalls ()
435+ gt .Number (t , len (getUsersInfoCalls )).Equal (0 )
436+ })
437+
438+ t .Run ("System user mixed with regular users" , func (t * testing.T ) {
439+ repo , slackClient := setupTestData ()
440+ loaders := NewDataLoaders (repo , slackClient )
441+ ctx := context .Background ()
442+
443+ // Load system user and regular users concurrently
444+ userIDs := []string {string (types .SystemUserID ), "user1" , "user2" }
445+ results := make ([]* graphql1.User , len (userIDs ))
446+ errors := make ([]error , len (userIDs ))
447+
448+ var wg sync.WaitGroup
449+ for i , id := range userIDs {
450+ wg .Add (1 )
451+ go func (index int , userID string ) {
452+ defer wg .Done ()
453+ u , err := GetUserWithLoaders (ctx , loaders , userID )
454+ results [index ] = u
455+ errors [index ] = err
456+ }(i , id )
457+ }
458+ wg .Wait ()
459+
460+ // Verify all loads returned correct data
461+ for i , err := range errors {
462+ gt .NoError (t , err )
463+ gt .NotNil (t , results [i ])
464+ gt .Equal (t , results [i ].ID , userIDs [i ])
465+ }
466+
467+ // Verify system user has correct name
468+ gt .Equal (t , results [0 ].Name , "System" )
469+ gt .Equal (t , results [1 ].Name , "User One" )
470+ gt .Equal (t , results [2 ].Name , "User Two" )
471+
472+ // Verify Slack API was called only for non-system users
473+ getUsersInfoCalls := slackClient .GetUsersInfoCalls ()
474+ gt .Number (t , len (getUsersInfoCalls )).Greater (0 )
475+
476+ // The batch call should only contain non-system users
477+ if len (getUsersInfoCalls ) > 0 {
478+ calledUsers := getUsersInfoCalls [0 ].Users
479+ for _ , userID := range calledUsers {
480+ gt .NotEqual (t , userID , string (types .SystemUserID ))
481+ }
482+ }
483+ })
484+
485+ t .Run ("Multiple system users only" , func (t * testing.T ) {
486+ repo , slackClient := setupTestData ()
487+ loaders := NewDataLoaders (repo , slackClient )
488+ ctx := context .Background ()
489+
490+ // Load multiple system users
491+ userIDs := []string {string (types .SystemUserID ), string (types .SystemUserID )}
492+ results := make ([]* graphql1.User , len (userIDs ))
493+ errors := make ([]error , len (userIDs ))
494+
495+ var wg sync.WaitGroup
496+ for i , id := range userIDs {
497+ wg .Add (1 )
498+ go func (index int , userID string ) {
499+ defer wg .Done ()
500+ u , err := GetUserWithLoaders (ctx , loaders , userID )
501+ results [index ] = u
502+ errors [index ] = err
503+ }(i , id )
504+ }
505+ wg .Wait ()
506+
507+ // Verify all loads returned correct data
508+ for i , err := range errors {
509+ gt .NoError (t , err )
510+ gt .NotNil (t , results [i ])
511+ gt .Equal (t , results [i ].ID , string (types .SystemUserID ))
512+ gt .Equal (t , results [i ].Name , "System" )
513+ }
514+
515+ // Verify Slack API was NOT called at all
516+ getUsersInfoCalls := slackClient .GetUsersInfoCalls ()
517+ gt .Number (t , len (getUsersInfoCalls )).Equal (0 )
518+ })
519+ }
520+
421521// Helper functions for testing with loaders
422522func GetTicketWithLoaders (ctx context.Context , loaders * DataLoaders , ticketID types.TicketID ) (* ticket.Ticket , error ) {
423523 thunk := loaders .TicketLoader .Load (ctx , ticketID )
0 commit comments