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  }