Skip to content

Commit

Permalink
fixed a few issues with gopaths
Browse files Browse the repository at this point in the history
  • Loading branch information
markbates committed Mar 19, 2018
1 parent c823918 commit 1da02db
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 81 deletions.
25 changes: 4 additions & 21 deletions envy.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,18 +172,7 @@ func Temp(f func()) {
}

func GoPath() string {
root, _ := os.Getwd()
paths := GoPaths()

for i := 0; i < len(paths); i++ {
if strings.HasPrefix(root, filepath.Join(paths[i], "src")) {
return paths[i]
}
}
if len(paths) > 0 {
return paths[0]
}
return ""
return Get("GOPATH", "")
}

// GoPaths returns all possible GOPATHS that are set.
Expand All @@ -197,15 +186,9 @@ func GoPaths() []string {

func CurrentPackage() string {
pwd, _ := os.Getwd()
pwd = strings.Trim(filepath.ToSlash(pwd), "/")
for _, gp := range GoPaths() {
gp := strings.Trim(filepath.ToSlash(gp), "/") + "/src/"
if strings.HasPrefix(pwd, gp) {
pwd = pwd[len(gp):]
break
}
}
return pwd
pwd = strings.TrimPrefix(pwd, filepath.Join(GoPath(), "src"))
pwd = strings.TrimPrefix(pwd, string(filepath.Separator))
return filepath.ToSlash(pwd)
}

func Environ() []string {
Expand Down
131 changes: 71 additions & 60 deletions envy_test.go
Original file line number Diff line number Diff line change
@@ -1,47 +1,46 @@
package envy_test
package envy

import (
"os"
"runtime"
"testing"

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

func Test_Get(t *testing.T) {
r := require.New(t)
r.NotZero(os.Getenv("GOPATH"))
r.Equal(os.Getenv("GOPATH"), envy.Get("GOPATH", "foo"))
r.Equal("bar", envy.Get("IDONTEXIST", "bar"))
r.Equal(os.Getenv("GOPATH"), Get("GOPATH", "foo"))
r.Equal("bar", Get("IDONTEXIST", "bar"))
}

func Test_MustGet(t *testing.T) {
r := require.New(t)
r.NotZero(os.Getenv("GOPATH"))
v, err := envy.MustGet("GOPATH")
v, err := MustGet("GOPATH")
r.NoError(err)
r.Equal(os.Getenv("GOPATH"), v)

_, err = envy.MustGet("IDONTEXIST")
_, err = MustGet("IDONTEXIST")
r.Error(err)
}

func Test_Set(t *testing.T) {
r := require.New(t)
_, err := envy.MustGet("FOO")
_, err := MustGet("FOO")
r.Error(err)

envy.Set("FOO", "foo")
r.Equal("foo", envy.Get("FOO", "bar"))
Set("FOO", "foo")
r.Equal("foo", Get("FOO", "bar"))
}

func Test_MustSet(t *testing.T) {
r := require.New(t)

r.Zero(os.Getenv("FOO"))

err := envy.MustSet("FOO", "BAR")
err := MustSet("FOO", "BAR")
r.NoError(err)

r.Equal("BAR", os.Getenv("FOO"))
Expand All @@ -50,131 +49,143 @@ func Test_MustSet(t *testing.T) {
func Test_Temp(t *testing.T) {
r := require.New(t)

_, err := envy.MustGet("BAR")
_, err := MustGet("BAR")
r.Error(err)

envy.Temp(func() {
envy.Set("BAR", "foo")
r.Equal("foo", envy.Get("BAR", "bar"))
_, err = envy.MustGet("BAR")
Temp(func() {
Set("BAR", "foo")
r.Equal("foo", Get("BAR", "bar"))
_, err = MustGet("BAR")
r.NoError(err)
})

_, err = envy.MustGet("BAR")
_, err = MustGet("BAR")
r.Error(err)
}

func Test_GoPath(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
envy.Set("GOPATH", "/foo")
r.Equal("/foo", envy.GoPath())
Temp(func() {
Set("GOPATH", "/foo")
r.Equal("/foo", GoPath())
})
}

func Test_GoPaths(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
Temp(func() {
if runtime.GOOS == "windows" {
envy.Set("GOPATH", "/foo;/bar")
Set("GOPATH", "/foo;/bar")
} else {
envy.Set("GOPATH", "/foo:/bar")
Set("GOPATH", "/foo:/bar")
}
r.Equal([]string{"/foo", "/bar"}, envy.GoPaths())
r.Equal([]string{"/foo", "/bar"}, GoPaths())
})
}

func Test_CurrentPackage(t *testing.T) {
r := require.New(t)
r.Equal("github.com/gobuffalo/envy", envy.CurrentPackage())
r.Equal("github.com/gobuffalo/envy", CurrentPackage())
}

// Env files loading
func Test_LoadEnvLoadsEnvFile(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
r.Equal("root", envy.Get("DIR", ""))
r.Equal("none", envy.Get("FLAVOUR", ""))
r.Equal("false", envy.Get("INSIDE_FOLDER", ""))
Temp(func() {
r.Equal("root", Get("DIR", ""))
r.Equal("none", Get("FLAVOUR", ""))
r.Equal("false", Get("INSIDE_FOLDER", ""))
})
}

func Test_LoadDefaultEnvWhenNoArgsPassed(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
err := envy.Load()
Temp(func() {
err := Load()
r.NoError(err)

r.Equal("root", envy.Get("DIR", ""))
r.Equal("none", envy.Get("FLAVOUR", ""))
r.Equal("false", envy.Get("INSIDE_FOLDER", ""))
r.Equal("root", Get("DIR", ""))
r.Equal("none", Get("FLAVOUR", ""))
r.Equal("false", Get("INSIDE_FOLDER", ""))
})
}

func Test_DoNotLoadDefaultEnvWhenArgsPassed(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
err := envy.Load("test_env/.env")
Temp(func() {
err := Load("test_env/.env")
r.NoError(err)

r.Equal("test_env", envy.Get("DIR", ""))
r.Equal("none", envy.Get("FLAVOUR", ""))
r.Equal("true", envy.Get("INSIDE_FOLDER", ""))
r.Equal("test_env", Get("DIR", ""))
r.Equal("none", Get("FLAVOUR", ""))
r.Equal("true", Get("INSIDE_FOLDER", ""))
})
}

func Test_OverloadParams(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
err := envy.Load("test_env/.env.test", "test_env/.env.prod")
Temp(func() {
err := Load("test_env/.env.test", "test_env/.env.prod")
r.NoError(err)

r.Equal("production", envy.Get("FLAVOUR", ""))
r.Equal("production", Get("FLAVOUR", ""))
})
}

func Test_ErrorWhenSingleFileLoadDoesNotExist(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
delete(envy.Map(), "FLAVOUR")
err := envy.Load(".env.fake")
Temp(func() {
delete(Map(), "FLAVOUR")
err := Load(".env.fake")

r.Error(err)
r.Equal("FAILED", envy.Get("FLAVOUR", "FAILED"))
r.Equal("FAILED", Get("FLAVOUR", "FAILED"))
})
}

func Test_KeepEnvWhenFileInListFails(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
err := envy.Load(".env", ".env.FAKE")
Temp(func() {
err := Load(".env", ".env.FAKE")
r.Error(err)
r.Equal("none", envy.Get("FLAVOUR", "FAILED"))
r.Equal("root", envy.Get("DIR", "FAILED"))
r.Equal("none", Get("FLAVOUR", "FAILED"))
r.Equal("root", Get("DIR", "FAILED"))
})
}

func Test_KeepEnvWhenSecondLoadFails(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
err := envy.Load(".env")
Temp(func() {
err := Load(".env")
r.NoError(err)
r.Equal("none", envy.Get("FLAVOUR", "FAILED"))
r.Equal("root", envy.Get("DIR", "FAILED"))
r.Equal("none", Get("FLAVOUR", "FAILED"))
r.Equal("root", Get("DIR", "FAILED"))

err = envy.Load(".env.FAKE")
err = Load(".env.FAKE")

r.Equal("none", envy.Get("FLAVOUR", "FAILED"))
r.Equal("root", envy.Get("DIR", "FAILED"))
r.Equal("none", Get("FLAVOUR", "FAILED"))
r.Equal("root", Get("DIR", "FAILED"))
})
}

func Test_StopLoadingWhenFileInListFails(t *testing.T) {
r := require.New(t)
envy.Temp(func() {
err := envy.Load(".env", ".env.FAKE", "test_env/.env.prod")
Temp(func() {
err := Load(".env", ".env.FAKE", "test_env/.env.prod")
r.Error(err)
r.Equal("none", envy.Get("FLAVOUR", "FAILED"))
r.Equal("root", envy.Get("DIR", "FAILED"))
r.Equal("none", Get("FLAVOUR", "FAILED"))
r.Equal("root", Get("DIR", "FAILED"))
})
}

func Test_GOPATH_Not_Set(t *testing.T) {
r := require.New(t)

Temp(func() {
MustSet("GOPATH", "/go")
loadEnv()
r.Equal("/go", Get("GOPATH", "notset"))
})

r.Equal("github.com/gobuffalo/envy", CurrentPackage())
}

0 comments on commit 1da02db

Please sign in to comment.