github.com/kick-project/maker@v1.1.1-0.20211031110251-7b74922fa493/internal/services/dotenv/dotenv_test.go (about) 1 package dotenv_test 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/kick-project/maker/internal/resources/errs" 11 "github.com/kick-project/maker/internal/resources/exit" 12 "github.com/kick-project/maker/internal/resources/logger" 13 "github.com/kick-project/maker/internal/resources/testtools" 14 "github.com/kick-project/maker/internal/services/dotenv" 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func makeDotenv() *dotenv.Dotenv { 19 exitHandler := &exit.Handler{ 20 Mode: exit.MPanic, 21 } 22 logHandler := logger.New(os.Stderr, "ERROR", log.Ldate|log.Ltime|log.Lshortfile|log.Lmsgprefix, logger.InfoLevel, exitHandler) 23 errHandler := errs.New(exitHandler, logHandler) 24 25 d := dotenv.Defaults( 26 &dotenv.Dotenv{ 27 Errs: errHandler, 28 Exit: exitHandler, 29 }, 30 ) 31 32 return d 33 } 34 35 func pathEnvfile() string { 36 return filepath.Join(testtools.FixtureDir(), "menu", ".env") 37 } 38 39 func pathMakeFile() string { 40 return filepath.Join(testtools.FixtureDir(), "menu", "Makefile") 41 } 42 43 func TestDotenv_Load(t *testing.T) { 44 d := makeDotenv() 45 os.Setenv("MAKER_GLOBAL", "From global") 46 env1 := filepath.Join(testtools.FixtureDir(), "envfiles", ".env1") 47 env2 := filepath.Join(testtools.FixtureDir(), "envfiles", ".env2") 48 varfiles := fmt.Sprintf("%s,%s", env1, env2) 49 d.Load(varfiles) 50 51 assert.Equal(t, os.Getenv("MAKER_GLOBAL"), "From global") 52 assert.Equal(t, os.Getenv("MAKER_VAR1"), "From .env1") 53 assert.Equal(t, os.Getenv("MAKER_VAR2"), "From .env2") 54 } 55 56 func TestDotenv_WrapTarget(t *testing.T) { 57 menuDir := filepath.Join(testtools.FixtureDir(), "menu") 58 err := os.Chdir(menuDir) 59 if err != nil { 60 t.Error(err) 61 } 62 d := makeDotenv() 63 assert.NotPanics(t, func() { 64 d.WrapTarget(pathEnvfile(), pathMakeFile(), "target1") 65 }) 66 } 67 68 func TestDotenv_WrapTarget_NoTarget(t *testing.T) { 69 menuDir := filepath.Join(testtools.FixtureDir(), "menu") 70 err := os.Chdir(menuDir) 71 if err != nil { 72 t.Error(err) 73 } 74 d := makeDotenv() 75 assert.Panics(t, func() { 76 d.WrapTarget(pathEnvfile(), "Makefile", "notarget") 77 }) 78 } 79 80 func TestDotenv_WrapTarget_NoMakefile(t *testing.T) { 81 noMakefile := filepath.Join(testtools.FixtureDir(), "missingmake") 82 err := os.Chdir(noMakefile) 83 if err != nil { 84 t.Error(err) 85 } 86 d := makeDotenv() 87 assert.Panics(t, func() { 88 d.WrapTarget(pathEnvfile(), "Makefile", "notarget") 89 }) 90 }