Skip to content

Commit beb2e58

Browse files
committed
add unit test to verify refresh all
1 parent 1730dac commit beb2e58

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

coderd/externalauth_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818

1919
"github.com/coder/coder/v2/coderd/coderdtest"
2020
"github.com/coder/coder/v2/coderd/coderdtest/oidctest"
21+
"github.com/coder/coder/v2/coderd/database"
22+
"github.com/coder/coder/v2/coderd/database/dbauthz"
2123
"github.com/coder/coder/v2/coderd/database/dbtime"
2224
"github.com/coder/coder/v2/coderd/externalauth"
2325
"github.com/coder/coder/v2/coderd/httpapi"
@@ -198,6 +200,66 @@ func TestExternalAuthManagement(t *testing.T) {
198200
require.Len(t, list.Providers, 2)
199201
require.Len(t, list.Links, 0)
200202
})
203+
t.Run("RefreshAllProviders", func(t *testing.T) {
204+
t.Parallel()
205+
const githubID = "fake-github"
206+
const gitlabID = "fake-gitlab"
207+
208+
githubCalled := false
209+
githubApp := oidctest.NewFakeIDP(t, oidctest.WithServing(), oidctest.WithRefresh(func(email string) error {
210+
githubCalled = true
211+
return nil
212+
}))
213+
gitlabCalled := false
214+
gitlab := oidctest.NewFakeIDP(t, oidctest.WithServing(), oidctest.WithRefresh(func(email string) error {
215+
gitlabCalled = true
216+
return nil
217+
}))
218+
219+
owner, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{
220+
ExternalAuthConfigs: []*externalauth.Config{
221+
githubApp.ExternalAuthConfig(t, githubID, nil, func(cfg *externalauth.Config) {
222+
cfg.Type = codersdk.EnhancedExternalAuthProviderGitHub.String()
223+
}),
224+
gitlab.ExternalAuthConfig(t, gitlabID, nil, func(cfg *externalauth.Config) {
225+
cfg.Type = codersdk.EnhancedExternalAuthProviderGitLab.String()
226+
}),
227+
},
228+
})
229+
ownerUser := coderdtest.CreateFirstUser(t, owner)
230+
// Just a regular user
231+
client, user := coderdtest.CreateAnotherUser(t, owner, ownerUser.OrganizationID)
232+
ctx := testutil.Context(t, testutil.WaitLong)
233+
234+
// Log into github & gitlab
235+
githubApp.ExternalLogin(t, client)
236+
gitlab.ExternalLogin(t, client)
237+
238+
links, err := db.GetExternalAuthLinksByUserID(
239+
dbauthz.As(ctx, coderdtest.AuthzUserSubject(user, ownerUser.OrganizationID)), user.ID)
240+
require.NoError(t, err)
241+
require.Len(t, links, 2)
242+
243+
// Expire the links
244+
for _, l := range links {
245+
_, err := db.UpdateExternalAuthLink(dbauthz.As(ctx, coderdtest.AuthzUserSubject(user, ownerUser.OrganizationID)), database.UpdateExternalAuthLinkParams{
246+
ProviderID: l.ProviderID,
247+
UserID: l.UserID,
248+
UpdatedAt: dbtime.Now(),
249+
OAuthAccessToken: l.OAuthAccessToken,
250+
OAuthRefreshToken: l.OAuthRefreshToken,
251+
OAuthExpiry: time.Now().Add(time.Hour * -1),
252+
OAuthExtra: l.OAuthExtra,
253+
})
254+
require.NoErrorf(t, err, "expire key for %s", l.ProviderID)
255+
}
256+
257+
list, err := client.ListExternalAuths(ctx)
258+
require.NoError(t, err)
259+
require.Len(t, list.Links, 2)
260+
require.True(t, githubCalled, "github should be refreshed")
261+
require.True(t, gitlabCalled, "gitlab should be refreshed")
262+
})
201263
}
202264

203265
func TestExternalAuthDevice(t *testing.T) {

0 commit comments

Comments
 (0)