11package generator
22
33import (
4+ "encoding/json"
45 "os"
56 "path/filepath"
67 "strings"
78 "testing"
89
910 "goa.design/goa/v3/codegen"
1011 "goa.design/goa/v3/eval"
12+ goa "goa.design/goa/v3/pkg"
1113)
1214
1315// TestGenerateMergesSamePathFiles verifies that when two generators emit content
@@ -106,8 +108,9 @@ func TestGenerateParallelManyFiles(t *testing.T) {
106108 if err != nil {
107109 t .Fatalf ("Generate failed: %v" , err )
108110 }
111+ outputs = assertVersionFile (t , dir , outputs )
109112
110- // Verify all files were written
113+ // Verify all generator files were written
111114 if len (outputs ) != numFiles {
112115 t .Fatalf ("expected %d output files, got %d" , numFiles , len (outputs ))
113116 }
@@ -169,6 +172,7 @@ func TestGenerateParallelWithMerge(t *testing.T) {
169172 if err != nil {
170173 t .Fatalf ("Generate failed: %v" , err )
171174 }
175+ outputs = assertVersionFile (t , dir , outputs )
172176
173177 if len (outputs ) != 2 {
174178 t .Fatalf ("expected 2 output files, got %d" , len (outputs ))
@@ -268,6 +272,7 @@ func TestGenerateParallelSingleFile(t *testing.T) {
268272 if err != nil {
269273 t .Fatalf ("Generate failed: %v" , err )
270274 }
275+ outputs = assertVersionFile (t , dir , outputs )
271276
272277 if len (outputs ) != 1 {
273278 t .Fatalf ("expected 1 output file, got %d" , len (outputs ))
@@ -283,3 +288,33 @@ func TestGenerateParallelSingleFile(t *testing.T) {
283288 t .Fatalf ("file missing expected content:\n %s" , content )
284289 }
285290}
291+
292+ // assertVersionFile checks that goa.json was emitted with the correct version
293+ // and returns the remaining outputs (excluding goa.json) for further assertions.
294+ func assertVersionFile (t * testing.T , dir string , outputs []string ) []string {
295+ t .Helper ()
296+
297+ versionPath := filepath .Join (codegen .Gendir , "goa.json" )
298+
299+ // Read and validate goa.json content.
300+ bs , err := os .ReadFile (filepath .Join (dir , versionPath ))
301+ if err != nil {
302+ t .Fatalf ("failed reading goa.json: %v" , err )
303+ }
304+ var data map [string ]string
305+ if err := json .Unmarshal (bs , & data ); err != nil {
306+ t .Fatalf ("goa.json is not valid JSON: %v" , err )
307+ }
308+ if v := data ["goa_version" ]; v != goa .Version () {
309+ t .Fatalf ("goa.json version = %q, want %q" , v , goa .Version ())
310+ }
311+
312+ // Filter goa.json out of outputs.
313+ var rest []string
314+ for _ , o := range outputs {
315+ if filepath .Base (o ) != "goa.json" {
316+ rest = append (rest , o )
317+ }
318+ }
319+ return rest
320+ }
0 commit comments