...

Source file src/github.com/ory/fosite/token/jwt/claims_jwt_test.go

Documentation: github.com/ory/fosite/token/jwt

     1  /*
     2   * Copyright © 2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   *
    16   * @author		Aeneas Rekkas <aeneas+oss@aeneas.io>
    17   * @copyright 	2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
    18   * @license 	Apache-2.0
    19   *
    20   */
    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  	// Making a copy of jwtClaimsMap.
    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  	// Making a copy of jwtClaimsMap
   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