78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package mock
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
|
|
"github.com/caos/oidc/pkg/oidc"
|
|
u "github.com/caos/oidc/pkg/op/u"
|
|
)
|
|
|
|
func NewStorage(t *testing.T) u.Storage {
|
|
return NewMockStorage(gomock.NewController(t))
|
|
}
|
|
|
|
func NewMockStorageExpectValidClientID(t *testing.T) u.Storage {
|
|
m := NewStorage(t)
|
|
ExpectValidClientID(m)
|
|
return m
|
|
}
|
|
|
|
func NewMockStorageExpectInvalidClientID(t *testing.T) u.Storage {
|
|
m := NewStorage(t)
|
|
ExpectInvalidClientID(m)
|
|
return m
|
|
}
|
|
|
|
func NewMockStorageAny(t *testing.T) u.Storage {
|
|
m := NewStorage(t)
|
|
mockS := m.(*MockStorage)
|
|
mockS.EXPECT().GetClientByClientID(gomock.Any()).AnyTimes().Return(&ConfClient{}, nil)
|
|
mockS.EXPECT().AuthorizeClientIDSecret(gomock.Any(), gomock.Any()).AnyTimes().Return(&ConfClient{}, nil)
|
|
return m
|
|
}
|
|
|
|
func ExpectInvalidClientID(s u.Storage) {
|
|
mockS := s.(*MockStorage)
|
|
mockS.EXPECT().GetClientByClientID(gomock.Any()).Return(nil, errors.New("client not found"))
|
|
}
|
|
|
|
func ExpectValidClientID(s u.Storage) {
|
|
mockS := s.(*MockStorage)
|
|
mockS.EXPECT().GetClientByClientID(gomock.Any()).DoAndReturn(
|
|
func(id string) (oidc.Client, error) {
|
|
var appType oidc.ApplicationType
|
|
switch id {
|
|
case "web_client":
|
|
appType = oidc.ApplicationTypeWeb
|
|
case "native_client":
|
|
appType = oidc.ApplicationTypeNative
|
|
case "useragent_client":
|
|
appType = oidc.ApplicationTypeUserAgent
|
|
}
|
|
return &ConfClient{appType: appType}, nil
|
|
})
|
|
}
|
|
|
|
type ConfClient struct {
|
|
appType oidc.ApplicationType
|
|
}
|
|
|
|
func (c *ConfClient) RedirectURIs() []string {
|
|
return []string{
|
|
"https://registered.com/callback",
|
|
"http://registered.com/callback",
|
|
"http://localhost:9999/callback",
|
|
"custom://callback",
|
|
}
|
|
}
|
|
|
|
func (c *ConfClient) LoginURL(id string) string {
|
|
return "login?id=" + id
|
|
}
|
|
|
|
func (c *ConfClient) ApplicationType() oidc.ApplicationType {
|
|
return c.appType
|
|
}
|