Skip to content

Commit

Permalink
tests: improves the integration with testify
Browse files Browse the repository at this point in the history
  • Loading branch information
supitsdu committed Jul 16, 2024
1 parent a0bf8f0 commit ffcffc4
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 93 deletions.
117 changes: 53 additions & 64 deletions tests/reader/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,32 @@ import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/supitsdu/clipper/cli/options"
"github.com/supitsdu/clipper/cli/reader"
"github.com/supitsdu/clipper/tests"
)

const (
ErrFileNotFound = "file does not exist or can't be accessed"
ErrReadingDirectories = "reading from directories is not currently supported"
ErrPermissionDenied = "permission denied"
)

func TestReadAll(t *testing.T) {
t.Run("reads single file", func(t *testing.T) {
file1, err := tests.CreateTempFile(t, tests.SampleText32)
if err != nil {
t.Fatalf("Failed to create temporary file: %s", err)
}
file := tests.CreateTempFile(t, tests.SampleText32)

config := &options.Config{
FilePaths: []string{file1.Name()},
FilePaths: []string{file.Name()},
}

contentReader := reader.ContentReader{Config: config}

result, err := contentReader.ReadAll()
assert.NoError(t, err)
require.NoError(t, err)
expectedResult := tests.SampleText32 + "\n"
assert.Equal(t, expectedResult, result)
require.Equal(t, expectedResult, result)
})

t.Run("reads from argument", func(t *testing.T) {
Expand All @@ -39,9 +43,9 @@ func TestReadAll(t *testing.T) {
contentReader := reader.ContentReader{Config: config}

result, err := contentReader.ReadAll()
assert.NoError(t, err)
require.NoError(t, err)
expectedResult := tests.SampleText32 + "\n"
assert.Equal(t, expectedResult, result)
require.Equal(t, expectedResult, result)
})

t.Run("reads multiple files", func(t *testing.T) {
Expand All @@ -50,22 +54,18 @@ func TestReadAll(t *testing.T) {
var filePaths []string

for index := 0; index < 3; index++ {
file, err := tests.CreateTempFile(t, fileContents[index])
if err != nil {
t.Fatalf("Failed to create temporary file: %s", err)
}
file := tests.CreateTempFile(t, fileContents[index])

filePaths = append(filePaths, file.Name())
}

config := &options.Config{FilePaths: filePaths}

contentReader := reader.ContentReader{Config: config}

result, err := contentReader.ReadAll()

assert.NoError(t, err)
assert.Equal(t, expectedResults, result)
require.NoError(t, err)
require.Equal(t, expectedResults, result)
})
}

Expand All @@ -75,75 +75,64 @@ func TestReadable(t *testing.T) {
contentReader := reader.ContentReader{Config: config}

t.Run("file exists and is readable", func(t *testing.T) {
file, err := tests.CreateTempFile(t, "content")
if err != nil {
t.Fatalf("Failed to create temporary file: %s", err)
}

err = contentReader.Readable(file.Name())
assert.NoError(t, err)
file := tests.CreateTempFile(t, "content")
err := contentReader.Readable(file.Name())
require.NoError(t, err)
})

t.Run("file does not exist", func(t *testing.T) {
err := contentReader.Readable("nonexistentfile")
assert.Error(t, err)
assert.Equal(t, "file does not exist or can't be accessed", err.Error())
require.Error(t, err)
assert.EqualError(t, err, ErrFileNotFound)
})

t.Run("path is a directory", func(t *testing.T) {
dir, err := tests.CreateTempDir(t, "testdir")
if err != nil {
t.Fatalf("Failed to create temporary directory: %s", err)
}
// Create a temporary directory
dir, err := os.MkdirTemp(t.TempDir(), "testdir")
require.NoError(t, err)

err = contentReader.Readable(dir)
assert.Error(t, err)
assert.Equal(t, "reading from directories is not currently supported", err.Error())
require.Error(t, err)
assert.EqualError(t, err, ErrReadingDirectories)
})

t.Run("file is not readable", func(t *testing.T) {
file, err := tests.CreateTempFile(t, "content")
if err != nil {
t.Fatalf("Failed to create temporary file: %s", err)
}
file := tests.CreateTempFile(t, "content")

// Remove read permissions
if err := os.Chmod(file.Name(), 0200); err != nil { // 0200 corresponds to write-only permission.
if err := os.Chmod(file.Name(), 0o200); err != nil { // 0200 corresponds to write-only permission.
t.Fatalf("Failed to change file permissions: %s", err)
}

err = contentReader.Readable(file.Name())
assert.Error(t, err)
assert.Equal(t, "permission denied", err.Error())
err := contentReader.Readable(file.Name())
require.Error(t, err)
assert.EqualError(t, err, ErrPermissionDenied)

// Restore read permissions for cleanup
if err := os.Chmod(file.Name(), 0600); err != nil { // 0600 corresponds to read-write permissions.
if err := os.Chmod(file.Name(), 0o600); err != nil { // 0600 corresponds to read-write permissions.
t.Fatalf("Failed to restore file permissions: %s", err)
}
})

t.Run("file is readable after fixing permissions", func(t *testing.T) {
file, err := tests.CreateTempFile(t, "content")
if err != nil {
t.Fatalf("Failed to create temporary file: %s", err)
}
file := tests.CreateTempFile(t, "content")

// Remove read permissions
if err := os.Chmod(file.Name(), 0200); err != nil { // 0200 corresponds to write-only permission.
if err := os.Chmod(file.Name(), 0o200); err != nil { // 0200 corresponds to write-only permission.
t.Fatalf("Failed to change file permissions: %s", err)
}

err = contentReader.Readable(file.Name())
assert.Error(t, err)
assert.Equal(t, "permission denied", err.Error())
err := contentReader.Readable(file.Name())
require.Error(t, err)
assert.EqualError(t, err, ErrPermissionDenied)

// Restore read permissions
if err := os.Chmod(file.Name(), 0600); err != nil { // 0600 corresponds to read-write permissions.
if err := os.Chmod(file.Name(), 0o600); err != nil { // 0600 corresponds to read-write permissions.
t.Fatalf("Failed to restore file permissions: %s", err)
}

err = contentReader.Readable(file.Name())
assert.NoError(t, err)
require.NoError(t, err)
})
}

Expand All @@ -154,22 +143,22 @@ func TestIOReader(t *testing.T) {
t.Run("reads content from reader", func(t *testing.T) {
reader := strings.NewReader(tests.SampleText32)
result, err := contentReader.IOReader(reader, "")
assert.NoError(t, err)
assert.Equal(t, tests.SampleText32, result)
require.NoError(t, err)
require.Equal(t, tests.SampleText32, result)
})

t.Run("returns empty string for empty reader", func(t *testing.T) {
reader := strings.NewReader("")
result, err := contentReader.IOReader(reader, "")
assert.NoError(t, err)
assert.Equal(t, "", result)
require.NoError(t, err)
require.Equal(t, "", result)
})

t.Run("returns error for faulty reader", func(t *testing.T) {
reader := io.NopCloser(&tests.FaultyReader{})
result, err := contentReader.IOReader(reader, "")
assert.Error(t, err)
assert.Equal(t, "", result)
require.Error(t, err)
require.Equal(t, "", result)
})
}

Expand All @@ -179,26 +168,26 @@ func TestCreateContent(t *testing.T) {
contentReader := reader.ContentReader{Config: config}

result, err := contentReader.CreateContent("", []byte(tests.SampleText32))
assert.NoError(t, err)
assert.Equal(t, tests.SampleText32, result)
require.NoError(t, err)
require.Equal(t, tests.SampleText32, result)
})

t.Run("Content with HTML5 format", func(t *testing.T) {
config := &options.Config{ShouldFormat: true, HTML: true}
contentReader := reader.ContentReader{Config: config}

result, err := contentReader.CreateContent("", []byte(tests.SampleText32))
assert.NoError(t, err)
assert.Equal(t, "<code>\n"+tests.SampleText32+"\n</code>", result)
require.NoError(t, err)
require.Equal(t, "<code>\n"+tests.SampleText32+"\n</code>", result)
})

t.Run("Content with Markdown format", func(t *testing.T) {
config := &options.Config{ShouldFormat: true, Markdown: true}
contentReader := reader.ContentReader{Config: config}

result, err := contentReader.CreateContent("", []byte(tests.SampleText32))
assert.NoError(t, err)
assert.Equal(t, "```\n"+tests.SampleText32+"\n```", result)
require.NoError(t, err)
require.Equal(t, "```\n"+tests.SampleText32+"\n```", result)
})
}

Expand All @@ -211,7 +200,7 @@ func TestJoinAll(t *testing.T) {
expected := "content1\ncontent2\ncontent3\n"
result := contentReader.JoinAll(results)

assert.Equal(t, expected, result)
require.Equal(t, expected, result)
})

t.Run("ignore empty contents", func(t *testing.T) {
Expand All @@ -222,6 +211,6 @@ func TestJoinAll(t *testing.T) {
expected := "content2\n"
result := contentReader.JoinAll(results)

assert.Equal(t, expected, result)
require.Equal(t, expected, result)
})
}
35 changes: 6 additions & 29 deletions tests/tests.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"io"
"os"
"testing"

"github.com/stretchr/testify/require"
)

const SampleText32 = "Mocking Bird! Just A Sample Text."
Expand Down Expand Up @@ -34,42 +36,17 @@ func ReplaceStdin(t *testing.T) (*os.File, *os.File) {
}

// createTempFile creates a temporary file for testing purposes and writes the given content to it.
func CreateTempFile(t *testing.T, content string) (*os.File, error) {
func CreateTempFile(t *testing.T, content string) *os.File {
t.Helper()
// Create a temporary file
file, err := os.CreateTemp(t.TempDir(), "testfile")
if err != nil {
return nil, err
}
require.NoError(t, err)

// Write the provided content to the temporary file
_, err = file.WriteString(content)
if err != nil {
return nil, err
}

return file, nil
}

// CreateTempDir creates a temporary directory for testing purposes.
// It returns the path to the created directory and an error if any.
func CreateTempDir(t *testing.T, dirname string) (string, error) {
t.Helper()

// Create a temporary directory
dir, err := os.MkdirTemp(t.TempDir(), dirname)
if err != nil {
return "", err
}

// Ensure the directory is cleaned up after the test
t.Cleanup(func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatalf("Failed to clean up temporary directory: %s", err)
}
})
require.NoError(t, err)

return dir, nil
return file
}

// IsCIEnvironment checks if the code is running in a CI environment.
Expand Down

0 comments on commit ffcffc4

Please sign in to comment.