From 2381c8712ebafa8060f0d2feacadd85bef280eb0 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 4 Jul 2026 22:14:16 +0300 Subject: - Delete internal/file/content.go (duplicate implementation with different semantics). - Refactor internal/file/file.go to use a File struct with options (WithContent, WithSource, WithMode, etc.). - Update Have signature to accept variadic options instead of (path, param). - Update tests to use new API. - Update TODO.md to remove resolved blocker and reflect remaining features. --- internal/file/file_test.go | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'internal/file/file_test.go') diff --git a/internal/file/file_test.go b/internal/file/file_test.go index e41d7dc..a9397ba 100644 --- a/internal/file/file_test.go +++ b/internal/file/file_test.go @@ -31,7 +31,7 @@ func TestWriteTmpFile(t *testing.T) { tmpPath := filepath.Join(dir, "test.tmp") content := []byte("temp content") - if err := writeTmpFile(tmpPath, content); err != nil { + if err := writeTmpFile(tmpPath, content, 0o644); err != nil { t.Fatalf("unexpected error: %v", err) } @@ -101,7 +101,7 @@ func TestHaveStringCreateNewFile(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "new.txt") - if err := Have(path, "hello world"); err != nil { + if err := Have(path, WithContent("hello world")); err != nil { t.Fatalf("unexpected error: %v", err) } @@ -114,12 +114,31 @@ func TestHaveStringCreateNewFile(t *testing.T) { } } +func TestHaveMode(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "mode.txt") + mode := os.FileMode(0o600) + + if err := Have(path, WithContent("mode test"), WithMode(mode)); err != nil { + t.Fatalf("unexpected error: %v", err) + } + + info, err := os.Stat(path) + if err != nil { + t.Fatal(err) + } + // Mask to check only permission bits + if info.Mode().Perm() != mode { + t.Errorf("expected mode %v, got %v", mode, info.Mode().Perm()) + } +} + func TestHaveSourceFile(t *testing.T) { dir := t.TempDir() sourcePath := filepath.Join("..", "..", "assets", "testfiles", "test.txt") targetPath := filepath.Join(dir, "target.txt") - if err := Have(targetPath, "source://"+sourcePath); err != nil { + if err := Have(targetPath, WithSource(sourcePath)); err != nil { t.Fatalf("unexpected error: %v", err) } @@ -138,7 +157,7 @@ func TestHaveTemplateFile(t *testing.T) { sourcePath := filepath.Join("..", "..", "assets", "testfiles", "test.tmpl") targetPath := filepath.Join(dir, "target.conf") - if err := Have(targetPath, "source://"+sourcePath); err != nil { + if err := Have(targetPath, WithSource(sourcePath)); err != nil { t.Fatalf("unexpected error: %v", err) } @@ -147,7 +166,7 @@ func TestHaveTemplateFile(t *testing.T) { t.Fatalf("reading file: %v", err) } - expectedParam := "source://" + sourcePath + expectedParam := sourcePath if !strings.Contains(string(got), expectedParam) { t.Errorf("expected content to contain Param %q, got %q", expectedParam, string(got)) } -- cgit v1.2.3