diff --git a/pkg/services/serviceaccounts/database/store.go b/pkg/services/serviceaccounts/database/store.go index 1e84657a18c..2759fa764eb 100644 --- a/pkg/services/serviceaccounts/database/store.go +++ b/pkg/services/serviceaccounts/database/store.go @@ -222,7 +222,7 @@ func (s *ServiceAccountsStoreImpl) RetrieveServiceAccount(ctx context.Context, q } if query.UID != "" { - whereConditions = append(whereConditions, "user.uid = ?") + whereConditions = append(whereConditions, fmt.Sprintf("%s.uid = ?", s.sqlStore.GetDialect().Quote("user"))) whereParams = append(whereParams, query.UID) } diff --git a/pkg/services/serviceaccounts/database/store_test.go b/pkg/services/serviceaccounts/database/store_test.go index 71db51b1e7e..f00cd48d4df 100644 --- a/pkg/services/serviceaccounts/database/store_test.go +++ b/pkg/services/serviceaccounts/database/store_test.go @@ -265,15 +265,22 @@ func TestIntegrationStore_RetrieveServiceAccount(t *testing.T) { t.Skip("skipping test in short mode") } cases := []struct { - desc string - user tests.TestUser - expectedErr error + desc string + user tests.TestUser + retrieveByUID bool + expectedErr error }{ { desc: "service accounts should exist and get retrieved", user: tests.TestUser{Login: "servicetest1@admin", IsServiceAccount: true}, expectedErr: nil, }, + { + desc: "service accounts should be able to be retrieved with uid", + user: tests.TestUser{Login: "test1@admin", IsServiceAccount: true}, + expectedErr: nil, + retrieveByUID: true, + }, { desc: "service accounts is false should not retrieve user", user: tests.TestUser{Login: "test1@admin", IsServiceAccount: false}, @@ -283,18 +290,30 @@ func TestIntegrationStore_RetrieveServiceAccount(t *testing.T) { for _, c := range cases { t.Run(c.desc, func(t *testing.T) { + var dto *serviceaccounts.ServiceAccountProfileDTO + var err error db, store := setupTestDatabase(t) user := tests.SetupUserServiceAccount(t, db, store.cfg, c.user) - dto, err := store.RetrieveServiceAccount(context.Background(), &serviceaccounts.GetServiceAccountQuery{ - OrgID: user.OrgID, - ID: user.ID, - }) + if c.retrieveByUID { + dto, err = store.RetrieveServiceAccount(context.Background(), &serviceaccounts.GetServiceAccountQuery{ + OrgID: user.OrgID, + UID: user.UID, + }) + } else { + dto, err = store.RetrieveServiceAccount(context.Background(), &serviceaccounts.GetServiceAccountQuery{ + OrgID: user.OrgID, + ID: user.ID, + }) + } if c.expectedErr != nil { require.ErrorIs(t, err, c.expectedErr) } else { require.NoError(t, err) require.Equal(t, c.user.Login, dto.Login) require.Len(t, dto.Teams, 0) + if c.retrieveByUID { + require.Equal(t, user.UID, dto.UID) + } } }) } diff --git a/pkg/services/serviceaccounts/tests/common.go b/pkg/services/serviceaccounts/tests/common.go index 5d35b377b18..c88155232ee 100644 --- a/pkg/services/serviceaccounts/tests/common.go +++ b/pkg/services/serviceaccounts/tests/common.go @@ -25,6 +25,7 @@ type TestUser struct { Role string Login string IsServiceAccount bool + UID string } type TestApiKey struct {