From 0bf7b63286a42d1fcbbccc8ccdde915323550feb Mon Sep 17 00:00:00 2001 From: Urko Date: Sun, 5 Mar 2023 00:05:00 +0100 Subject: [PATCH] feat: test coverage more than 85% --- internal/io/writer.go | 10 ++++ internal/io/writer_test.go | 94 ++++++++++++++++++++++++++++++++++++++ pkg/io/writer.go | 2 + 3 files changed, 106 insertions(+) create mode 100644 internal/io/writer_test.go diff --git a/internal/io/writer.go b/internal/io/writer.go index 5df287d..d530e99 100644 --- a/internal/io/writer.go +++ b/internal/io/writer.go @@ -11,7 +11,13 @@ type writer struct { dirPath string } +// WriteFile writes file into `w writer` directory. +// Returns outputPath and error func (w writer) WriteFile(filename string, data []byte) (string, error) { + if filename == "" { + return "", fmt.Errorf("filename cannot be empty") + } + if w.dirPath == "" { return "", fmt.Errorf("export directory cannot be empty") } @@ -27,6 +33,10 @@ func (w writer) WriteFile(filename string, data []byte) (string, error) { } func NewWriter(dirPath string) io.WriterIface { + return newWriter(dirPath) +} + +func newWriter(dirPath string) *writer { return &writer{ dirPath: dirPath, } diff --git a/internal/io/writer_test.go b/internal/io/writer_test.go new file mode 100644 index 0000000..6f9d02d --- /dev/null +++ b/internal/io/writer_test.go @@ -0,0 +1,94 @@ +package io + +import ( + "log" + "os" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var ( + testWriterPath = "testPath" + testWriterPathError = "test Path, @:ººººº\\/.Ç*⁺´+" + testFileContent = "test data" + testFileName = "test-file.txt" + workingDir = "" +) + +func deleteAllDirs() error { + return os.RemoveAll(testWriterPath) +} + +func init() { + err := deleteAllDirs() + if err != nil { + log.Fatalln("deleteAllDirs: ", err) + } + workingDir, err = os.Getwd() + if err != nil { + log.Fatalln("os.Getwd: ", err) + } +} + +func Test_newWriter(t *testing.T) { + w := newWriter(testWriterPath) + require.NotNil(t, w) +} + +func TestNewWriter(t *testing.T) { + w := NewWriter(testWriterPath) + require.NotNil(t, w) +} + +func Test_writer_WriteFile(t *testing.T) { + deleteAllDirs() + defer deleteAllDirs() + w := newWriter(testWriterPath) + wgot, err := w.WriteFile(testFileName, []byte(testFileContent)) + require.NoError(t, err) + + btsReaded, err := os.ReadFile(wgot) + require.NoError(t, err) + require.NotEmpty(t, btsReaded) + require.Equal(t, string(btsReaded), testFileContent) +} + +func Test_writer_WriteFileError(t *testing.T) { + deleteAllDirs() + defer deleteAllDirs() + w := newWriter("") + _, err := w.WriteFile(testFileName, []byte(testFileContent)) + assert.Error(t, err) + + w = newWriter(testWriterPath) + _, err = w.WriteFile("", []byte(testFileContent)) + require.Error(t, err) + + go func() { + deleteAllDirs() + for { + f, err := os.Stat(testWriterPath) + if err != nil { + if strings.Contains(err.Error(), "no such file or directory") { + continue + } + t.Errorf("os.Stat error: %s", err) + } + err = os.RemoveAll(testWriterPath) + require.NotNil(t, f) + log.Println("exists deleting dir") + require.NoError(t, err, "should not throw error because dir exists") + return + } + }() + + _, err = w.WriteFile(testFileName, nil) + assert.Error(t, err) + + w = newWriter(testWriterPathError) + _, err = w.WriteFile(testFileContent, []byte(testFileContent)) + require.Error(t, err) +} diff --git a/pkg/io/writer.go b/pkg/io/writer.go index 6d2d8da..c43242f 100644 --- a/pkg/io/writer.go +++ b/pkg/io/writer.go @@ -1,5 +1,7 @@ package io type WriterIface interface { + // WriteFile writes file into `w writer` directory. + // Returns outputPath and error WriteFile(filename string, data []byte) (string, error) }