👔 Created client use cases

This commit is contained in:
Maxim Lebedev 2021-09-24 04:06:22 +05:00
parent 10cc589dc6
commit bd20bbc55d
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
4 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,11 @@
package client
import (
"context"
"source.toby3d.me/website/oauth/internal/model"
)
type Repository interface {
Get(ctx context.Context, id string) (*model.Client, error)
}

View File

@ -0,0 +1,11 @@
package client
import (
"context"
"source.toby3d.me/website/oauth/internal/model"
)
type UseCase interface {
Discovery(ctx context.Context, clientID model.URL) (*model.Client, error)
}

View File

@ -0,0 +1,22 @@
package usecase
import (
"context"
"source.toby3d.me/website/oauth/internal/client"
"source.toby3d.me/website/oauth/internal/model"
)
type clientUseCase struct {
clients client.Repository
}
func NewClientUseCase(clients client.Repository) client.UseCase {
return &clientUseCase{
clients: clients,
}
}
func (useCase *clientUseCase) Discovery(ctx context.Context, clientID model.URL) (*model.Client, error) {
return useCase.clients.Get(ctx, string(clientID))
}

View File

@ -0,0 +1,39 @@
package usecase_test
import (
"context"
"sync"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
repository "source.toby3d.me/website/oauth/internal/client/repository/memory"
"source.toby3d.me/website/oauth/internal/client/usecase"
"source.toby3d.me/website/oauth/internal/model"
)
func TestDiscovery(t *testing.T) {
t.Parallel()
require := require.New(t)
assert := assert.New(t)
store := new(sync.Map)
client := &model.Client{
ID: "http://127.0.0.1:2368/",
Name: "Example App",
Logo: "http://127.0.0.1:2368/logo.png",
URL: "http://127.0.0.1:2368/",
RedirectURI: []model.URL{
"https://app.example.com/redirect",
"http://127.0.0.1:2368/redirect",
},
}
store.Store(string(client.ID), client)
result, err := usecase.NewClientUseCase(repository.NewMemoryClientRepository(store)).Discovery(context.TODO(),
client.ID)
require.NoError(err)
assert.Equal(client, result)
}