@@ -330,3 +330,190 @@ func TestEvidence_UnmarshalJSON(t *testing.T) {
330330 }, evidence .Identity )
331331 })
332332}
333+
334+ func TestService_TrustZone_MarshalJSON (t * testing.T ) {
335+ t .Run ("WithTrustZone" , func (t * testing.T ) {
336+ service := Service {
337+ Name : "Payment API" ,
338+ TrustZone : "trusted" ,
339+ }
340+ jsonBytes , err := json .Marshal (service )
341+ require .NoError (t , err )
342+ require .Contains (t , string (jsonBytes ), `"trustZone":"trusted"` )
343+ require .Contains (t , string (jsonBytes ), `"name":"Payment API"` )
344+ })
345+
346+ t .Run ("WithoutTrustZone" , func (t * testing.T ) {
347+ service := Service {
348+ Name : "Payment API" ,
349+ }
350+ jsonBytes , err := json .Marshal (service )
351+ require .NoError (t , err )
352+ require .NotContains (t , string (jsonBytes ), "trustZone" )
353+ require .Contains (t , string (jsonBytes ), `"name":"Payment API"` )
354+ })
355+ }
356+
357+ func TestService_TrustZone_UnmarshalJSON (t * testing.T ) {
358+ t .Run ("WithTrustZone" , func (t * testing.T ) {
359+ var service Service
360+ err := json .Unmarshal ([]byte (`{"name":"Payment API","trustZone":"trusted"}` ), & service )
361+ require .NoError (t , err )
362+ require .Equal (t , "Payment API" , service .Name )
363+ require .Equal (t , "trusted" , service .TrustZone )
364+ })
365+
366+ t .Run ("WithoutTrustZone" , func (t * testing.T ) {
367+ var service Service
368+ err := json .Unmarshal ([]byte (`{"name":"Payment API"}` ), & service )
369+ require .NoError (t , err )
370+ require .Equal (t , "Payment API" , service .Name )
371+ require .Empty (t , service .TrustZone )
372+ })
373+ }
374+
375+ func TestDependency_Provides_MarshalJSON (t * testing.T ) {
376+ t .Run ("WithProvides" , func (t * testing.T ) {
377+ dependency := Dependency {
378+ Ref : "crypto-library" ,
379+ Provides : & []string {"aes128gcm" , "sha256" },
380+ }
381+ jsonBytes , err := json .Marshal (dependency )
382+ require .NoError (t , err )
383+ require .Contains (t , string (jsonBytes ), `"ref":"crypto-library"` )
384+ require .Contains (t , string (jsonBytes ), `"provides":["aes128gcm","sha256"]` )
385+ })
386+
387+ t .Run ("WithProvidesAndDependsOn" , func (t * testing.T ) {
388+ dependency := Dependency {
389+ Ref : "crypto-library" ,
390+ Dependencies : & []string {"base-library" },
391+ Provides : & []string {"aes128gcm" },
392+ }
393+ jsonBytes , err := json .Marshal (dependency )
394+ require .NoError (t , err )
395+ require .Contains (t , string (jsonBytes ), `"ref":"crypto-library"` )
396+ require .Contains (t , string (jsonBytes ), `"dependsOn":["base-library"]` )
397+ require .Contains (t , string (jsonBytes ), `"provides":["aes128gcm"]` )
398+ })
399+
400+ t .Run ("WithoutProvides" , func (t * testing.T ) {
401+ dependency := Dependency {
402+ Ref : "app-component" ,
403+ Dependencies : & []string {"library-a" },
404+ }
405+ jsonBytes , err := json .Marshal (dependency )
406+ require .NoError (t , err )
407+ require .Contains (t , string (jsonBytes ), `"ref":"app-component"` )
408+ require .NotContains (t , string (jsonBytes ), "provides" )
409+ })
410+ }
411+
412+ func TestDependency_Provides_UnmarshalJSON (t * testing.T ) {
413+ t .Run ("WithProvides" , func (t * testing.T ) {
414+ var dependency Dependency
415+ err := json .Unmarshal ([]byte (`{"ref":"crypto-library","provides":["aes128gcm","sha256"]}` ), & dependency )
416+ require .NoError (t , err )
417+ require .Equal (t , "crypto-library" , dependency .Ref )
418+ require .NotNil (t , dependency .Provides )
419+ require .Equal (t , 2 , len (* dependency .Provides ))
420+ require .Equal (t , "aes128gcm" , (* dependency .Provides )[0 ])
421+ require .Equal (t , "sha256" , (* dependency .Provides )[1 ])
422+ })
423+
424+ t .Run ("WithProvidesAndDependsOn" , func (t * testing.T ) {
425+ var dependency Dependency
426+ err := json .Unmarshal ([]byte (`{"ref":"crypto-library","dependsOn":["base-library"],"provides":["aes128gcm"]}` ), & dependency )
427+ require .NoError (t , err )
428+ require .Equal (t , "crypto-library" , dependency .Ref )
429+ require .NotNil (t , dependency .Dependencies )
430+ require .Equal (t , 1 , len (* dependency .Dependencies ))
431+ require .Equal (t , "base-library" , (* dependency .Dependencies )[0 ])
432+ require .NotNil (t , dependency .Provides )
433+ require .Equal (t , 1 , len (* dependency .Provides ))
434+ require .Equal (t , "aes128gcm" , (* dependency .Provides )[0 ])
435+ })
436+
437+ t .Run ("WithoutProvides" , func (t * testing.T ) {
438+ var dependency Dependency
439+ err := json .Unmarshal ([]byte (`{"ref":"app-component","dependsOn":["library-a"]}` ), & dependency )
440+ require .NoError (t , err )
441+ require .Equal (t , "app-component" , dependency .Ref )
442+ require .Nil (t , dependency .Provides )
443+ })
444+ }
445+
446+ func TestExternalReferenceType_NewValues (t * testing.T ) {
447+ t .Run ("DigitalSignature" , func (t * testing.T ) {
448+ extRef := ExternalReference {
449+ Type : ERTypeDigitalSignature ,
450+ URL : "https://example.com/signature" ,
451+ }
452+ jsonBytes , err := json .Marshal (extRef )
453+ require .NoError (t , err )
454+ require .Contains (t , string (jsonBytes ), `"type":"digital-signature"` )
455+ })
456+
457+ t .Run ("ElectronicSignature" , func (t * testing.T ) {
458+ extRef := ExternalReference {
459+ Type : ERTypeElectronicSignature ,
460+ URL : "https://example.com/esignature" ,
461+ }
462+ jsonBytes , err := json .Marshal (extRef )
463+ require .NoError (t , err )
464+ require .Contains (t , string (jsonBytes ), `"type":"electronic-signature"` )
465+ })
466+
467+ t .Run ("POAM" , func (t * testing.T ) {
468+ extRef := ExternalReference {
469+ Type : ERTypePOAM ,
470+ URL : "https://example.com/poam" ,
471+ }
472+ jsonBytes , err := json .Marshal (extRef )
473+ require .NoError (t , err )
474+ require .Contains (t , string (jsonBytes ), `"type":"poam"` )
475+ })
476+
477+ t .Run ("RFC9116" , func (t * testing.T ) {
478+ extRef := ExternalReference {
479+ Type : ERTypeRFC9116 ,
480+ URL : "https://example.com/security.txt" ,
481+ }
482+ jsonBytes , err := json .Marshal (extRef )
483+ require .NoError (t , err )
484+ require .Contains (t , string (jsonBytes ), `"type":"rfc-9116"` )
485+ })
486+
487+ t .Run ("SourceDistribution" , func (t * testing.T ) {
488+ extRef := ExternalReference {
489+ Type : ERTypeSourceDistribution ,
490+ URL : "https://example.com/source.tar.gz" ,
491+ }
492+ jsonBytes , err := json .Marshal (extRef )
493+ require .NoError (t , err )
494+ require .Contains (t , string (jsonBytes ), `"type":"source-distribution"` )
495+ })
496+
497+ t .Run ("UnmarshalNewTypes" , func (t * testing.T ) {
498+ testCases := []struct {
499+ name string
500+ json string
501+ expected ExternalReferenceType
502+ }{
503+ {"digital-signature" , `{"type":"digital-signature","url":"https://example.com"}` , ERTypeDigitalSignature },
504+ {"electronic-signature" , `{"type":"electronic-signature","url":"https://example.com"}` , ERTypeElectronicSignature },
505+ {"poam" , `{"type":"poam","url":"https://example.com"}` , ERTypePOAM },
506+ {"rfc-9116" , `{"type":"rfc-9116","url":"https://example.com"}` , ERTypeRFC9116 },
507+ {"source-distribution" , `{"type":"source-distribution","url":"https://example.com"}` , ERTypeSourceDistribution },
508+ }
509+
510+ for _ , tc := range testCases {
511+ t .Run (tc .name , func (t * testing.T ) {
512+ var extRef ExternalReference
513+ err := json .Unmarshal ([]byte (tc .json ), & extRef )
514+ require .NoError (t , err )
515+ require .Equal (t , tc .expected , extRef .Type )
516+ })
517+ }
518+ })
519+ }
0 commit comments