package auth import ( "testing" "time" "github.com/FernandoJVideira/api_tmpl/internal/config" "github.com/FernandoJVideira/api_tmpl/internal/domain/role" "github.com/FernandoJVideira/api_tmpl/pkg/testutil" "github.com/stretchr/testify/require" ) func TestPasetoMaker(t *testing.T) { config, err := config.LoadTestConfig("../../") require.NoError(t, err) maker, err := NewPasetoMaker(config) require.NoError(t, err) username := testutil.RandomOwner() duration := time.Minute issuedAt := time.Now() expiredAt := issuedAt.Add(duration) role := role.MemberRole token, payload, err := maker.CreateToken(username, role, duration) require.NoError(t, err) require.NotEmpty(t, token) require.NotEmpty(t, payload) payload, err = maker.VerifyToken(token) require.NoError(t, err) require.NotEmpty(t, payload) require.NotZero(t, payload.ID) require.Equal(t, username, payload.Username) require.Equal(t, role, payload.Role) require.WithinDuration(t, issuedAt, payload.IssuedAt, time.Second) require.WithinDuration(t, expiredAt, payload.ExpiredAt, time.Second) } func TestExpiredPasetoToken(t *testing.T) { config, err := config.LoadTestConfig("../../") require.NoError(t, err) maker, err := NewPasetoMaker(config) require.NoError(t, err) username := testutil.RandomOwner() duration := -time.Minute token, payload, err := maker.CreateToken(username, role.MemberRole, duration) require.NoError(t, err) require.NotEmpty(t, token) require.NotEmpty(t, payload) payload, err = maker.VerifyToken(token) require.Error(t, err) require.EqualError(t, err, ErrExpiredToken.Error()) require.Nil(t, payload) }