github.com/drud/ddev@v1.21.5-alpha1.0.20230226034409-94fcc4b94453/pkg/ddevapp/envfile_test.go (about) 1 package ddevapp_test 2 3 import ( 4 "github.com/drud/ddev/pkg/ddevapp" 5 "github.com/drud/ddev/pkg/fileutil" 6 asrt "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 "os" 9 "path/filepath" 10 "strings" 11 "testing" 12 ) 13 14 func TestWriteProjectEnvFile(t *testing.T) { 15 assert := asrt.New(t) 16 17 origDir, _ := os.Getwd() 18 19 site := TestSites[0] 20 app, err := ddevapp.NewApp(site.Dir, false) 21 require.NoError(t, err) 22 23 t.Cleanup(func() { 24 _ = os.RemoveAll(app.GetConfigPath(".env")) 25 }) 26 27 testEnvFiles, err := fileutil.ListFilesInDirFullPath(filepath.Join(origDir, "testdata", t.Name())) 28 require.NoError(t, err) 29 appEnvFile := filepath.Join(app.AppRoot, ".env") 30 for _, envFileName := range testEnvFiles { 31 _ = os.RemoveAll(appEnvFile) 32 err = fileutil.CopyFile(envFileName, appEnvFile) 33 require.NoError(t, err) 34 readEnvMap, readEnvText, err := ddevapp.ReadProjectEnvFile(appEnvFile) 35 require.NoError(t, err) 36 _ = readEnvMap 37 38 // Override with some new items 39 writeEnvMap := map[string]string{ 40 "DB_VAL_DIDNOTEXIST": "new_db_val_didnotexist", 41 "DB_HOST": "newdbhost", 42 "DB_DATABASE": "newdbdatabase", 43 "DB_USERNAME": "newdbusername", 44 "DB_PASSWORD": "newdbpassword", 45 "DB_CONNECTION": "new_mysql://root:root@somehost/somedb", 46 } 47 err = ddevapp.WriteProjectEnvFile(appEnvFile, writeEnvMap, readEnvText) 48 require.NoError(t, err) 49 50 postWriteEnvMap, postWriteEnvText, err := ddevapp.ReadProjectEnvFile(appEnvFile) 51 require.NoError(t, err) 52 53 // Make sure that the values we intended to change got changed 54 for k := range writeEnvMap { 55 assert.Equal(writeEnvMap[k], postWriteEnvMap[k], "Expected values for %s to match but writeEnvMap[%s]='%s' and postWriteEnvMap[%s]='%s' (envfile=%s)", k, k, writeEnvMap[k], k, postWriteEnvMap[k], envFileName) 56 } 57 58 // Now examine all values that should not have been changed 59 for k := range readEnvMap { 60 if _, ok := writeEnvMap[k]; ok { 61 // If we intended to write the var, don't test, as we deliberately overwrite and tested above. 62 continue 63 } 64 assert.Equal(readEnvMap[k], postWriteEnvMap[k], "Expected (unchanged) values for %s to match but readEnvMap[%s]='%s' and postWriteEnvMap[%s]='%s' (envfile=%s)", k, k, readEnvMap[k], k, postWriteEnvMap[k], envFileName) 65 } 66 67 // Look for comments that should have been preserved 68 origLines := strings.Split(readEnvText, "\n") 69 newLines := strings.Split(postWriteEnvText, "\n") 70 for i, l := range origLines { 71 if strings.HasPrefix(l, `#`) { 72 assert.Equal(l, newLines[i], "comment '%s' in original .env expected in revised .env but doesn't match (envfile=%s)", l, envFileName) 73 } 74 } 75 76 } 77 }