test: add test for session delete
This commit is contained in:
parent
322b441c70
commit
382da3d811
@ -24,7 +24,9 @@ package controller
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
@ -32,12 +34,43 @@ import (
|
||||
"git.vinchent.xyz/vinchent/howmuch/internal/howmuch/adapter/controller/usecasemock"
|
||||
"git.vinchent.xyz/vinchent/howmuch/internal/howmuch/usecase/usecase"
|
||||
"git.vinchent.xyz/vinchent/howmuch/internal/pkg/errno"
|
||||
"git.vinchent.xyz/vinchent/howmuch/internal/pkg/middleware/authn"
|
||||
"git.vinchent.xyz/vinchent/howmuch/internal/pkg/test"
|
||||
"git.vinchent.xyz/vinchent/howmuch/internal/pkg/token"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
// {{{ Test Cache
|
||||
|
||||
type testCache struct {
|
||||
kvMap map[string]interface{}
|
||||
}
|
||||
|
||||
func (c *testCache) Get(ctx context.Context, key string) (string, error) {
|
||||
val, ok := c.kvMap[key]
|
||||
if ok {
|
||||
return val.(string), nil
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (c *testCache) Set(
|
||||
ctx context.Context,
|
||||
key string,
|
||||
value interface{},
|
||||
expiration time.Duration,
|
||||
) error {
|
||||
c.kvMap[key] = value
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *testCache) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// }}}
|
||||
|
||||
func TestSessionCreate(t *testing.T) {
|
||||
tests := []struct {
|
||||
Name string
|
||||
@ -93,3 +126,57 @@ func TestSessionCreate(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionDelete(t *testing.T) {
|
||||
testUserUsecase := usecasemock.NewtestUserUsecase()
|
||||
kvMap := make(map[string]interface{}, 1)
|
||||
tc := &testCache{kvMap: kvMap}
|
||||
sessionController := NewSessionController(testUserUsecase, tc)
|
||||
r := gin.New()
|
||||
session := r.Group("/session")
|
||||
{
|
||||
session.POST("/create", func(ctx *gin.Context) { sessionController.Create(ctx) })
|
||||
session.Use(authn.Authn(tc))
|
||||
session.POST("/delete", func(ctx *gin.Context) { sessionController.Delete(ctx) })
|
||||
}
|
||||
|
||||
params := createParams{
|
||||
Email: "correct@correct.com",
|
||||
Password: "strong password",
|
||||
}
|
||||
user, _ := json.Marshal(params)
|
||||
res := test.PerformRequest(t, r, "POST", "/session/create", bytes.NewReader(user),
|
||||
test.Header{
|
||||
Key: "content-type",
|
||||
Value: "application/json",
|
||||
})
|
||||
|
||||
var tk Token
|
||||
_ = json.NewDecoder(res.Result().Body).Decode(&tk)
|
||||
tkResp, _ := token.Parse(tk.Token)
|
||||
|
||||
// Log out
|
||||
res = test.PerformRequest(t, r, "POST", "/session/delete", nil,
|
||||
test.Header{
|
||||
Key: "Authorization",
|
||||
Value: fmt.Sprintf("Bearer %s", tkResp.Raw),
|
||||
})
|
||||
|
||||
var loggedOut string
|
||||
err := json.NewDecoder(res.Result().Body).Decode(&loggedOut)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "logged out", loggedOut)
|
||||
|
||||
// Try to access the handler with the old token
|
||||
res = test.PerformRequest(t, r, "POST", "/session/delete", nil,
|
||||
test.Header{
|
||||
Key: "Authorization",
|
||||
Value: fmt.Sprintf("Bearer %s", tkResp.Raw),
|
||||
})
|
||||
|
||||
var unauth errno.Errno
|
||||
err = json.NewDecoder(res.Result().Body).Decode(&unauth)
|
||||
assert.NoError(t, err)
|
||||
unauth.HTTP = res.Result().StatusCode
|
||||
assert.Equal(t, *authn.ErrLoggedOut, unauth)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user