internal/testhelper/testhelper.go (44 lines of code) (raw):
// Package testhelper consists of various helper functions to setup the test environment.
package testhelper
import (
"fmt"
"os"
"path"
"runtime"
"testing"
"github.com/otiai10/copy"
"github.com/stretchr/testify/require"
)
// TempEnv sets environment variables for the test
func TempEnv(t *testing.T, env map[string]string) {
for key, value := range env {
t.Setenv(key, value)
}
}
// PrepareTestRootDir prepares the test root directory with the test data
func PrepareTestRootDir(t *testing.T) string {
t.Helper()
testRoot := t.TempDir()
t.Cleanup(func() { require.NoError(t, os.RemoveAll(testRoot)) })
require.NoError(t, copyTestData(testRoot))
oldWd, err := os.Getwd()
require.NoError(t, err)
t.Cleanup(func() {
err = os.Chdir(oldWd)
require.NoError(t, err)
})
require.NoError(t, os.Chdir(testRoot))
return testRoot
}
func copyTestData(testRoot string) error {
testDataDir, err := getTestDataDir()
if err != nil {
return err
}
testdata := path.Join(testDataDir, "testroot")
return copy.Copy(testdata, testRoot)
}
func getTestDataDir() (string, error) {
_, currentFile, _, ok := runtime.Caller(0)
if !ok {
return "", fmt.Errorf("could not get caller info")
}
return path.Join(path.Dir(currentFile), "testdata"), nil
}