auth/internal/ticket/usecase/ticket_ucase_test.go

50 lines
1.4 KiB
Go

package usecase_test
import (
"context"
"fmt"
"path"
"sync"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
repo "source.toby3d.me/website/indieauth/internal/ticket/repository/memory"
ucase "source.toby3d.me/website/indieauth/internal/ticket/usecase"
)
func TestRedeem(t *testing.T) {
t.Parallel()
token := domain.TestToken(t)
ticket := domain.TestTicket(t)
store := new(sync.Map)
store.Store(
path.Join(repo.DefaultPathPrefix, ticket.Resource.String()),
domain.TestURL(t, "https://example.com/token"),
)
client, _, cleanup := httptest.New(t, func(ctx *http.RequestCtx) {
ctx.SuccessString(common.MIMEApplicationJSONCharsetUTF8, fmt.Sprintf(`{
"token_type": "Bearer",
"access_token": "%s",
"scope": "%s",
"me": "%s"
}`, token.AccessToken, token.Scope.String(), token.Me.String()))
})
t.Cleanup(cleanup)
result, err := ucase.NewTicketUseCase(repo.NewMemoryTicketRepository(store), client).
Redeem(context.Background(), ticket)
require.NoError(t, err)
assert.Equal(t, token.AccessToken, result.AccessToken)
assert.Equal(t, token.Me.String(), result.Me.String())
assert.Equal(t, token.Scope, result.Scope)
}