github.com/jenkins-x/jx/v2@v2.1.155/pkg/cmd/edit/requirements/requirements_test.go (about) 1 // +build unit 2 3 package requirements_test 4 5 import ( 6 "fmt" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 15 "github.com/jenkins-x/jx/v2/pkg/cmd/clients/fake" 16 "github.com/jenkins-x/jx/v2/pkg/cmd/edit/requirements" 17 "github.com/jenkins-x/jx/v2/pkg/cmd/opts" 18 "github.com/jenkins-x/jx/v2/pkg/config" 19 "github.com/jenkins-x/jx/v2/pkg/util" 20 ) 21 22 func TestCmdEditRequirements(t *testing.T) { 23 t.Parallel() 24 25 type testData struct { 26 name string 27 args []string 28 callback func(t *testing.T, req *config.RequirementsConfig) 29 fail bool 30 initialFile string 31 } 32 33 gitOpsEnabled := filepath.Join("test_data", "gitops-enabled.yml") 34 tests := []testData{ 35 { 36 name: "bbs", 37 args: []string{"--git-kind=bitbucketserver"}, 38 callback: func(t *testing.T, req *config.RequirementsConfig) { 39 assert.Equal(t, "bitbucketserver", req.Cluster.GitKind, "req.Cluster.GitKind") 40 assert.True(t, req.GitOps, "req.GitOps") 41 }, 42 initialFile: gitOpsEnabled, 43 }, 44 { 45 name: "enable-gitops", 46 args: []string{"--gitops"}, 47 callback: func(t *testing.T, req *config.RequirementsConfig) { 48 assert.True(t, req.GitOps, "req.GitOps") 49 }, 50 initialFile: gitOpsEnabled, 51 }, 52 { 53 name: "disable-gitops", 54 args: []string{"--gitops=false"}, 55 callback: func(t *testing.T, req *config.RequirementsConfig) { 56 assert.False(t, req.GitOps, "req.GitOps") 57 }, 58 initialFile: gitOpsEnabled, 59 }, 60 { 61 name: "bucket-logs", 62 args: []string{"--bucket-logs", "gs://foo"}, 63 callback: func(t *testing.T, req *config.RequirementsConfig) { 64 assert.Equal(t, "gs://foo", req.Storage.Logs.URL, "req.Storage.Logs.URL") 65 assert.True(t, req.Storage.Logs.Enabled, "req.Storage.Logs.Enabled") 66 }, 67 initialFile: gitOpsEnabled, 68 }, 69 { 70 name: "bad-git-kind", 71 args: []string{"--git-kind=gitlob"}, 72 fail: true, 73 initialFile: gitOpsEnabled, 74 }, 75 { 76 name: "bad-secret", 77 args: []string{"--secret=vaulx"}, 78 fail: true, 79 initialFile: gitOpsEnabled, 80 }, 81 } 82 83 commonOpts := opts.NewCommonOptionsWithFactory(fake.NewFakeFactory()) 84 commonOpts.Out = os.Stdout 85 commonOpts.Err = os.Stderr 86 87 tmpDir, err := ioutil.TempDir("", "jx-cmd-req-") 88 require.NoError(t, err, "failed to create temp dir") 89 require.DirExists(t, tmpDir, "could not create temp dir for running tests") 90 91 for i, tt := range tests { 92 if tt.name == "" { 93 tt.name = fmt.Sprintf("test%d", i) 94 } 95 t.Logf("running test %s", tt.name) 96 dir := filepath.Join(tmpDir, tt.name) 97 98 err = os.MkdirAll(dir, util.DefaultWritePermissions) 99 require.NoError(t, err, "failed to create dir %s", dir) 100 101 localReqFile := filepath.Join(dir, config.RequirementsConfigFileName) 102 if tt.initialFile != "" { 103 err = util.CopyFile(tt.initialFile, localReqFile) 104 require.NoError(t, err, "failed to copy %s to %s", tt.initialFile, localReqFile) 105 require.FileExists(t, localReqFile, "file should have been copied") 106 } 107 108 cmd := requirements.NewCmdEditRequirements(&commonOpts) 109 args := append(tt.args, "--dir", dir) 110 111 err := cmd.ParseFlags(args) 112 require.NoError(t, err, "failed to parse arguments %#v for test %", args, tt.name) 113 114 old := os.Args 115 os.Args = args 116 err = cmd.RunE(cmd, args) 117 if err != nil { 118 if tt.fail { 119 t.Logf("got exected failure for test %s: %s", tt.name, err.Error()) 120 continue 121 } 122 t.Errorf("test %s reported error: %s", tt.name, err) 123 continue 124 } 125 os.Args = old 126 127 // now lets parse the requirements 128 file := localReqFile 129 require.FileExists(t, file, "should have generated the requirements file") 130 131 req, _, err := config.LoadRequirementsConfig(dir, config.DefaultFailOnValidationError) 132 require.NoError(t, err, "failed to load requirements from dir %s", dir) 133 134 if tt.callback != nil { 135 tt.callback(t, req) 136 } 137 138 } 139 140 }