Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
204 lines
5 KiB
Go
204 lines
5 KiB
Go
package xos_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ignite/cli/v29/ignite/pkg/xos"
|
|
)
|
|
|
|
func TestFindFiles(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
files []string
|
|
extension []string
|
|
prefix string
|
|
want []string
|
|
err error
|
|
}{
|
|
{
|
|
name: "test zero files",
|
|
files: []string{},
|
|
want: []string{},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test one file",
|
|
files: []string{"file.json"},
|
|
want: []string{"file.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 3 files",
|
|
files: []string{"file1.json", "file2.txt", "file3.json"},
|
|
want: []string{"file1.json", "file2.txt", "file3.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test file prefix",
|
|
files: []string{"file.prefix.test.json"},
|
|
prefix: "file.prefix",
|
|
want: []string{"file.prefix.test.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test bigger file prefix",
|
|
files: []string{"file.prefix.test.json"},
|
|
prefix: "file.prefix.test",
|
|
want: []string{"file.prefix.test.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 3 files prefix",
|
|
files: []string{"test.file1.json", "test.file2.txt", "test.file3.json"},
|
|
prefix: "test.file",
|
|
want: []string{"test.file1.json", "test.file2.txt", "test.file3.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 3 extension json files",
|
|
files: []string{"file1.json", "file2.txt", "file3.json", "file4.json"},
|
|
extension: []string{"json"},
|
|
want: []string{"file1.json", "file3.json", "file4.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 3 extension json files with subfolder",
|
|
files: []string{"testdata/file1.json", "file2.txt", "foo/file3.json", "file4.json"},
|
|
extension: []string{"json"},
|
|
want: []string{"testdata/file1.json", "foo/file3.json", "file4.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 1 extension txt files",
|
|
files: []string{"file1.json", "file2.txt", "file3.json", "file4.json"},
|
|
extension: []string{"txt"},
|
|
want: []string{"file2.txt"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 1 extension json files",
|
|
files: []string{"file1.json"},
|
|
extension: []string{"json"},
|
|
want: []string{"file1.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test invalid files extension",
|
|
files: []string{"file1.json", "file2.json", "file3.json", "file4.json"},
|
|
extension: []string{"txt"},
|
|
want: []string{},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test file prefix and extension",
|
|
files: []string{"test.file1.json", "test.file2.txt", "test.file3.json"},
|
|
prefix: "test.file",
|
|
extension: []string{"json"},
|
|
want: []string{"test.file1.json", "test.file3.json"},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "test 2 different extensions",
|
|
files: []string{"file1.json", "file2.txt", "file3.json", "file4.json", "file.yaml"},
|
|
extension: []string{"txt", "yaml"},
|
|
want: []string{"file2.txt", "file.yaml"},
|
|
err: nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
dirName := strings.ReplaceAll(t.Name(), "/", "_")
|
|
tempDir, err := os.MkdirTemp("", dirName)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
require.NoError(t, os.RemoveAll(tempDir))
|
|
})
|
|
|
|
for _, filename := range tt.files {
|
|
filePath := filepath.Join(tempDir, filename)
|
|
require.NoError(t, os.MkdirAll(filepath.Dir(filePath), 0o755))
|
|
file, err := os.Create(filePath)
|
|
require.NoError(t, err)
|
|
require.NoError(t, file.Close())
|
|
}
|
|
|
|
opts := make([]xos.FindFileOptions, 0)
|
|
if tt.prefix != "" {
|
|
opts = append(opts, xos.WithPrefix(tt.prefix))
|
|
}
|
|
|
|
for _, ext := range tt.extension {
|
|
opts = append(opts, xos.WithExtension(ext))
|
|
}
|
|
|
|
gotFiles, err := xos.FindFiles(tempDir, opts...)
|
|
if tt.err != nil {
|
|
require.Error(t, err)
|
|
require.ErrorIs(t, err, tt.err)
|
|
return
|
|
}
|
|
require.NoError(t, err)
|
|
|
|
want := make([]string, len(tt.want))
|
|
for i, filename := range tt.want {
|
|
want[i] = filepath.Join(tempDir, filename)
|
|
}
|
|
require.ElementsMatch(t, want, gotFiles)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFileExists(t *testing.T) {
|
|
tempDir, err := os.MkdirTemp("", "TestCopyFile")
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
require.NoError(t, os.RemoveAll(tempDir))
|
|
})
|
|
|
|
srcDir := filepath.Join(tempDir, "source")
|
|
err = os.MkdirAll(srcDir, 0o755)
|
|
require.NoError(t, err)
|
|
|
|
srcFile := filepath.Join(srcDir, "file.txt")
|
|
err = os.WriteFile(srcFile, []byte("File content"), 0o644)
|
|
require.NoError(t, err)
|
|
|
|
tests := []struct {
|
|
name string
|
|
filename string
|
|
want bool
|
|
}{
|
|
{
|
|
name: "existing file",
|
|
filename: srcFile,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "non existing file",
|
|
filename: "non_existing_file.txt",
|
|
want: false,
|
|
},
|
|
{
|
|
name: "directory",
|
|
filename: srcDir,
|
|
want: false,
|
|
},
|
|
{
|
|
name: "empty filename",
|
|
filename: "",
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := xos.FileExists(tt.filename)
|
|
require.EqualValues(t, tt.want, got)
|
|
})
|
|
}
|
|
}
|