1
21
22 package jwt_test
23
24 import (
25 "testing"
26 "time"
27
28 "github.com/stretchr/testify/assert"
29
30 . "github.com/ory/fosite/token/jwt"
31 )
32
33 var jwtClaims = &JWTClaims{
34 Subject: "peter",
35 IssuedAt: time.Now().UTC().Round(time.Second),
36 Issuer: "fosite",
37 NotBefore: time.Now().UTC().Round(time.Second),
38 Audience: []string{"tests"},
39 ExpiresAt: time.Now().UTC().Add(time.Hour).Round(time.Second),
40 JTI: "abcdef",
41 Scope: []string{"email", "offline"},
42 Extra: map[string]interface{}{
43 "foo": "bar",
44 "baz": "bar",
45 },
46 ScopeField: JWTScopeFieldList,
47 }
48
49 var jwtClaimsMap = map[string]interface{}{
50 "sub": jwtClaims.Subject,
51 "iat": jwtClaims.IssuedAt.Unix(),
52 "iss": jwtClaims.Issuer,
53 "nbf": jwtClaims.NotBefore.Unix(),
54 "aud": jwtClaims.Audience,
55 "exp": jwtClaims.ExpiresAt.Unix(),
56 "jti": jwtClaims.JTI,
57 "scp": []string{"email", "offline"},
58 "foo": jwtClaims.Extra["foo"],
59 "baz": jwtClaims.Extra["baz"],
60 }
61
62 func TestClaimAddGetString(t *testing.T) {
63 jwtClaims.Add("foo", "bar")
64 assert.Equal(t, "bar", jwtClaims.Get("foo"))
65 }
66
67 func TestClaimsToMapSetsID(t *testing.T) {
68 assert.NotEmpty(t, (&JWTClaims{}).ToMap()["jti"])
69 }
70
71 func TestAssert(t *testing.T) {
72 assert.Nil(t, (&JWTClaims{ExpiresAt: time.Now().UTC().Add(time.Hour)}).
73 ToMapClaims().Valid())
74 assert.NotNil(t, (&JWTClaims{ExpiresAt: time.Now().UTC().Add(-2 * time.Hour)}).
75 ToMapClaims().Valid())
76 assert.NotNil(t, (&JWTClaims{NotBefore: time.Now().UTC().Add(time.Hour)}).
77 ToMapClaims().Valid())
78 assert.Nil(t, (&JWTClaims{NotBefore: time.Now().UTC().Add(-time.Hour)}).
79 ToMapClaims().Valid())
80 assert.Nil(t, (&JWTClaims{ExpiresAt: time.Now().UTC().Add(time.Hour),
81 NotBefore: time.Now().UTC().Add(-time.Hour)}).ToMapClaims().Valid())
82 }
83
84 func TestClaimsToMap(t *testing.T) {
85 assert.Equal(t, jwtClaimsMap, jwtClaims.ToMap())
86 }
87
88 func TestClaimsFromMap(t *testing.T) {
89 var claims JWTClaims
90 claims.FromMap(jwtClaimsMap)
91 assert.Equal(t, jwtClaims, &claims)
92 }
93
94 func TestScopeFieldString(t *testing.T) {
95 jwtClaimsWithString := jwtClaims.WithScopeField(JWTScopeFieldString)
96
97 jwtClaimsMapWithString := jwtClaims.ToMap()
98 delete(jwtClaimsMapWithString, "scp")
99 jwtClaimsMapWithString["scope"] = "email offline"
100 assert.Equal(t, jwtClaimsMapWithString, map[string]interface{}(jwtClaimsWithString.ToMapClaims()))
101 var claims JWTClaims
102 claims.FromMap(jwtClaimsMapWithString)
103 assert.Equal(t, jwtClaimsWithString, &claims)
104 }
105
106 func TestScopeFieldBoth(t *testing.T) {
107 jwtClaimsWithBoth := jwtClaims.WithScopeField(JWTScopeFieldBoth)
108
109 jwtClaimsMapWithBoth := jwtClaims.ToMap()
110 jwtClaimsMapWithBoth["scope"] = "email offline"
111 assert.Equal(t, jwtClaimsMapWithBoth, map[string]interface{}(jwtClaimsWithBoth.ToMapClaims()))
112 var claims JWTClaims
113 claims.FromMap(jwtClaimsMapWithBoth)
114 assert.Equal(t, jwtClaimsWithBoth, &claims)
115 }
116
View as plain text