@@ -49,3 +49,102 @@ func TestNew_DeserializationError(t *testing.T) {
4949 assert .Error (t , err )
5050 assert .Contains (t , err .Error (), "unable to deserialize claims" )
5151}
52+
53+ func TestNew_WithFirstNameAndLastName (t * testing.T ) {
54+ claims := map [string ]interface {}{
55+ "iss" : "test-issuer" ,
56+ "sub" : "test-subject" ,
57+ "first_name" : "John" ,
58+ "last_name" : "Doe" ,
59+ }
60+
61+ token := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt .MapClaims (claims ))
62+ tokenString , err := token .SignedString (joseTestKey )
63+ assert .NoError (t , err )
64+
65+ webToken , err := New (tokenString , signatureAlgorithms )
66+ assert .NoError (t , err )
67+ assert .Equal (t , "John" , webToken .FirstName )
68+ assert .Equal (t , "Doe" , webToken .LastName )
69+ }
70+
71+ func TestNew_WithGivenNameAndFamilyName (t * testing.T ) {
72+ claims := map [string ]interface {}{
73+ "iss" : "test-issuer" ,
74+ "sub" : "test-subject" ,
75+ "given_name" : "Jonathan" ,
76+ "family_name" : "Smith" ,
77+ }
78+
79+ token := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt .MapClaims (claims ))
80+ tokenString , err := token .SignedString (joseTestKey )
81+ assert .NoError (t , err )
82+
83+ webToken , err := New (tokenString , signatureAlgorithms )
84+ assert .NoError (t , err )
85+ assert .Equal (t , "Jonathan" , webToken .FirstName )
86+ assert .Equal (t , "Smith" , webToken .LastName )
87+ }
88+
89+ func TestNew_PreferFirstLastNameOverGivenFamilyName (t * testing.T ) {
90+ claims := map [string ]interface {}{
91+ "iss" : "test-issuer" ,
92+ "sub" : "test-subject" ,
93+ "first_name" : "John" ,
94+ "last_name" : "Doe" ,
95+ "given_name" : "Jonathan" ,
96+ "family_name" : "Smith" ,
97+ }
98+
99+ token := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt .MapClaims (claims ))
100+ tokenString , err := token .SignedString (joseTestKey )
101+ assert .NoError (t , err )
102+
103+ webToken , err := New (tokenString , signatureAlgorithms )
104+ assert .NoError (t , err )
105+ // Should prefer first_name/last_name over given_name/family_name
106+ assert .Equal (t , "John" , webToken .FirstName )
107+ assert .Equal (t , "Doe" , webToken .LastName )
108+ }
109+
110+ func TestNew_FallbackToGivenFamilyNameWhenFirstLastEmpty (t * testing.T ) {
111+ claims := map [string ]interface {}{
112+ "iss" : "test-issuer" ,
113+ "sub" : "test-subject" ,
114+ "first_name" : "" ,
115+ "last_name" : "" ,
116+ "given_name" : "Jonathan" ,
117+ "family_name" : "Smith" ,
118+ }
119+
120+ token := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt .MapClaims (claims ))
121+ tokenString , err := token .SignedString (joseTestKey )
122+ assert .NoError (t , err )
123+
124+ webToken , err := New (tokenString , signatureAlgorithms )
125+ assert .NoError (t , err )
126+ // Should fallback to given_name/family_name when first_name/last_name are empty
127+ assert .Equal (t , "Jonathan" , webToken .FirstName )
128+ assert .Equal (t , "Smith" , webToken .LastName )
129+ }
130+
131+ func TestNew_PartialFallback (t * testing.T ) {
132+ claims := map [string ]interface {}{
133+ "iss" : "test-issuer" ,
134+ "sub" : "test-subject" ,
135+ "first_name" : "John" ,
136+ "last_name" : "" , // empty
137+ "given_name" : "Jonathan" ,
138+ "family_name" : "Smith" ,
139+ }
140+
141+ token := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt .MapClaims (claims ))
142+ tokenString , err := token .SignedString (joseTestKey )
143+ assert .NoError (t , err )
144+
145+ webToken , err := New (tokenString , signatureAlgorithms )
146+ assert .NoError (t , err )
147+ // Should use first_name but fallback to family_name for last name
148+ assert .Equal (t , "John" , webToken .FirstName )
149+ assert .Equal (t , "Smith" , webToken .LastName )
150+ }
0 commit comments