@@ -4,20 +4,24 @@ import (
44 "encoding/json"
55 "net/http/httptest"
66 "net/url"
7- "os "
7+ "path "
88 "strings"
99 "testing"
1010
1111 "github.com/gin-gonic/gin"
12+ "github.com/google/go-querystring/query"
1213 "github.com/steveiliop56/tinyauth/internal/bootstrap"
1314 "github.com/steveiliop56/tinyauth/internal/config"
1415 "github.com/steveiliop56/tinyauth/internal/controller"
1516 "github.com/steveiliop56/tinyauth/internal/repository"
1617 "github.com/steveiliop56/tinyauth/internal/service"
1718 "github.com/stretchr/testify/assert"
19+ "github.com/stretchr/testify/require"
1820)
1921
2022func TestOIDCController (t * testing.T ) {
23+ tempDir := t .TempDir ()
24+
2125 oidcServiceCfg := service.OIDCServiceConfig {
2226 Clients : map [string ]config.OIDCClientConfig {
2327 "test" : {
@@ -27,8 +31,8 @@ func TestOIDCController(t *testing.T) {
2731 Name : "Test Client" ,
2832 },
2933 },
30- PrivateKeyPath : "/tmp/tinyauth_testing_key .pem" ,
31- PublicKeyPath : "/tmp/tinyauth_testing_key .pub" ,
34+ PrivateKeyPath : path . Join ( tempDir , "key .pem") ,
35+ PublicKeyPath : path . Join ( tempDir , "key .pub") ,
3236 Issuer : "https://tinyauth.example.com" ,
3337 SessionExpiry : 500 ,
3438 }
@@ -170,11 +174,11 @@ func TestOIDCController(t *testing.T) {
170174 Code : "" ,
171175 RedirectURI : "https://test.example.com/callback" ,
172176 }
173- reqBodyBytes , err := json . Marshal (reqBody )
177+ reqBodyEncoded , err := query . Values (reqBody )
174178 assert .NoError (t , err )
175179
176- req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
177- req .Header .Set ("Content-Type" , "application/json " )
180+ req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
181+ req .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
178182 router .ServeHTTP (recorder , req )
179183
180184 var res map [string ]any
@@ -193,11 +197,11 @@ func TestOIDCController(t *testing.T) {
193197 Code : "some-code" ,
194198 RedirectURI : "https://test.example.com/callback" ,
195199 }
196- reqBodyBytes , err := json . Marshal (reqBody )
200+ reqBodyEncoded , err := query . Values (reqBody )
197201 assert .NoError (t , err )
198202
199- req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
200- req .Header .Set ("Content-Type" , "application/json " )
203+ req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
204+ req .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
201205 req .SetBasicAuth ("some-client-id" , "some-client-secret" )
202206 router .ServeHTTP (recorder , req )
203207
@@ -231,11 +235,11 @@ func TestOIDCController(t *testing.T) {
231235 Code : "some-code" ,
232236 RedirectURI : "https://test.example.com/callback" ,
233237 }
234- reqBodyBytes , err := json . Marshal (reqBody )
238+ reqBodyEncoded , err := query . Values (reqBody )
235239 assert .NoError (t , err )
236240
237- req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
238- req .Header .Set ("Content-Type" , "application/json " )
241+ req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
242+ req .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
239243 router .ServeHTTP (recorder , req )
240244
241245 authHeader := recorder .Header ().Get ("www-authenticate" )
@@ -270,11 +274,11 @@ func TestOIDCController(t *testing.T) {
270274 Code : code ,
271275 RedirectURI : "https://test.example.com/callback" ,
272276 }
273- reqBodyBytes , err := json . Marshal (reqBody )
277+ reqBodyEncoded , err := query . Values (reqBody )
274278 assert .NoError (t , err )
275279
276- req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
277- req .Header .Set ("Content-Type" , "application/json " )
280+ req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
281+ req .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
278282 req .SetBasicAuth ("some-client-id" , "some-client-secret" )
279283 router .ServeHTTP (recorder , req )
280284
@@ -307,11 +311,11 @@ func TestOIDCController(t *testing.T) {
307311 ClientID : "some-client-id" ,
308312 ClientSecret : "some-client-secret" ,
309313 }
310- reqBodyBytes , err := json . Marshal (reqBody )
314+ reqBodyEncoded , err := query . Values (reqBody )
311315 assert .NoError (t , err )
312316
313- req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
314- req .Header .Set ("Content-Type" , "application/json " )
317+ req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
318+ req .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
315319 router .ServeHTTP (recorder , req )
316320
317321 assert .NotEmpty (t , recorder .Header ().Get ("cache-control" ))
@@ -356,19 +360,19 @@ func TestOIDCController(t *testing.T) {
356360 Code : code ,
357361 RedirectURI : "https://test.example.com/callback" ,
358362 }
359- reqBodyBytes , err := json . Marshal (reqBody )
363+ reqBodyEncoded , err := query . Values (reqBody )
360364 assert .NoError (t , err )
361365
362- req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
363- req .Header .Set ("Content-Type" , "application/json " )
366+ req := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
367+ req .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
364368 req .SetBasicAuth ("some-client-id" , "some-client-secret" )
365369 router .ServeHTTP (recorder , req )
366370
367371 assert .Equal (t , 200 , recorder .Code )
368372
369373 // Try to use the same code again
370- secondReq := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (string ( reqBodyBytes )))
371- secondReq .Header .Set ("Content-Type" , "application/json " )
374+ secondReq := httptest .NewRequest ("POST" , "/api/oidc/token" , strings .NewReader (reqBodyEncoded . Encode ( )))
375+ secondReq .Header .Set ("Content-Type" , "application/x-www-form-urlencoded " )
372376 secondReq .SetBasicAuth ("some-client-id" , "some-client-secret" )
373377 secondRecorder := httptest .NewRecorder ()
374378 router .ServeHTTP (secondRecorder , secondReq )
@@ -431,13 +435,13 @@ func TestOIDCController(t *testing.T) {
431435
432436 app := bootstrap .NewBootstrapApp (config.Config {})
433437
434- db , err := app .SetupDatabase ("/tmp/tinyauth_test .db" )
435- assert .NoError (t , err )
438+ db , err := app .SetupDatabase (path . Join ( tempDir , "tinyauth .db") )
439+ require .NoError (t , err )
436440
437441 queries := repository .New (db )
438442 oidcService := service .NewOIDCService (oidcServiceCfg , queries )
439443 err = oidcService .Init ()
440- assert .NoError (t , err )
444+ require .NoError (t , err )
441445
442446 for _ , test := range tests {
443447 t .Run (test .description , func (t * testing.T ) {
@@ -459,15 +463,8 @@ func TestOIDCController(t *testing.T) {
459463 })
460464 }
461465
462- err = db .Close ()
463- assert .NoError (t , err )
464-
465- err = os .Remove ("/tmp/tinyauth_test.db" )
466- assert .NoError (t , err )
467-
468- err = os .Remove (oidcServiceCfg .PrivateKeyPath )
469- assert .NoError (t , err )
470-
471- err = os .Remove (oidcServiceCfg .PublicKeyPath )
472- assert .NoError (t , err )
466+ t .Cleanup (func () {
467+ err = db .Close ()
468+ require .NoError (t , err )
469+ })
473470}
0 commit comments