github.com/jfrog/jfrog-cli-platform-services@v1.2.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/jfrog-cli-platform-services/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  }