mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
3.7 KiB
199 lines
3.7 KiB
// NOTE: These tests are begin updated so they compile (see #257). Until then ignore. |
|
// +build ignore |
|
|
|
package admin |
|
|
|
import ( |
|
"net/http" |
|
"testing" |
|
|
|
"github.com/coreos/dex/schema/adminschema" |
|
"github.com/coreos/dex/user" |
|
|
|
"github.com/kylelemons/godebug/pretty" |
|
) |
|
|
|
type testFixtures struct { |
|
ur user.UserRepo |
|
pwr user.PasswordInfoRepo |
|
adAPI *AdminAPI |
|
} |
|
|
|
func makeTestFixtures() *testFixtures { |
|
f := &testFixtures{} |
|
|
|
f.ur = user.NewUserRepoFromUsers([]user.UserWithRemoteIdentities{ |
|
{ |
|
User: user.User{ |
|
ID: "ID-1", |
|
Name: "Name-1", |
|
}, |
|
}, |
|
}) |
|
f.pwr = user.NewPasswordInfoRepoFromPasswordInfos([]user.PasswordInfo{ |
|
{ |
|
UserID: "ID-1", |
|
Password: []byte("hi."), |
|
}, |
|
}) |
|
|
|
f.adAPI = NewAdminAPI(f.ur, f.pwr) |
|
|
|
return f |
|
} |
|
|
|
func TestGetAdmin(t *testing.T) { |
|
tests := []struct { |
|
id string |
|
errCode int |
|
}{ |
|
{ |
|
id: "ID-1", |
|
errCode: -1, |
|
}, |
|
{ |
|
id: "ID-2", |
|
errCode: http.StatusNotFound, |
|
}, |
|
} |
|
|
|
for i, tt := range tests { |
|
f := makeTestFixtures() |
|
|
|
admn, err := f.adAPI.GetAdmin(tt.id) |
|
if tt.errCode != -1 { |
|
if err == nil { |
|
t.Errorf("case %d: err was nil", i) |
|
continue |
|
} |
|
aErr, ok := err.(Error) |
|
if !ok { |
|
t.Errorf("case %d: not an admin.Error: %q", i, err) |
|
continue |
|
} |
|
|
|
if aErr.Code != tt.errCode { |
|
t.Errorf("case %d: want=%d, got=%d", i, tt.errCode, aErr.Code) |
|
continue |
|
} |
|
} else { |
|
if err != nil { |
|
t.Errorf("case %d: err != nil: %q", i, err) |
|
} |
|
continue |
|
|
|
if admn.Id != "ID-1" { |
|
t.Errorf("case %d: want=%q, got=%q", i, tt.id, admn.Id) |
|
} |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
func TestCreateAdmin(t *testing.T) { |
|
tests := []struct { |
|
admn adminschema.Admin |
|
errCode int |
|
}{ |
|
{ |
|
admn: adminschema.Admin{ |
|
Name: "foo", |
|
PasswordHash: user.Password([]byte("foopass")).EncodeBase64(), |
|
}, |
|
errCode: -1, |
|
}, |
|
{ |
|
// duplicate Name |
|
admn: adminschema.Admin{ |
|
Name: "Name-1", |
|
PasswordHash: user.Password([]byte("foopass")).EncodeBase64(), |
|
}, |
|
errCode: http.StatusBadRequest, |
|
}, |
|
{ |
|
// missing Name |
|
admn: adminschema.Admin{ |
|
PasswordHash: user.Password([]byte("foopass")).EncodeBase64(), |
|
}, |
|
errCode: http.StatusBadRequest, |
|
}, |
|
} |
|
for i, tt := range tests { |
|
f := makeTestFixtures() |
|
|
|
id, err := f.adAPI.CreateAdmin(tt.admn) |
|
if tt.errCode != -1 { |
|
if err == nil { |
|
t.Errorf("case %d: err was nil", i) |
|
continue |
|
} |
|
aErr, ok := err.(Error) |
|
if !ok { |
|
t.Errorf("case %d: not a admin.Error: %#v", i, err) |
|
continue |
|
} |
|
|
|
if aErr.Code != tt.errCode { |
|
t.Errorf("case %d: want=%d, got=%d", i, tt.errCode, aErr.Code) |
|
continue |
|
} |
|
} else { |
|
if err != nil { |
|
t.Errorf("case %d: err != nil: %q", i, err) |
|
} |
|
|
|
gotAdmn, err := f.adAPI.GetAdmin(id) |
|
if err != nil { |
|
t.Errorf("case %d: err != nil: %q", i, err) |
|
} |
|
|
|
tt.admn.Id = id |
|
if diff := pretty.Compare(tt.admn, gotAdmn); diff != "" { |
|
t.Errorf("case %d: Compare(want, got) = %v", i, diff) |
|
} |
|
} |
|
} |
|
} |
|
|
|
func TestGetState(t *testing.T) { |
|
tests := []struct { |
|
addUsers []user.User |
|
want adminschema.State |
|
}{ |
|
{ |
|
addUsers: []user.User{ |
|
user.User{ |
|
Name: "Admin", |
|
Admin: true, |
|
}, |
|
}, |
|
want: adminschema.State{ |
|
AdminUserCreated: true, |
|
}, |
|
}, |
|
{ |
|
want: adminschema.State{ |
|
AdminUserCreated: false, |
|
}, |
|
}, |
|
} |
|
for i, tt := range tests { |
|
f := makeTestFixtures() |
|
for _, usr := range tt.addUsers { |
|
_, err := f.ur.Create(usr) |
|
if err != nil { |
|
t.Fatalf("case %d: err != nil", i, err) |
|
} |
|
} |
|
|
|
got, err := f.adAPI.GetState() |
|
if err != nil { |
|
t.Errorf("case %d: err != nil", i, err) |
|
} |
|
|
|
if diff := pretty.Compare(tt.want, got); diff != "" { |
|
t.Errorf("case %d: Compare(want, got) = %v", i, diff) |
|
} |
|
} |
|
}
|
|
|