add oidc unit tests
This commit is contained in:
parent
f6e332b76a
commit
2759127cf9
@ -129,6 +129,8 @@ func TestUserSignup(t *testing.T) {
|
|||||||
type OAuth2Mock struct {
|
type OAuth2Mock struct {
|
||||||
Srv *testServer
|
Srv *testServer
|
||||||
Priv *rsa.PrivateKey
|
Priv *rsa.PrivateKey
|
||||||
|
Subject string
|
||||||
|
Email string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *OAuth2Mock) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string {
|
func (o *OAuth2Mock) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string {
|
||||||
@ -140,12 +142,12 @@ func (o *OAuth2Mock) Exchange(ctx context.Context, code string, opts ...oauth2.A
|
|||||||
AccessToken: "AccessToken",
|
AccessToken: "AccessToken",
|
||||||
Expiry: time.Now().Add(1 * time.Hour),
|
Expiry: time.Now().Add(1 * time.Hour),
|
||||||
}
|
}
|
||||||
m := make(map[string]interface{})
|
m := make(map[string]any)
|
||||||
var rawClaims = `{
|
var rawClaims = `{
|
||||||
"iss": "` + o.Srv.URL + `",
|
"iss": "` + o.Srv.URL + `",
|
||||||
"aud": "my-client-id",
|
"aud": "my-client-id",
|
||||||
"sub": "foo",
|
"sub": "` + o.Subject + `",
|
||||||
"email": "foo@example.com",
|
"email": "` + o.Email + `",
|
||||||
"email_verified": true,
|
"email_verified": true,
|
||||||
"nonce": "nonce"
|
"nonce": "nonce"
|
||||||
}`
|
}`
|
||||||
@ -178,13 +180,15 @@ func TestUserOIDCCallback(t *testing.T) {
|
|||||||
SkipExpiryCheck: true,
|
SkipExpiryCheck: true,
|
||||||
}
|
}
|
||||||
v := p.VerifierContext(ctx, cfg)
|
v := p.VerifierContext(ctx, cfg)
|
||||||
|
oMock := &OAuth2Mock{
|
||||||
|
Srv: srv,
|
||||||
|
Priv: priv,
|
||||||
|
Subject: "foo",
|
||||||
|
}
|
||||||
app.config.oauth = applicationOauthConfig{
|
app.config.oauth = applicationOauthConfig{
|
||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
oidcConfig: cfg,
|
oidcConfig: cfg,
|
||||||
config: &OAuth2Mock{
|
config: oMock,
|
||||||
Srv: srv,
|
|
||||||
Priv: priv,
|
|
||||||
},
|
|
||||||
provider: p,
|
provider: p,
|
||||||
verifier: v,
|
verifier: v,
|
||||||
}
|
}
|
||||||
@ -192,6 +196,7 @@ func TestUserOIDCCallback(t *testing.T) {
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
validSubject = "goodSubject"
|
validSubject = "goodSubject"
|
||||||
|
unknownSubject = "foo"
|
||||||
validUserId = 1
|
validUserId = 1
|
||||||
validEmail = "test@example.com"
|
validEmail = "test@example.com"
|
||||||
validState = "goodState"
|
validState = "goodState"
|
||||||
@ -205,16 +210,46 @@ func TestUserOIDCCallback(t *testing.T) {
|
|||||||
wantCode int
|
wantCode int
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Found Subject",
|
name: "By Subject",
|
||||||
subject: validSubject,
|
subject: validSubject,
|
||||||
|
email: "",
|
||||||
|
state: validState,
|
||||||
|
wantCode: http.StatusSeeOther,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "By Email",
|
||||||
|
subject: unknownSubject,
|
||||||
email: validEmail,
|
email: validEmail,
|
||||||
state: validState,
|
state: validState,
|
||||||
wantCode: http.StatusSeeOther,
|
wantCode: http.StatusSeeOther,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "No User",
|
||||||
|
subject: unknownSubject,
|
||||||
|
email: "",
|
||||||
|
state: validState,
|
||||||
|
wantCode: http.StatusSeeOther,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Invalid State",
|
||||||
|
subject: unknownSubject,
|
||||||
|
email: validEmail,
|
||||||
|
state: "",
|
||||||
|
wantCode: http.StatusInternalServerError,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Unknown Subject & Email",
|
||||||
|
subject: unknownSubject,
|
||||||
|
email: "",
|
||||||
|
state: validState,
|
||||||
|
wantCode: http.StatusInternalServerError,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(*testing.T) {
|
t.Run(tt.name, func(*testing.T) {
|
||||||
|
oMock.Subject = tt.subject
|
||||||
|
oMock.Email = tt.email
|
||||||
r, err := http.NewRequest("GET", ts.URL, nil)
|
r, err := http.NewRequest("GET", ts.URL, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -223,6 +258,7 @@ func TestUserOIDCCallback(t *testing.T) {
|
|||||||
q := r.URL.Query()
|
q := r.URL.Query()
|
||||||
q.Add("state", tt.state)
|
q.Add("state", tt.state)
|
||||||
r.URL.RawQuery = q.Encode()
|
r.URL.RawQuery = q.Encode()
|
||||||
|
|
||||||
c := &http.Cookie{
|
c := &http.Cookie{
|
||||||
Name: "state",
|
Name: "state",
|
||||||
Value: validState,
|
Value: validState,
|
||||||
|
@ -101,8 +101,10 @@ func (m *UserModel) UpdateSetting(userId int64, setting models.Setting, value st
|
|||||||
func (m *UserModel) GetBySubject(subject string) (int64, error) {
|
func (m *UserModel) GetBySubject(subject string) (int64, error) {
|
||||||
if subject == "goodSubject" {
|
if subject == "goodSubject" {
|
||||||
return 1, nil
|
return 1, nil
|
||||||
}
|
} else if subject == "foo" {
|
||||||
return -1, models.ErrNoRecord
|
return -1, models.ErrNoRecord
|
||||||
|
}
|
||||||
|
return -1, errors.New("Unexpected Error")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *UserModel) GetByEmail(email string) (int64, error) {
|
func (m *UserModel) GetByEmail(email string) (int64, error) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user