all repos

onasty @ c0ab069

a one-time notes service

onasty/internal/jwtutil/jwtutil_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
test(e2e): test all behaviours of 'read note' route (#198)..., 9 months ago
1
package jwtutil
2
3
import (
4
	"testing"
5
	"testing/synctest"
6
	"time"
7
8
	"github.com/stretchr/testify/assert"
9
	"github.com/stretchr/testify/require"
10
)
11
12
func TestJWTUtil_AccessToken(t *testing.T) {
13
	jwt := NewJWTUtil("key", time.Hour)
14
	payload := Payload{UserID: "user.123"}
15
16
	token, err := jwt.AccessToken(payload)
17
	require.NoError(t, err)
18
	assert.NotEmpty(t, token)
19
}
20
21
func TestJWTUtil_RefreshToken(t *testing.T) {
22
	jwt := NewJWTUtil("key", time.Hour)
23
24
	tok, err := jwt.RefreshToken()
25
	require.NoError(t, err)
26
	assert.Len(t, tok, 64)
27
28
	secondTok, err := jwt.RefreshToken()
29
	require.NoError(t, err)
30
31
	// tokens should be unique
32
	assert.NotEqual(t, tok, secondTok)
33
}
34
35
func TestJWTUtil_Parse(t *testing.T) {
36
	jwt := NewJWTUtil("key", time.Hour)
37
	payload := Payload{UserID: "qwerty"}
38
39
	token, err := jwt.AccessToken(payload)
40
	require.NoError(t, err)
41
	assert.NotEmpty(t, token)
42
43
	parsedPayload, err := jwt.Parse(token)
44
	require.NoError(t, err)
45
46
	assert.Equal(t, payload, parsedPayload)
47
}
48
49
func TestJWTUtil_Parse_expired(t *testing.T) {
50
	ttl := 24 * time.Hour
51
52
	synctest.Test(t, func(t *testing.T) {
53
		jwt := NewJWTUtil("key", ttl)
54
		payload := Payload{UserID: "qwerty"}
55
56
		token, err := jwt.AccessToken(payload)
57
		require.NoError(t, err)
58
		assert.NotEmpty(t, token)
59
60
		time.Sleep(2 * ttl)
61
62
		_, err = jwt.Parse(token)
63
		require.EqualError(t, err, ErrTokenExpired.Error())
64
	})
65
}