package export import ( "encoding/json" "os" "path/filepath" "testing" ) // Note: model.Issue fields are not validated here; this test ensures the writer // creates valid JSON and writes atomically into place. func TestWriteIssues_WritesIndentedJSON(t *testing.T) { t.Parallel() wd, err := os.Getwd() if err != nil { t.Fatalf("get working dir: %v", err) } testDir := filepath.Join(wd, "testdata", t.Name()) if err := os.MkdirAll(testDir, 0o755); err != nil { t.Fatalf("create test dir: %v", err) } defer os.RemoveAll(testDir) outPath := filepath.Join("testdata", t.Name(), "issues.json") // Use an empty slice to avoid depending on model.Issue definition. if err := WriteIssues(outPath, nil); err != nil { t.Fatalf("WriteIssues error: %v", err) } b, err := os.ReadFile(outPath) if err != nil { t.Fatalf("read file: %v", err) } // Ensure valid JSON. var v any if err := json.Unmarshal(b, &v); err != nil { t.Fatalf("invalid json: %v\ncontent=%s", err, string(b)) } // encoding/json.Encoder.Encode adds a trailing newline; and SetIndent should // produce multi-line output for arrays/objects. if len(b) == 0 || b[len(b)-1] != '\n' { t.Fatalf("expected trailing newline") } }