@@ -3,6 +3,7 @@ package oidfed
3
3
import (
4
4
"bytes"
5
5
"encoding/json"
6
+ "fmt"
6
7
"reflect"
7
8
"testing"
8
9
@@ -333,48 +334,128 @@ func TestMetadata_UnmarshalJSON(t *testing.T) {
333
334
}
334
335
335
336
func TestMetadata_FindEntityMetadata (t * testing.T ) {
336
- type AnotherEntityMetadata struct {}
337
+ type AnotherEntityMetadata struct {
338
+ AKey string `json:"a-key"`
339
+ }
337
340
var metadata Metadata
338
341
if err := json .Unmarshal (metadataMarshalData ["extra metadata" ].Data , & metadata ); err != nil {
339
342
t .Fatal (err )
340
343
}
341
344
342
345
testCases := map [string ]struct {
343
346
metadataType string
344
- deserializeInto any
347
+ deserializeInto string
345
348
shouldSucceed bool
349
+ expectedResult any
346
350
}{
347
351
"Metadata is present and in an explicit struct field" : {
348
352
metadataType : "federation_entity" ,
349
- deserializeInto : FederationEntityMetadata {},
353
+ deserializeInto : "federation_entity_metadata" ,
354
+ shouldSucceed : true ,
355
+ expectedResult : FederationEntityMetadata {
356
+ FederationFetchEndpoint : "https://federation.endpoint/fetch" ,
357
+ wasSet : map [string ]bool {
358
+ "FederationFetchEndpoint" : true ,
359
+ },
360
+ },
361
+ },
362
+ "Metadata handle nil pointer parameter" : {
363
+ metadataType : "federation_entity" ,
364
+ deserializeInto : "" ,
365
+ shouldSucceed : false ,
366
+ expectedResult : nil ,
367
+ },
368
+ "Metadata present in Extra but incorrectly typed" : {
369
+ metadataType : "another-entity" ,
370
+ deserializeInto : "struct name" ,
350
371
shouldSucceed : true ,
372
+ expectedResult : struct { Name string }{},
373
+ },
374
+ "Struct field present but empty" : {
375
+ metadataType : "openid_provider" ,
376
+ deserializeInto : "openid_provider_metadata" ,
377
+ shouldSucceed : false ,
378
+ expectedResult : OpenIDProviderMetadata {},
379
+ },
380
+ "Extra metadata with invalid entity type" : {
381
+ metadataType : "invalid-extra" ,
382
+ deserializeInto : "struct" ,
383
+ shouldSucceed : false ,
384
+ expectedResult : struct {}{},
351
385
},
352
386
"Metadata is present and in extra metadata" : {
353
387
metadataType : "another-entity" ,
354
- deserializeInto : AnotherEntityMetadata {} ,
388
+ deserializeInto : "another_entity_metadata" ,
355
389
shouldSucceed : true ,
390
+ expectedResult : AnotherEntityMetadata {
391
+ AKey : "a-value" ,
392
+ },
356
393
},
357
394
"Metadata is absent and would be in an explicit struct field" : {
358
395
metadataType : "openid_provider" ,
359
- deserializeInto : OpenIDProviderMetadata {} ,
396
+ deserializeInto : "openid_provider_metadata" ,
360
397
shouldSucceed : false ,
398
+ expectedResult : OpenIDProviderMetadata {},
361
399
},
362
400
"Metadata is absent and would be in extra metadata" : {
363
401
metadataType : "no-such-metadata" ,
364
- deserializeInto : struct {}{} ,
402
+ deserializeInto : " struct" ,
365
403
shouldSucceed : false ,
404
+ expectedResult : struct {}{},
366
405
},
367
406
}
368
407
369
408
for name , testCase := range testCases {
370
409
t .Run (
371
410
name , func (t * testing.T ) {
372
- err := metadata .FindEntityMetadata (testCase .metadataType , & testCase .deserializeInto )
411
+ var err error
412
+ var result any
413
+ switch testCase .deserializeInto {
414
+ case "federation_entity_metadata" :
415
+ var deserialize FederationEntityMetadata
416
+ err = metadata .FindEntityMetadata (testCase .metadataType , & deserialize )
417
+ result = deserialize
418
+ case "openid_provider_metadata" :
419
+ var deserialize OpenIDProviderMetadata
420
+ err = metadata .FindEntityMetadata (testCase .metadataType , & deserialize )
421
+ result = deserialize
422
+ case "another_entity_metadata" :
423
+ var deserialize AnotherEntityMetadata
424
+ err = metadata .FindEntityMetadata (testCase .metadataType , & deserialize )
425
+ result = deserialize
426
+ case "struct" :
427
+ var deserialize struct {}
428
+ err = metadata .FindEntityMetadata (testCase .metadataType , & deserialize )
429
+ result = deserialize
430
+ case "struct name" :
431
+ var deserialize struct { Name string }
432
+ err = metadata .FindEntityMetadata (testCase .metadataType , & deserialize )
433
+ result = deserialize
434
+ default :
435
+ err = metadata .FindEntityMetadata (testCase .metadataType , nil )
436
+ }
437
+ fmt .Printf ("Result: %T %+v\n " , result , result )
438
+
373
439
if testCase .shouldSucceed && err != nil {
374
440
t .Error (err )
375
441
} else if ! testCase .shouldSucceed && err == nil {
376
442
t .Errorf ("finding %s metadata should fail" , testCase .metadataType )
377
- t .Logf ("%+v" , testCase .deserializeInto )
443
+ if result != nil {
444
+ // t.Logf("%+v", reflect.ValueOf(testValue).Elem().Interface())
445
+ t .Logf ("%+v" , result )
446
+ }
447
+ }
448
+
449
+ if testCase .expectedResult != nil && result != nil {
450
+ if ! reflect .DeepEqual (result , testCase .expectedResult ) {
451
+ t .Errorf (
452
+ "Result not as expected.\n Expected: %T: %+v\n Got: %T: %+v" ,
453
+ testCase .expectedResult ,
454
+ testCase .expectedResult ,
455
+ result ,
456
+ result ,
457
+ )
458
+ }
378
459
}
379
460
},
380
461
)
0 commit comments