11package middleware
22
33import (
4+ "encoding/json"
45 "net/http"
56 "net/http/httptest"
67 "testing"
@@ -23,6 +24,7 @@ func TestExtractUserToken(t *testing.T) {
2324 name string
2425 authHeader string
2526 expectedStatusCode int
27+ expectedCode string
2628 expectedTokenType utils.TokenType
2729 expectedToken string
2830 expectTokenInfo bool
@@ -33,6 +35,7 @@ func TestExtractUserToken(t *testing.T) {
3335 name : "missing Authorization header returns 401 with WWW-Authenticate" ,
3436 authHeader : "" ,
3537 expectedStatusCode : http .StatusUnauthorized ,
38+ expectedCode : "missing_token" ,
3639 expectTokenInfo : false ,
3740 expectWWWAuth : true ,
3841 },
@@ -151,18 +154,21 @@ func TestExtractUserToken(t *testing.T) {
151154 name : "unsupported GitHub-Bearer header returns 400" ,
152155 authHeader : "GitHub-Bearer some_encrypted_token" ,
153156 expectedStatusCode : http .StatusBadRequest ,
157+ expectedCode : "invalid_token" ,
154158 expectTokenInfo : false ,
155159 },
156160 {
157161 name : "invalid token format returns 400" ,
158162 authHeader : "Bearer invalid_token_format" ,
159163 expectedStatusCode : http .StatusBadRequest ,
164+ expectedCode : "invalid_token" ,
160165 expectTokenInfo : false ,
161166 },
162167 {
163168 name : "unrecognized prefix returns 400" ,
164169 authHeader : "Bearer xyz_notavalidprefix" ,
165170 expectedStatusCode : http .StatusBadRequest ,
171+ expectedCode : "invalid_token" ,
166172 expectTokenInfo : false ,
167173 },
168174 }
@@ -189,6 +195,13 @@ func TestExtractUserToken(t *testing.T) {
189195 handler .ServeHTTP (rr , req )
190196
191197 assert .Equal (t , tt .expectedStatusCode , rr .Code )
198+ if tt .expectedCode != "" {
199+ var body struct {
200+ Code string `json:"code"`
201+ }
202+ require .NoError (t , json .Unmarshal (rr .Body .Bytes (), & body ))
203+ assert .Equal (t , tt .expectedCode , body .Code )
204+ }
192205
193206 if tt .expectWWWAuth {
194207 wwwAuth := rr .Header ().Get ("WWW-Authenticate" )
@@ -253,6 +266,11 @@ func TestExtractUserToken_MissingAuthHeader_WWWAuthenticateFormat(t *testing.T)
253266 handler .ServeHTTP (rr , req )
254267
255268 assert .Equal (t , http .StatusUnauthorized , rr .Code )
269+ var body struct {
270+ Code string `json:"code"`
271+ }
272+ require .NoError (t , json .Unmarshal (rr .Body .Bytes (), & body ))
273+ assert .Equal (t , "missing_token" , body .Code )
256274 wwwAuth := rr .Header ().Get ("WWW-Authenticate" )
257275 assert .NotEmpty (t , wwwAuth )
258276 assert .Contains (t , wwwAuth , "Bearer" )
0 commit comments