auth/internal/token/delivery/http/token_http_test.go

119 lines
3.5 KiB
Go
Raw Normal View History

2021-09-20 15:45:54 +00:00
package http_test
import (
"context"
"strings"
2021-09-23 17:46:44 +00:00
"sync"
2021-09-20 15:45:54 +00:00
"testing"
2022-01-13 20:50:40 +00:00
"github.com/fasthttp/router"
json "github.com/goccy/go-json"
2021-09-20 15:45:54 +00:00
"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"
2022-01-13 20:50:40 +00:00
sessionrepo "source.toby3d.me/website/indieauth/internal/session/repository/memory"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
ticketrepo "source.toby3d.me/website/indieauth/internal/ticket/repository/memory"
ticketucase "source.toby3d.me/website/indieauth/internal/ticket/usecase"
delivery "source.toby3d.me/website/indieauth/internal/token/delivery/http"
2022-01-13 20:50:40 +00:00
tokenrepo "source.toby3d.me/website/indieauth/internal/token/repository/memory"
tokenucase "source.toby3d.me/website/indieauth/internal/token/usecase"
2021-09-20 15:45:54 +00:00
)
/* TODO(toby3d)
func TestExchange(t *testing.T) {
t.Parallel()
}
*/
func TestVerification(t *testing.T) {
t.Parallel()
2022-01-13 20:50:40 +00:00
store := new(sync.Map)
config := domain.TestConfig(t)
token := domain.TestToken(t)
router := router.New()
2022-01-13 20:50:40 +00:00
// TODO(toby3d): provide tickets
delivery.NewRequestHandler(
tokenucase.NewTokenUseCase(
tokenrepo.NewMemoryTokenRepository(store),
sessionrepo.NewMemorySessionRepository(config, store),
config,
),
ticketucase.NewTicketUseCase(
ticketrepo.NewMemoryTicketRepository(store, config),
new(http.Client),
config,
),
).Register(router)
client, _, cleanup := httptest.New(t, router.Handler)
t.Cleanup(cleanup)
2022-01-13 20:50:40 +00:00
req := httptest.NewRequest(http.MethodGet, "https://app.example.com/token", nil)
defer http.ReleaseRequest(req)
req.Header.Set(http.HeaderAccept, common.MIMEApplicationJSON)
2022-01-13 20:50:40 +00:00
token.SetAuthHeader(req)
resp := http.AcquireResponse()
defer http.ReleaseResponse(resp)
require.NoError(t, client.Do(req, resp))
assert.Equal(t, http.StatusOK, resp.StatusCode())
result := new(delivery.TokenVerificationResponse)
2022-01-13 20:50:40 +00:00
require.NoError(t, json.Unmarshal(resp.Body(), result))
assert.Equal(t, token.ClientID.String(), result.ClientID.String())
assert.Equal(t, token.Me.String(), result.Me.String())
assert.Equal(t, token.Scope.String(), result.Scope.String())
}
2021-09-20 15:45:54 +00:00
func TestRevocation(t *testing.T) {
t.Parallel()
2022-01-13 20:50:40 +00:00
config := domain.TestConfig(t)
store := new(sync.Map)
tokens := tokenrepo.NewMemoryTokenRepository(store)
accessToken := domain.TestToken(t)
2021-09-20 15:45:54 +00:00
router := router.New()
delivery.NewRequestHandler(
tokenucase.NewTokenUseCase(
tokens,
sessionrepo.NewMemorySessionRepository(config, store),
config,
),
ticketucase.NewTicketUseCase(
ticketrepo.NewMemoryTicketRepository(store, config),
new(http.Client),
config,
),
).Register(router)
2022-01-13 20:50:40 +00:00
client, _, cleanup := httptest.New(t, router.Handler)
t.Cleanup(cleanup)
2022-01-13 20:50:40 +00:00
req := httptest.NewRequest(http.MethodPost, "https://app.example.com/token", nil)
2021-09-20 15:45:54 +00:00
defer http.ReleaseRequest(req)
req.Header.Set(http.HeaderAccept, common.MIMEApplicationJSON)
2022-01-13 20:50:40 +00:00
req.Header.SetContentType(common.MIMEApplicationForm)
req.PostArgs().Set("action", domain.ActionRevoke.String())
req.PostArgs().Set("token", accessToken.AccessToken)
2021-09-20 15:45:54 +00:00
resp := http.AcquireResponse()
defer http.ReleaseResponse(resp)
require.NoError(t, client.Do(req, resp))
assert.Equal(t, http.StatusOK, resp.StatusCode())
assert.Equal(t, `{}`, strings.TrimSpace(string(resp.Body())))
2021-09-20 15:45:54 +00:00
result, err := tokens.Get(context.TODO(), accessToken.AccessToken)
require.NoError(t, err)
assert.Equal(t, accessToken.AccessToken, result.AccessToken)
2021-09-20 15:45:54 +00:00
}