Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion internal/render/file/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
46 changes: 46 additions & 0 deletions internal/render/file/file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"os"
"path/filepath"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -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)
}
}
Loading