adding unit test for copy

pull/3/head
Marcus Kok 2 years ago
parent c0ad0468b7
commit 8e65760667

@ -10,6 +10,8 @@ import (
"github.com/Marcusk19/bender/tools"
)
var fs = tools.AppFs
func init() {
RootCmd.AddCommand(initCommand)
}
@ -25,7 +27,7 @@ func copyExistingConfigs(programs []string, destRootOpt ...string) {
for _, program := range(programs) {
// TODO: do something here
print(configRoot + program)
err := tools.CopyDir(filepath.Join(configRoot, program), filepath.Join(destRoot, program))
err := tools.CopyDir(fs, filepath.Join(configRoot, program), filepath.Join(destRoot, program))
if err != nil {
log.Fatal(err)
}
@ -37,7 +39,7 @@ func createDotfileStructure(programs []string) {
dotfileRoot := os.Getenv("HOME") + "/.dotfiles/"
for _, program := range(programs) {
fmt.Printf("attempting to create directory %s%s\n", dotfileRoot, program)
if err := os.MkdirAll(dotfileRoot + program, os.ModePerm); err != nil {
if err := fs.MkdirAll(dotfileRoot + program, os.ModePerm); err != nil {
log.Fatal(err)
}
}

@ -6,8 +6,10 @@ require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/testify v1.9.0 // indirect
golang.org/x/text v0.14.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

@ -6,12 +6,16 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

@ -1,3 +1,86 @@
package test
import (
"os"
"testing"
"github.com/Marcusk19/bender/tools"
"github.com/spf13/afero"
)
func init() {
tools.SetTestFs()
}
func TestCopyFile(t *testing.T) {
fs := afero.NewMemMapFs()
fs.MkdirAll("test/src", 0755)
fs.MkdirAll("test/dest", 0755)
err := afero.WriteFile(fs, "test/src/a.txt", []byte("file a"), 0644)
if err != nil {
t.Errorf("problem creating source file: %s", err.Error())
}
err = tools.CopyFile(fs, "test/src/a.txt", "test/dest/a.txt")
if err != nil {
t.Error(err.Error())
}
_, err = fs.Stat("test/dest/a.txt")
if os.IsNotExist(err) {
t.Errorf("expected destination file does not exist")
}
result, err := afero.ReadFile(fs, "test/dest/a.txt")
if err != nil {
t.Error(err.Error())
}
if string(result) != "file a" {
t.Errorf("expected 'file a' got '%s'", string(result))
}
}
func TestCopyDir(t *testing.T) {
fs := afero.NewMemMapFs()
fs.MkdirAll("test/src/dirA", 0755)
fs.MkdirAll("test/dest/", 0755)
fs.Mkdir("test/src/dirA/dirB", 0755)
err := afero.WriteFile(fs, "test/src/dirA/a.txt", []byte("file a"), 0644)
if err != nil {
t.Error(err.Error())
}
err = afero.WriteFile(fs, "test/src/dirA/dirB/b.txt", []byte("file b"), 0644)
if err != nil {
t.Error(err.Error())
}
err = tools.CopyDir(fs, "test/src", "test/dest")
if err != nil {
t.Error(err.Error())
}
result, err := afero.ReadFile(fs, "test/dest/dirA/a.txt")
if err != nil {
t.Error(err.Error())
}
if string(result) != "file a" {
t.Errorf("expected 'file a' got '%s'", string(result))
}
result, err = afero.ReadFile(fs, "test/dest/dirA/dirB/b.txt")
if err != nil {
t.Error(err.Error())
}
if string(result) != "file b" {
t.Errorf("expected 'file b' got '%s'", string(result))
}
}

@ -3,14 +3,13 @@ package tools
import (
"fmt"
"io"
"os"
"log"
"path/filepath"
"github.com/spf13/afero"
)
func CopyFile(srcFile, destFile string) error{
func CopyFile(os afero.Fs, srcFile, destFile string) error{
// helper function to copy files over
log.Printf("copy of %s to %s\n", srcFile, destFile)
sourceFileStat, err := os.Stat(srcFile)
if err != nil {
return err
@ -37,27 +36,27 @@ func CopyFile(srcFile, destFile string) error{
return err
}
func CopyDir(srcDir, destDir string) error {
log.Printf("copying from %s to %s\n", srcDir, destDir)
entries, err := os.ReadDir(srcDir)
func CopyDir(os afero.Fs, srcDir, destDir string) error {
entries, err := afero.ReadDir(os, srcDir)
if err != nil {
return err
}
log.Printf("entries found: %s\n", entries)
for _, entry := range(entries) {
if entry.Type().IsDir() {
err := os.MkdirAll(filepath.Join(destDir, entry.Name()), os.ModePerm)
if entry.IsDir() {
subDir := filepath.Join(srcDir, entry.Name())
destSubDir := filepath.Join(destDir, entry.Name())
err := os.MkdirAll(destSubDir, entry.Mode().Perm())
if err != nil {
return err
}
CopyDir(filepath.Join(srcDir, entry.Name()), filepath.Join(destDir, entry.Name()))
CopyDir(os, subDir, destSubDir)
continue
}
sourcePath := filepath.Join(srcDir, entry.Name())
destPath := filepath.Join(destDir, entry.Name())
err := CopyFile(sourcePath, destPath)
err := CopyFile(os, sourcePath, destPath)
if err != nil {
return err
}

@ -0,0 +1,16 @@
package tools
import (
"log"
"github.com/spf13/afero"
)
var AppFs afero.Fs = afero.NewOsFs()
func SetTestFs() {
log.Print("setting test fs")
testFs := afero.NewMemMapFs()
AppFs = testFs
}
Loading…
Cancel
Save