@@ -21,11 +21,67 @@ import (
2121 "os"
2222 "testing"
2323
24+ api "github.com/chainloop-dev/chainloop/app/cli/api/attestation/v1"
25+ "github.com/in-toto/in-toto-golang/in_toto"
2426 "github.com/secure-systems-lab/go-securesystemslib/dsse"
2527 "github.com/stretchr/testify/assert"
2628 "github.com/stretchr/testify/require"
29+ "google.golang.org/protobuf/encoding/protojson"
2730)
2831
32+ func TestRender (t * testing.T ) {
33+ testCases := []struct {
34+ name string
35+ sourcePath string
36+ outputPath string
37+ }{
38+ {
39+ name : "render v0.1" ,
40+ sourcePath : "testdata/attestation.source.json" ,
41+ outputPath : "testdata/attestation.output.v0.1.json" ,
42+ },
43+ }
44+
45+ for _ , tc := range testCases {
46+ t .Run (tc .name , func (t * testing.T ) {
47+ // Load expected resulting output
48+ wantRaw , err := os .ReadFile (tc .outputPath )
49+ require .NoError (t , err )
50+
51+ var want * in_toto.Statement
52+ err = json .Unmarshal (wantRaw , & want )
53+ require .NoError (t , err )
54+
55+ // Initialize renderer
56+ state := & api.CraftingState {}
57+ stateRaw , err := os .ReadFile (tc .sourcePath )
58+ require .NoError (t , err )
59+
60+ err = protojson .Unmarshal (stateRaw , state )
61+ require .NoError (t , err )
62+
63+ renderer , err := NewAttestationRenderer (state , "" , "dev" , "sha256:59e14f1a9de709cdd0e91c36b33e54fcca95f7dba1dc7169a7f81986e02108e5" )
64+ require .NoError (t , err )
65+
66+ // Compare header
67+ gotHeader , err := renderer .renderer .Header ()
68+ assert .NoError (t , err )
69+ assert .Equal (t , want .Type , gotHeader .Type )
70+ assert .Equal (t , want .Subject , gotHeader .Subject )
71+ assert .Equal (t , want .PredicateType , gotHeader .PredicateType )
72+
73+ // Compare predicate
74+ gotPredicateI , err := renderer .renderer .Predicate ()
75+ assert .NoError (t , err )
76+ gotPredicate := gotPredicateI .(ChainloopProvenancePredicateV1 )
77+ wantPredicate , err := extractPredicateV1 (want )
78+ wantPredicate .Metadata .FinishedAt = gotPredicate .Metadata .FinishedAt
79+ assert .NoError (t , err )
80+ assert .EqualValues (t , wantPredicate , & gotPredicate )
81+ })
82+ }
83+ }
84+
2985func TestExtractPredicate (t * testing.T ) {
3086 testCases := []struct {
3187 name string
0 commit comments