github.com/bitrise-io/go-steputils/v2@v2.0.0-alpha.30/export/export_test.go (about) 1 package export 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "strings" 8 "testing" 9 10 "github.com/bitrise-io/go-utils/v2/command" 11 "github.com/bitrise-io/go-utils/v2/env" 12 pathutil2 "github.com/bitrise-io/go-utils/v2/pathutil" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestExportOutput(t *testing.T) { 17 envmanStorePath := setupEnvman(t) 18 19 e := NewExporter(command.NewFactory(env.NewRepository())) 20 require.NoError(t, e.ExportOutput("my_key", "my value")) 21 22 requireEnvmanContainsValueForKey(t, "my_key", "my value", envmanStorePath) 23 } 24 25 func TestExportOutputFile(t *testing.T) { 26 tmpDir := t.TempDir() 27 28 envmanStorePath := setupEnvman(t) 29 30 sourcePath := filepath.Join(tmpDir, "test_file_source") 31 destinationPath := filepath.Join(tmpDir, "test_file_destination") 32 require.NoError(t, ioutil.WriteFile(sourcePath, []byte("hello"), 0700)) 33 34 e := NewExporter(command.NewFactory(env.NewRepository())) 35 require.NoError(t, e.ExportOutputFile("my_key", sourcePath, destinationPath)) 36 37 requireEnvmanContainsValueForKey(t, "my_key", destinationPath, envmanStorePath) 38 } 39 40 func TestZipDirectoriesAndExportOutput(t *testing.T) { 41 tmpDir := t.TempDir() 42 43 envmanStorePath := setupEnvman(t) 44 45 sourceA := filepath.Join(tmpDir, "sourceA") 46 require.NoError(t, os.MkdirAll(sourceA, 0777)) 47 48 sourceB := filepath.Join(tmpDir, "sourceB") 49 require.NoError(t, os.MkdirAll(sourceB, 0777)) 50 51 destinationZip := filepath.Join(tmpDir, "destination.zip") 52 53 key := "EXPORTED_ZIP_PATH" 54 e := NewExporter(command.NewFactory(env.NewRepository())) 55 require.NoError(t, e.ExportOutputFilesZip(key, []string{sourceA, sourceB}, destinationZip)) 56 57 // destination should exist 58 exist, err := pathutil2.NewPathChecker().IsPathExists(destinationZip) 59 require.NoError(t, err) 60 require.Equal(t, true, exist, tmpDir) 61 62 // destination should be exported 63 requireEnvmanContainsValueForKey(t, key, destinationZip, envmanStorePath) 64 } 65 66 func TestZipFilesAndExportOutput(t *testing.T) { 67 tmpDir := t.TempDir() 68 69 envmanStorePath := setupEnvman(t) 70 71 sourceDir := filepath.Join(tmpDir, "source") 72 require.NoError(t, os.MkdirAll(sourceDir, 0777)) 73 74 var sourceFilePaths []string 75 for _, name := range []string{"A", "B", "C"} { 76 sourceFile := filepath.Join(sourceDir, "sourceFile"+name) 77 require.NoError(t, ioutil.WriteFile(sourceFile, []byte(name), 0777)) 78 79 sourceFilePaths = append(sourceFilePaths, sourceFile) 80 } 81 82 destinationZip := filepath.Join(tmpDir, "destination.zip") 83 84 key := "EXPORTED_ZIP_PATH" 85 e := NewExporter(command.NewFactory(env.NewRepository())) 86 require.NoError(t, e.ExportOutputFilesZip(key, sourceFilePaths, destinationZip)) 87 88 // destination should exist 89 exist, err := pathutil2.NewPathChecker().IsPathExists(destinationZip) 90 require.NoError(t, err) 91 require.Equal(t, true, exist, tmpDir) 92 93 // destination should be exported 94 requireEnvmanContainsValueForKey(t, key, destinationZip, envmanStorePath) 95 } 96 97 func TestZipMixedFilesAndFoldersAndExportOutput(t *testing.T) { 98 tmpDir := t.TempDir() 99 100 _ = setupEnvman(t) 101 102 sourceDir := filepath.Join(tmpDir, "source") 103 require.NoError(t, os.MkdirAll(sourceDir, 0777)) 104 105 var sourceFilePaths []string 106 for _, name := range []string{"A", "B", "C"} { 107 sourceFile := filepath.Join(sourceDir, "sourceFile"+name) 108 require.NoError(t, ioutil.WriteFile(sourceFile, []byte(name), 0777)) 109 110 sourceFilePaths = append(sourceFilePaths, sourceFile) 111 } 112 113 extraDir := filepath.Join(sourceDir, "empty-folder") 114 require.NoError(t, os.MkdirAll(extraDir, 0777)) 115 116 sourceFilePaths = append(sourceFilePaths, extraDir) 117 118 destinationZip := filepath.Join(tmpDir, "destination.zip") 119 120 e := NewExporter(command.NewFactory(env.NewRepository())) 121 require.Error(t, e.ExportOutputFilesZip("EXPORTED_ZIP_PATH", sourceFilePaths, destinationZip)) 122 } 123 124 func requireEnvmanContainsValueForKey(t *testing.T, key, value, envmanStorePath string) { 125 b, err := ioutil.ReadFile(envmanStorePath) 126 require.NoError(t, err) 127 envstoreContent := string(b) 128 129 t.Logf("envstoreContent: %s\n", envstoreContent) 130 require.Equal(t, true, strings.Contains(envstoreContent, "- "+key+": "+value), envstoreContent) 131 } 132 133 func setupEnvman(t *testing.T) string { 134 originalWorkDir, err := os.Getwd() 135 require.NoError(t, err) 136 137 tmpDir := t.TempDir() 138 err = os.Chdir(tmpDir) 139 require.NoError(t, err) 140 141 t.Cleanup(func() { 142 err = os.Chdir(originalWorkDir) 143 require.NoError(t, err) 144 }) 145 require.NoError(t, err) 146 147 tmpEnvStorePth := filepath.Join(tmpDir, ".envstore.yml") 148 require.NoError(t, ioutil.WriteFile(tmpEnvStorePth, []byte(""), 0777)) 149 150 t.Setenv("ENVMAN_ENVSTORE_PATH", tmpEnvStorePth) 151 152 return tmpEnvStorePth 153 }