diff --git a/internal/render/file/file.go b/internal/render/file/file.go index 8af624f..d9ce500 100644 --- a/internal/render/file/file.go +++ b/internal/render/file/file.go @@ -16,7 +16,6 @@ func WriteScanReport( report report.ScanReport, dirPath string, ) error { - // create folder if it does not exist jsonReport, err := json.MarshalIndent(report, "", " ") if err != nil { msg := "Error convert report to json, message=" + err.Error() diff --git a/internal/render/file/file_test.go b/internal/render/file/file_test.go index c04bf86..9964d37 100644 --- a/internal/render/file/file_test.go +++ b/internal/render/file/file_test.go @@ -4,6 +4,7 @@ import ( "encoding/json" "os" "path/filepath" + "strings" "testing" "time" @@ -49,3 +50,48 @@ func TestWriteScanReport_WritesFileWithTimestampedName(t *testing.T) { t.Fatalf("unexpected version in JSON: %v", obj["Version"]) } } + +// TestWriteScanReport_WriteErrorCoverage exercises the utils.WriteToFile +// error path by pointing dirPath at a location that cannot be created +// (a regular file used as a parent directory yields ENOTDIR). +func TestWriteScanReport_WriteErrorCoverage(t *testing.T) { + root := t.TempDir() + blocker := filepath.Join(root, "blocker.txt") + if err := os.WriteFile(blocker, []byte("x"), 0o644); err != nil { + t.Fatalf("write blocker: %v", err) + } + + r := report.ScanReport{GeneratedAt: time.Now()} + // dirPath has a regular-file component, so creating the report dir fails. + err := WriteScanReport(r, filepath.Join(blocker, "child")) + if err == nil { + t.Fatal("expected error when target directory cannot be created") + } +} + +// TestWriteScanReport_MarshalError verifies the JSON marshal error path: a +// time.Time whose year exceeds 9999 cannot be JSON-encoded, so WriteScanReport +// must return that error instead of reporting success with a zero-byte file. +func TestWriteScanReport_MarshalError(t *testing.T) { + dir := t.TempDir() + r := report.ScanReport{ + GeneratedAt: time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC), + } + + err := WriteScanReport(r, dir) + if err == nil { + t.Fatal("expected error when GeneratedAt year is out of JSON range") + } + if !strings.Contains(err.Error(), "Error convert report to json") { + t.Fatalf("expected json conversion error, got %q", err) + } + + // No file must have been written. + entries, readErr := os.ReadDir(dir) + if readErr != nil { + t.Fatalf("readdir: %v", readErr) + } + if len(entries) != 0 { + t.Fatalf("expected no file written on marshal error, got %v", entries) + } +}