Files
ocis/services/invitations/pkg/backends/keycloak/backend_test.go
Jörn Friedrich Dreyer fad94d2038 bump mockery, add test stub for oidc_auth.go, align mock generation (#8321)
* bump mockery, add test stub for oidc_auth.go

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>

* use .mockery.yaml for all mocks

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>

* drop legacy go:generate mockery

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>

* align mock placement

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>

---------

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
2024-02-01 10:07:44 +01:00

143 lines
3.4 KiB
Go

// Package keycloak offers an invitation backend for the invitation service.
// TODO: Maybe move this outside of the invitation service and make it more generic?
package keycloak_test
import (
"context"
"testing"
kcpkg "github.com/owncloud/ocis/v2/ocis-pkg/keycloak"
"github.com/owncloud/ocis/v2/ocis-pkg/log"
"github.com/owncloud/ocis/v2/services/invitations/pkg/backends/keycloak"
"github.com/owncloud/ocis/v2/services/invitations/pkg/backends/keycloak/mocks"
"github.com/owncloud/ocis/v2/services/invitations/pkg/invitations"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
const (
clientID = "test-id"
clientSecret = "test-secret"
clientRealm = "client-realm"
userRealm = "user-realm"
jwtToken = "test-token"
)
func TestBackend_CreateUser(t *testing.T) {
type args struct {
invitation *invitations.Invitation
}
type mockInputs struct {
funcName string
args []interface{}
returns []interface{}
}
tests := []struct {
name string
args args
want string
clientMocks []mockInputs
assertion assert.ErrorAssertionFunc
}{
{
name: "Test without diplay name",
args: args{
invitation: &invitations.Invitation{
InvitedUserEmailAddress: "test@example.org",
},
},
want: "test-id",
clientMocks: []mockInputs{
{
funcName: "CreateUser",
args: []interface{}{
mock.Anything,
userRealm,
mock.Anything, // can't match on the user because it generates a UUID internally.
[]kcpkg.UserAction{
kcpkg.UserActionUpdatePassword,
kcpkg.UserActionVerifyEmail,
},
},
returns: []interface{}{
"test-id",
nil,
},
},
},
assertion: func(t assert.TestingT, err error, args ...interface{}) bool {
return assert.Nil(t, err, args...)
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx := context.Background()
c := &mocks.Client{}
for _, m := range tt.clientMocks {
c.On(m.funcName, m.args...).Return(m.returns...)
}
b := keycloak.NewWithClient(log.NopLogger(), c, userRealm)
got, err := b.CreateUser(ctx, tt.args.invitation)
tt.assertion(t, err)
assert.Equal(t, tt.want, got)
})
}
}
func TestBackend_SendMail(t *testing.T) {
type args struct {
id string
}
type mockInputs struct {
funcName string
args []interface{}
returns []interface{}
}
tests := []struct {
name string
args args
clientMocks []mockInputs
assertion assert.ErrorAssertionFunc
}{
{
name: "Mail successfully sent",
args: args{
id: "test-id",
},
clientMocks: []mockInputs{
{
funcName: "SendActionsMail",
args: []interface{}{
mock.Anything,
userRealm,
"test-id",
[]kcpkg.UserAction{
kcpkg.UserActionUpdatePassword,
kcpkg.UserActionVerifyEmail,
},
},
returns: []interface{}{
nil,
},
},
},
assertion: func(t assert.TestingT, err error, args ...interface{}) bool {
return assert.Nil(t, err, args...)
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx := context.Background()
c := &mocks.Client{}
for _, m := range tt.clientMocks {
c.On(m.funcName, m.args...).Return(m.returns...)
}
b := keycloak.NewWithClient(log.NopLogger(), c, userRealm)
tt.assertion(t, b.SendMail(ctx, tt.args.id))
})
}
}