diff --git a/cmd/cli/main_test.go b/cmd/cli/main_test.go index 2a8d6a1b..a67cfce1 100644 --- a/cmd/cli/main_test.go +++ b/cmd/cli/main_test.go @@ -189,11 +189,11 @@ func testCreateProjectFromTemplate(t *testing.T) { assert.Equal(t, "{\"status\":\"success\",\"projectPath\":\"./testDir\",\"result\":{\"language\":\"unknown\",\"projectType\":\"docker\"}}\n", string(out)) }) t.Run("fail case: create GHE project using good username but bad password"+ - "\ncwctl project create --url --path --username --password ", func(t *testing.T) { + "\ncwctl --json project create --url --path --username --password ", func(t *testing.T) { os.RemoveAll(testDir) defer os.RemoveAll(testDir) - cmd := exec.Command(cwctl, "project", "create", + cmd := exec.Command(cwctl, "--json", "project", "create", "--url="+test.GHERepoURL, "--path="+testDir, "--username="+test.GHEUsername, @@ -201,6 +201,7 @@ func testCreateProjectFromTemplate(t *testing.T) { ) out, err := cmd.CombinedOutput() assert.NotNil(t, err) + assert.Contains(t, string(out), "invalid_git_credentials") assert.Contains(t, string(out), "401 Unauthorized") }) } @@ -390,7 +391,7 @@ func testSuccessfulAddAndRemoveTemplateRepos(t *testing.T) { }) t.Run("fail case: add GHE template repo and create one of its projects using bad password, overriding good stored GHE creds"+ "\ncwctl templates repos add --url --username --password"+ - "\ncwctl project create --url --username --password "+ + "\ncwctl --json project create --url --username --password "+ "\ncwctl templates repos remove --url", func(t *testing.T) { if !test.UsingOwnGHECredentials { t.Skip("skipping this test because you haven't set GitHub credentials needed for this test") @@ -408,7 +409,7 @@ func testSuccessfulAddAndRemoveTemplateRepos(t *testing.T) { assert.Nil(t, err) assert.Contains(t, string(out), test.GHEDevfileURL) - createCmd := exec.Command(cwctl, "project", "create", + createCmd := exec.Command(cwctl, "--json", "project", "create", "--url="+test.GHERepoURL, "--path="+testDir, "--username="+test.GHEUsername, @@ -416,6 +417,7 @@ func testSuccessfulAddAndRemoveTemplateRepos(t *testing.T) { ) createOut, createErr := createCmd.CombinedOutput() assert.NotNil(t, createErr) + assert.Contains(t, string(createOut), "invalid_git_credentials") assert.Contains(t, string(createOut), "401 Unauthorized") removeCmd := exec.Command(cwctl, "templates", "repos", "remove", @@ -427,7 +429,7 @@ func testSuccessfulAddAndRemoveTemplateRepos(t *testing.T) { }) t.Run("fail case: add GHE template repo and create one of its projects using bad personalAccessToken, overriding good stored GHE creds"+ "\ncwctl templates repos add --url --personalAccessToken "+ - "\ncwctl project create --url --personalAccessToken "+ + "\ncwctl --json project create --url --personalAccessToken "+ "\ncwctl templates repos remove --url", func(t *testing.T) { if !test.UsingOwnGHECredentials { t.Skip("skipping this test because you haven't set GitHub credentials needed for this test") @@ -444,13 +446,14 @@ func testSuccessfulAddAndRemoveTemplateRepos(t *testing.T) { assert.Nil(t, err) assert.Contains(t, string(out), test.GHEDevfileURL) - createCmd := exec.Command(cwctl, "project", "create", + createCmd := exec.Command(cwctl, "--json", "project", "create", "--url="+test.GHERepoURL, "--path="+testDir, "--personalAccessToken=badtoken", ) createOut, createErr := createCmd.CombinedOutput() assert.NotNil(t, createErr) + assert.Contains(t, string(createOut), "invalid_git_credentials") assert.Contains(t, string(createOut), "401 Unauthorized") removeCmd := exec.Command(cwctl, "templates", "repos", "remove", diff --git a/pkg/project/create.go b/pkg/project/create.go index 40ace8e9..f17bef11 100644 --- a/pkg/project/create.go +++ b/pkg/project/create.go @@ -72,7 +72,12 @@ func DownloadTemplate(destination, url string, gitCredentials *utils.GitCredenti err := utils.DownloadFromURLThenExtract(url, destination, gitCredentials) if err != nil { - return nil, &ProjectError{errOpCreateProject, err, err.Error()} + errOp := errOpCreateProject + // if 401 error, use invalid credentials error code + if strings.Contains(err.Error(), "401 Unauthorized") { + errOp = errOpInvalidCredentials + } + return nil, &ProjectError{errOp, err, err.Error()} } err = utils.ReplaceInFiles(destination, "[PROJ_NAME_PLACEHOLDER]", projectName) diff --git a/pkg/project/create_test.go b/pkg/project/create_test.go index 5f7a7e69..737f6e3d 100644 --- a/pkg/project/create_test.go +++ b/pkg/project/create_test.go @@ -98,6 +98,7 @@ func TestDownloadTemplate(t *testing.T) { out, err := DownloadTemplate(dest, url, gitCredentials) assert.Nil(t, out) + assert.Equal(t, errOpInvalidCredentials, err.Op) assert.Equal(t, "unexpected status code: 401 Unauthorized", err.Desc) }) t.Run("fail case: download GHE template using bad personalAccessToken)", func(t *testing.T) { @@ -114,6 +115,7 @@ func TestDownloadTemplate(t *testing.T) { out, err := DownloadTemplate(dest, url, gitCredentials) assert.Nil(t, out) + assert.Equal(t, errOpInvalidCredentials, err.Op) assert.Equal(t, "unexpected status code: 401 Unauthorized", err.Desc) }) } diff --git a/pkg/project/project_utils.go b/pkg/project/project_utils.go index 312f428d..a896c531 100644 --- a/pkg/project/project_utils.go +++ b/pkg/project/project_utils.go @@ -46,6 +46,7 @@ const ( errOpSync = "proj_sync" errOpSyncRef = "proj_sync_ref" errOpWriteCwSettings = "proj_write_cw_settings" + errOpInvalidCredentials = "invalid_git_credentials" ) const (