@@ -20,7 +20,7 @@ import (
2020
2121type jsonCheck struct {
2222 Path string
23- Want interface {}
23+ Want any
2424}
2525
2626// cmdTestCase describes a cmd test case.
@@ -106,38 +106,53 @@ func goldenPath(filename string) string {
106106 return filepath .Join ("testdata" , filename )
107107}
108108
109- func goldenJsonContains (t * testing.T , output string , path string , want interface {} ) {
110- var data interface {}
109+ func goldenJsonContains (t * testing.T , output string , path string , want any ) {
110+ var data any
111111 err := json .Unmarshal ([]byte (output ), & data )
112112 require .NoError (t , err , "invalid JSON in command output" )
113113
114- // Handle empty path - check root value directly
115- if path == "" {
116- // Special case: check for empty array
117- if want == "[]" || want == "empty" {
118- list , ok := data .([]interface {})
119- require .True (t , ok , "expected array at root" )
120- require .Equal (t , 0 , len (list ), "expected empty array" )
121- return
122- }
123- // Special case: check for non-empty array
124- if want == "non-empty" {
125- list , ok := data .([]interface {})
126- require .True (t , ok , "expected array at root" )
127- require .Greater (t , len (list ), 0 , "expected non-empty array" )
128- return
129- }
130- // Special case: check for empty object
131- if want == "{}" {
132- obj , ok := data .(map [string ]interface {})
133- require .True (t , ok , "expected object at root" )
134- require .Equal (t , 0 , len (obj ), "expected empty object" )
135- return
136- }
137- require .Equal (t , want , data , "unexpected value at root" )
114+ if path != "" {
115+ data = parseJsonData (data , path , t )
116+ }
117+
118+ // Special case: check for empty array
119+ if want == "[]" || want == "empty" {
120+ list , ok := data .([]any )
121+ require .True (t , ok , "expected array at root" )
122+ require .Equal (t , 0 , len (list ), "expected empty array" )
123+ return
124+ }
125+ // Special case: check for non-empty array
126+ if want == "non-empty" {
127+ list , ok := data .([]any )
128+ require .True (t , ok , "expected array at root" )
129+ require .Greater (t , len (list ), 0 , "expected non-empty array" )
130+ return
131+ }
132+ // Special case: check for empty object
133+ if want == "{}" {
134+ obj , ok := data .(map [string ]any )
135+ require .True (t , ok , "expected object at root" )
136+ require .Equal (t , 0 , len (obj ), "expected empty object" )
138137 return
139138 }
140139
140+ // Special case: check array length
141+ if wantStr , ok := want .(string ); ok && strings .HasPrefix (wantStr , "length:" ) {
142+ lengthStr := strings .TrimPrefix (wantStr , "length:" )
143+ expectedLength , err := strconv .Atoi (lengthStr )
144+ require .NoError (t , err , "invalid length specification: %s" , wantStr )
145+
146+ list , ok := data .([]any )
147+ require .True (t , ok , "expected array at path %s" , path )
148+ require .Equal (t , expectedLength , len (list ), "unexpected array length at path %s" , path )
149+ return
150+ }
151+
152+ require .Equal (t , want , data , "unexpected value at path %s" , path )
153+ }
154+
155+ func parseJsonData (data any , path string , t * testing.T ) any {
141156 current := data
142157 segments := strings .Split (path , "." )
143158 for _ , seg := range segments {
@@ -147,34 +162,21 @@ func goldenJsonContains(t *testing.T, output string, path string, want interface
147162 idx , err := strconv .Atoi (idxStr )
148163 require .NoError (t , err , "invalid array index in path: %s" , seg )
149164
150- list , ok := current .([]interface {} )
165+ list , ok := current .([]any )
151166 require .True (t , ok , "expected array at %s" , seg )
152167 require .True (t , idx < len (list ), "index %d out of range" , idx )
153168 current = list [idx ]
154169 } else {
155170 // map lookup
156- m , ok := current .(map [string ]interface {} )
171+ m , ok := current .(map [string ]any )
157172 require .True (t , ok , "expected object at %s" , seg )
158173
159174 val , exists := m [seg ]
160175 require .True (t , exists , "missing key %s" , seg )
161176 current = val
162177 }
163178 }
164-
165- // Special case: check array length
166- if wantStr , ok := want .(string ); ok && strings .HasPrefix (wantStr , "length:" ) {
167- lengthStr := strings .TrimPrefix (wantStr , "length:" )
168- expectedLength , err := strconv .Atoi (lengthStr )
169- require .NoError (t , err , "invalid length specification: %s" , wantStr )
170-
171- list , ok := current .([]interface {})
172- require .True (t , ok , "expected array at path %s" , path )
173- require .Equal (t , expectedLength , len (list ), "unexpected array length at path %s" , path )
174- return
175- }
176-
177- require .Equal (t , want , current , "unexpected value at path %s" , path )
179+ return current
178180}
179181
180182func compareTwoFiles (actualFilename , expectedFilename string ) error {
@@ -329,6 +331,13 @@ func BeginTrail(trailName, flowName, templatePath string, t *testing.T) {
329331 payload : TrailPayload {
330332 Name : trailName ,
331333 Description : "test trail" ,
334+ GitRepoInfo : & gitview.GitRepoInfo {
335+ URL : "https://github.com/kosli-dev/cli" ,
336+ Name : "main" ,
337+ ID : "1234567890" ,
338+ Description : "test description" ,
339+ Provider : "github" ,
340+ },
332341 },
333342 templateFile : templatePath ,
334343 flow : flowName ,
0 commit comments