github.com/jfrog/workers-cli@v1.1.0/commands/commands_commons_test.go (about) 1 package commands 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "os" 7 "path" 8 "testing" 9 "text/template" 10 11 "github.com/stretchr/testify/assert" 12 13 "github.com/jfrog/jfrog-cli-core/v2/plugins" 14 "github.com/jfrog/jfrog-cli-core/v2/plugins/components" 15 16 "github.com/stretchr/testify/require" 17 18 "github.com/jfrog/workers-cli/model" 19 ) 20 21 const secretPassword = "P@ssw0rd!" 22 23 func Test_cleanImports(t *testing.T) { 24 tests := []struct { 25 name string 26 source string 27 want string 28 }{ 29 { 30 name: "case 1", 31 source: `import { a } from 'b'; export default async (context: a) => ({ status: 200 })`, 32 want: "export default async (context: a) => ({ status: 200 })", 33 }, 34 { 35 name: "case 2", 36 source: ` 37 import { a } from 'b'; 38 import { c, d } from 'e'; 39 40 export default async (context: a) => ({ status: 200 })`, 41 want: "export default async (context: a) => ({ status: 200 })", 42 }, 43 } 44 45 for _, tt := range tests { 46 t.Run(tt.name, func(t *testing.T) { 47 got := cleanImports(tt.source) 48 assert.Equal(t, tt.want, got) 49 }) 50 } 51 } 52 53 func prepareWorkerDirForTest(t *testing.T) (string, string) { 54 dir, err := os.MkdirTemp("", "worker-*-init") 55 require.NoError(t, err) 56 57 t.Cleanup(func() { 58 _ = os.RemoveAll(dir) 59 }) 60 61 oldPwd, err := os.Getwd() 62 require.NoError(t, err) 63 64 err = os.Chdir(dir) 65 require.NoError(t, err) 66 67 t.Cleanup(func() { 68 require.NoError(t, os.Chdir(oldPwd)) 69 }) 70 71 workerName := path.Base(dir) 72 73 return dir, workerName 74 } 75 76 func generateForTest(t require.TestingT, action string, workerName string, templateName string, skipTests ...bool) string { 77 tpl, err := template.New(templateName).ParseFS(templates, "templates/"+templateName) 78 require.NoErrorf(t, err, "cannot initialize the template for %s", action) 79 80 var out bytes.Buffer 81 err = tpl.Execute(&out, map[string]any{ 82 "Action": action, 83 "WorkerName": workerName, 84 "HasCriteria": model.ActionNeedsCriteria(action), 85 "HasTests": len(skipTests) == 0 || !skipTests[0], 86 }) 87 require.NoError(t, err) 88 89 return out.String() 90 } 91 92 func mustJsonMarshal(t *testing.T, data any) string { 93 out, err := json.Marshal(data) 94 require.NoError(t, err) 95 return string(out) 96 } 97 98 func createTempFileWithContent(t *testing.T, content string) string { 99 file, err := os.CreateTemp("", "wks-cli-*.test") 100 require.NoError(t, err) 101 102 t.Cleanup(func() { 103 // We do not care about this error 104 _ = os.Remove(file.Name()) 105 }) 106 107 _, err = file.Write([]byte(content)) 108 require.NoError(t, err) 109 110 return file.Name() 111 } 112 113 func createCliRunner(t *testing.T, commands ...components.Command) func(args ...string) error { 114 app := components.App{} 115 app.Name = "worker" 116 app.Commands = commands 117 118 runCli := plugins.RunCliWithPlugin(app) 119 120 return func(args ...string) error { 121 oldArgs := os.Args 122 t.Cleanup(func() { 123 os.Args = oldArgs 124 }) 125 os.Args = args 126 return runCli() 127 } 128 } 129 130 func patchManifest(t require.TestingT, applyPatch func(mf *model.Manifest), dir ...string) { 131 mf, err := model.ReadManifest(dir...) 132 require.NoError(t, err) 133 134 applyPatch(mf) 135 136 require.NoError(t, mf.Save(dir...)) 137 } 138 139 func getActionSourceCode(t require.TestingT, actionName string) string { 140 templateName := actionName + ".ts_template" 141 content, err := templates.ReadFile("templates/" + templateName) 142 require.NoError(t, err) 143 return string(content) 144 } 145 146 func mustEncryptSecret(t require.TestingT, secretValue string, password ...string) string { 147 key := secretPassword 148 if len(password) > 0 { 149 key = password[0] 150 } 151 encryptedValue, err := model.EncryptSecret(key, secretValue) 152 require.NoError(t, err) 153 return encryptedValue 154 }