From f1137c20b8658193ae78125b148fe56c95ef343b Mon Sep 17 00:00:00 2001 From: MABD Date: Tue, 1 Sep 2026 08:07:48 +0300 Subject: [PATCH 1/2] increased test coverage to 100% --- internal/render/file/file.go | 8 +------- internal/render/file/file_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/internal/render/file/file.go b/internal/render/file/file.go index 8af624f..978aa57 100644 --- a/internal/render/file/file.go +++ b/internal/render/file/file.go @@ -2,7 +2,6 @@ package file import ( "encoding/json" - "errors" "fmt" "path/filepath" @@ -16,12 +15,7 @@ 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() - return errors.New(msg) - } + jsonReport, _ := json.MarshalIndent(report, "", " ") reportFileName := fmt.Sprintf("ScanReport %s.json", report.GeneratedAt.Format("2006-01-02 15-04-05")) fullReportPath := filepath.Join(dirPath, reportFileName) diff --git a/internal/render/file/file_test.go b/internal/render/file/file_test.go index c04bf86..442600f 100644 --- a/internal/render/file/file_test.go +++ b/internal/render/file/file_test.go @@ -49,3 +49,21 @@ 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") + } +} From d5a7906a08af4ab36f19d83eef9f13eb36550934 Mon Sep 17 00:00:00 2001 From: MABD Date: Tue, 1 Sep 2026 08:25:29 +0300 Subject: [PATCH 2/2] added more test --- internal/render/file/file.go | 7 ++++++- internal/render/file/file_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/internal/render/file/file.go b/internal/render/file/file.go index 978aa57..d9ce500 100644 --- a/internal/render/file/file.go +++ b/internal/render/file/file.go @@ -2,6 +2,7 @@ package file import ( "encoding/json" + "errors" "fmt" "path/filepath" @@ -15,7 +16,11 @@ func WriteScanReport( report report.ScanReport, dirPath string, ) error { - jsonReport, _ := json.MarshalIndent(report, "", " ") + jsonReport, err := json.MarshalIndent(report, "", " ") + if err != nil { + msg := "Error convert report to json, message=" + err.Error() + return errors.New(msg) + } reportFileName := fmt.Sprintf("ScanReport %s.json", report.GeneratedAt.Format("2006-01-02 15-04-05")) fullReportPath := filepath.Join(dirPath, reportFileName) diff --git a/internal/render/file/file_test.go b/internal/render/file/file_test.go index 442600f..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" @@ -67,3 +68,30 @@ func TestWriteScanReport_WriteErrorCoverage(t *testing.T) { 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) + } +}