Skip to content
Next Next commit
chore(coderd): refactor TestUserOIDC to allow more easily asserting t…
…hings about the created user
  • Loading branch information
johnstcn committed Jun 4, 2024
commit 84b3851f300daae5bcea9ee2df208d71b17af79d
79 changes: 47 additions & 32 deletions coderd/userauth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/google/go-github/v43/github"
"github.com/google/uuid"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/xerrors"

Expand Down Expand Up @@ -739,8 +740,7 @@ func TestUserOIDC(t *testing.T) {
UserInfoClaims jwt.MapClaims
AllowSignups bool
EmailDomain []string
Username string
AvatarURL string
AssertUser func(u codersdk.User)
StatusCode int
IgnoreEmailVerified bool
IgnoreUserInfo bool
Expand All @@ -752,7 +752,9 @@ func TestUserOIDC(t *testing.T) {
},
AllowSignups: true,
StatusCode: http.StatusOK,
Username: "kyle",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "kyle", u.Username)
},
},
{
Name: "EmailNotVerified",
Expand All @@ -778,9 +780,11 @@ func TestUserOIDC(t *testing.T) {
"email": "kyle@kwc.io",
"email_verified": false,
},
AllowSignups: true,
StatusCode: http.StatusOK,
Username: "kyle",
AllowSignups: true,
StatusCode: http.StatusOK,
AssertUser: func(u codersdk.User) {
assert.Equal(t, u.Username, "kyle")
},
IgnoreEmailVerified: true,
},
{
Expand Down Expand Up @@ -839,7 +843,9 @@ func TestUserOIDC(t *testing.T) {
"email": "kyle@kwc.io",
"email_verified": true,
},
Username: "kyle",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "kyle", u.Username)
},
AllowSignups: true,
StatusCode: http.StatusOK,
},
Expand All @@ -850,7 +856,9 @@ func TestUserOIDC(t *testing.T) {
"email_verified": true,
"preferred_username": "hotdog",
},
Username: "hotdog",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "hotdog", u.Username)
},
AllowSignups: true,
StatusCode: http.StatusOK,
},
Expand All @@ -863,7 +871,9 @@ func TestUserOIDC(t *testing.T) {
"email_verified": true,
"preferred_username": "kyle@kwc.io",
},
Username: "kyle",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "kyle", u.Username)
},
AllowSignups: true,
StatusCode: http.StatusOK,
},
Expand All @@ -873,7 +883,9 @@ func TestUserOIDC(t *testing.T) {
IDTokenClaims: jwt.MapClaims{
"preferred_username": "kyle@kwc.io",
},
Username: "kyle",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "kyle", u.Username)
},
AllowSignups: true,
StatusCode: http.StatusOK,
},
Expand All @@ -885,9 +897,11 @@ func TestUserOIDC(t *testing.T) {
"preferred_username": "kyle",
"picture": "/example.png",
},
Username: "kyle",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "/example.png", u.AvatarURL)
assert.Equal(t, "kyle", u.Username)
},
AllowSignups: true,
AvatarURL: "/example.png",
StatusCode: http.StatusOK,
},
{
Expand All @@ -900,9 +914,11 @@ func TestUserOIDC(t *testing.T) {
"preferred_username": "potato",
"picture": "/example.png",
},
Username: "potato",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "/example.png", u.AvatarURL)
assert.Equal(t, "potato", u.Username)
},
AllowSignups: true,
AvatarURL: "/example.png",
StatusCode: http.StatusOK,
},
{
Expand All @@ -925,7 +941,9 @@ func TestUserOIDC(t *testing.T) {
"email_verified": true,
"preferred_username": "user",
},
Username: "user",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "user", u.Username)
},
AllowSignups: true,
IgnoreEmailVerified: false,
StatusCode: http.StatusOK,
Expand Down Expand Up @@ -954,7 +972,9 @@ func TestUserOIDC(t *testing.T) {
"email": "user.mcname@external.domain",
"preferred_username": "Mr. User McName",
},
Username: "user",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "user", u.Username)
},
IgnoreUserInfo: true,
AllowSignups: true,
StatusCode: http.StatusOK,
Expand All @@ -965,7 +985,9 @@ func TestUserOIDC(t *testing.T) {
"email": "user@domain.tld",
"email_verified": true,
}, 65536),
Username: "user",
AssertUser: func(u codersdk.User) {
assert.Equal(t, "user", u.Username)
},
AllowSignups: true,
StatusCode: http.StatusOK,
},
Expand All @@ -976,9 +998,11 @@ func TestUserOIDC(t *testing.T) {
"email_verified": true,
},
UserInfoClaims: inflateClaims(t, jwt.MapClaims{}, 65536),
Username: "user",
AllowSignups: true,
StatusCode: http.StatusOK,
AssertUser: func(u codersdk.User) {
assert.Equal(t, "user", u.Username)
},
AllowSignups: true,
StatusCode: http.StatusOK,
},
} {
tc := tc
Expand Down Expand Up @@ -1013,22 +1037,13 @@ func TestUserOIDC(t *testing.T) {

ctx := testutil.Context(t, testutil.WaitLong)

if tc.Username != "" {
user, err := client.User(ctx, "me")
require.NoError(t, err)
require.Equal(t, tc.Username, user.Username)

require.Len(t, auditor.AuditLogs(), numLogs)
require.NotEqual(t, auditor.AuditLogs()[numLogs-1].UserID, uuid.Nil)
require.Equal(t, database.AuditActionRegister, auditor.AuditLogs()[numLogs-1].Action)
}

if tc.AvatarURL != "" {
if tc.AssertUser != nil {
user, err := client.User(ctx, "me")
require.NoError(t, err)
require.Equal(t, tc.AvatarURL, user.AvatarURL)

tc.AssertUser(user)
require.Len(t, auditor.AuditLogs(), numLogs)
require.NotEqual(t, uuid.Nil, auditor.AuditLogs()[numLogs-1].UserID)
require.Equal(t, database.AuditActionRegister, auditor.AuditLogs()[numLogs-1].Action)
}
})
Expand Down