From fb6f9434eaf353375b20a13966946d3a230d93d5 Mon Sep 17 00:00:00 2001 From: ewy Date: Wed, 22 Apr 2026 20:54:20 +0200 Subject: testooooo --- env/env.go | 3 ++- env/env_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ web/coverage.html | 29 +++++++++++++++-------------- 3 files changed, 71 insertions(+), 15 deletions(-) create mode 100644 env/env_test.go diff --git a/env/env.go b/env/env.go index 1bf0bd1..844613e 100644 --- a/env/env.go +++ b/env/env.go @@ -20,7 +20,8 @@ func IsEnv(file string) bool { options = append(options, ".env-"+e, ".env."+e, - e+".env") + e+".env", + "."+e+".env") } return slices.Contains(options, file) } diff --git a/env/env_test.go b/env/env_test.go new file mode 100644 index 0000000..865f3cd --- /dev/null +++ b/env/env_test.go @@ -0,0 +1,54 @@ +//go:build test + +package env + +import ( + "github.com/spf13/pflag" + "github.com/stretchr/testify/assert" + "os" + "path/filepath" + "pik/model" + "testing" +) + +func TestIsEnv(t *testing.T) { + err := pflag.Set("env", "test") + assert.NoError(t, err) + files := []string{ + ".env", + ".env-test", + ".env.test", + "test.env", + } + fakes := []string{ + ".env-other", + "unrelated.env", + } + for _, f := range files { + assert.True(t, IsEnv(f)) + } + for _, f := range fakes { + assert.False(t, IsEnv(f)) + } +} + +func TestGet(t *testing.T) { + err := pflag.Set("env", "get") + dir := t.TempDir() + ctx := filepath.Join(dir, ".pik") + err = os.Mkdir(ctx, 0777) + assert.NoError(t, err) + file := filepath.Join(dir, ".get.env") + ctxFile := filepath.Join(dir, ".pik", ".get.env") + src := &model.Source{ + Path: dir, + } + err = os.WriteFile(file, []byte("OUTERKEY=val"), 0666) + assert.NoError(t, err) + err = os.WriteFile(ctxFile, []byte("INNERKEY=otherval"), 0666) + assert.NoError(t, err) + res := Get(src) + assert.Len(t, res, 2) + assert.Contains(t, res, "OUTERKEY=val") + assert.Contains(t, res, "INNERKEY=otherval") +} diff --git a/web/coverage.html b/web/coverage.html index 44d8836..a1ad2d0 100644 --- a/web/coverage.html +++ b/web/coverage.html @@ -61,7 +61,7 @@ - + @@ -433,51 +433,52 @@ import ( "slices" ) -func IsEnv(file string) bool { +func IsEnv(file string) bool { options := []string{ ".env", } - for _, e := range *flags.Env { + for _, e := range *flags.Env { options = append(options, ".env-"+e, ".env."+e, - e+".env") + e+".env", + "."+e+".env") } - return slices.Contains(options, file) + return slices.Contains(options, file) } -func EnvFiles(f fs.FS, p string, deep bool) []string { +func EnvFiles(f fs.FS, p string, deep bool) []string { var result []string dir, err := fs.ReadDir(f, p) if err != nil { return nil } - for _, e := range dir { - if e.IsDir() && slices.Contains(pikdex.Roots, e.Name()) && deep { + for _, e := range dir { + if e.IsDir() && slices.Contains(pikdex.Roots, e.Name()) && deep { result = append(result, EnvFiles(f, e.Name(), false)...) } - if !e.IsDir() && IsEnv(e.Name()) { + if !e.IsDir() && IsEnv(e.Name()) { result = append(result, filepath.Join(p, e.Name())) } } - return result + return result } -func Get(src *model.Source) []string { +func Get(src *model.Source) []string { f := os.DirFS(src.Path) var result []string files := EnvFiles(f, ".", true) - for _, f := range files { + for _, f := range files { res, err := godotenv.Read(filepath.Join(src.Path, f)) if err != nil { spool.Warn("%v", err) continue } - for k, v := range res { + for k, v := range res { result = append(result, k+"="+v) } } - return result + return result } -- cgit v1.3.1