tweak tests and add extra validations
This commit is contained in:
parent
3c8e163e8b
commit
137053399e
3 changed files with 162 additions and 18 deletions
|
|
@ -442,11 +442,12 @@ func InitRepoHostname(repo *Repository, hostname string) *Repository {
|
|||
|
||||
// RepositoryV3 is the repository result from GitHub API v3
|
||||
type repositoryV3 struct {
|
||||
NodeID string
|
||||
NodeID string `json:"node_id"`
|
||||
Name string
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
Owner struct {
|
||||
Login string
|
||||
ID string
|
||||
}
|
||||
Private bool
|
||||
HTMLUrl string `json:"html_url"`
|
||||
|
|
@ -1133,8 +1134,10 @@ func CreateRepoTransformToV4(apiClient *Client, hostname string, method string,
|
|||
CreatedAt: responsev3.CreatedAt,
|
||||
Owner: RepositoryOwner{
|
||||
Login: responsev3.Owner.Login,
|
||||
ID: responsev3.Owner.ID,
|
||||
},
|
||||
hostname: responsev3.hostname,
|
||||
ID: responsev3.NodeID,
|
||||
hostname: hostname,
|
||||
URL: responsev3.HTMLUrl,
|
||||
IsPrivate: responsev3.Private,
|
||||
}, nil
|
||||
|
|
|
|||
|
|
@ -98,6 +98,10 @@ func NewCmdCreate(f *cmdutil.Factory, runF func(*CreateOptions) error) *cobra.Co
|
|||
return &cmdutil.FlagError{Err: errors.New(".gitignore and license templates are added only when a specific repository name is passed")}
|
||||
}
|
||||
|
||||
if opts.Template != "" && (opts.GitIgnoreTemplate != "" || opts.LicenseTemplate != "") {
|
||||
return &cmdutil.FlagError{Err: errors.New(".gitignore and license templates are not added when template is provided")}
|
||||
}
|
||||
|
||||
if !opts.IO.CanPrompt() {
|
||||
if opts.Name == "" {
|
||||
return &cmdutil.FlagError{Err: errors.New("name argument required when not running interactively")}
|
||||
|
|
@ -217,7 +221,8 @@ func createRun(opts *CreateOptions) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if gitIgnoreTemplate == "" {
|
||||
// GitIgnore and License templates not added when a template repository is passed.
|
||||
if gitIgnoreTemplate == "" && opts.Template == "" && opts.IO.CanPrompt() {
|
||||
gt, err := interactiveGitIgnore(api.NewClientFromHTTP(httpClient), host)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -225,7 +230,7 @@ func createRun(opts *CreateOptions) error {
|
|||
gitIgnoreTemplate = gt
|
||||
}
|
||||
|
||||
if repoLicenseTemplate == "" {
|
||||
if repoLicenseTemplate == "" && opts.Template == "" && opts.IO.CanPrompt() {
|
||||
lt, err := interactiveLicense(api.NewClientFromHTTP(httpClient), host)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -243,6 +248,7 @@ func createRun(opts *CreateOptions) error {
|
|||
return fmt.Errorf("argument error: %w", err)
|
||||
}
|
||||
} else {
|
||||
fmt.Println("came inside")
|
||||
host, err := cfg.DefaultHost()
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package create
|
|||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
|
@ -98,6 +97,21 @@ func TestRepoCreate(t *testing.T) {
|
|||
Value: "PRIVATE",
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addGitIgnore",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addLicense",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "confirmSubmit",
|
||||
|
|
@ -231,6 +245,21 @@ func TestRepoCreate_org(t *testing.T) {
|
|||
Value: "PRIVATE",
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addGitIgnore",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addLicense",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "confirmSubmit",
|
||||
|
|
@ -307,6 +336,21 @@ func TestRepoCreate_orgWithTeam(t *testing.T) {
|
|||
Value: "PRIVATE",
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addGitIgnore",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addLicense",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "confirmSubmit",
|
||||
|
|
@ -458,13 +502,6 @@ func TestRepoCreate_withoutNameArg(t *testing.T) {
|
|||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addGitIgnoreLicense",
|
||||
Value: false,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "confirmSubmit",
|
||||
|
|
@ -504,7 +541,7 @@ func TestRepoCreate_withoutNameArg(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestRepoCreate_WithGitIgnoreLicense(t *testing.T) {
|
||||
func TestRepoCreate_WithGitIgnore(t *testing.T) {
|
||||
cs, cmdTeardown := run.Stub()
|
||||
defer cmdTeardown(t)
|
||||
|
||||
|
|
@ -561,7 +598,7 @@ func TestRepoCreate_WithGitIgnoreLicense(t *testing.T) {
|
|||
httpmock.StringResponse(`{"name":"REPO", "owner":{"login": "OWNER"}, "html_url":"https://github.com/OWNER/REPO"}`))
|
||||
httpClient := &http.Client{Transport: reg}
|
||||
|
||||
output, err := runCommand(httpClient, "REPO", true)
|
||||
output, err := runCommand(httpClient, "OWNER/REPO", true)
|
||||
if err != nil {
|
||||
t.Errorf("error running command `repo create`: %v", err)
|
||||
}
|
||||
|
|
@ -576,13 +613,111 @@ func TestRepoCreate_WithGitIgnoreLicense(t *testing.T) {
|
|||
LicenseTemplate string
|
||||
}
|
||||
|
||||
if len(reg.Requests) != 2 {
|
||||
t.Fatalf("expected 2 HTTP request, got %d", len(reg.Requests))
|
||||
if len(reg.Requests) != 3 {
|
||||
t.Fatalf("expected 3 HTTP request, got %d", len(reg.Requests))
|
||||
}
|
||||
|
||||
bodyBytes, _ := ioutil.ReadAll(reg.Requests[1].Body)
|
||||
bodyBytes, _ := ioutil.ReadAll(reg.Requests[2].Body)
|
||||
_ = json.Unmarshal(bodyBytes, &reqBody)
|
||||
if repoName := reqBody.Name; repoName != "REPO" {
|
||||
t.Errorf("expected %q, got %q", "REPO", repoName)
|
||||
}
|
||||
if repoVisibility := reqBody.Visibility; repoVisibility != "PRIVATE" {
|
||||
t.Errorf("expected %q, got %q", "PRIVATE", repoVisibility)
|
||||
}
|
||||
if ownerId := reqBody.OwnerId; ownerId != "OWNERID" {
|
||||
t.Errorf("expected %q, got %q", "OWNERID", ownerId)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepoCreate_WithBothGitIgnoreLicense(t *testing.T) {
|
||||
cs, cmdTeardown := run.Stub()
|
||||
defer cmdTeardown(t)
|
||||
|
||||
cs.Register(`git remote add -f origin https://github\.com/OWNER/REPO\.git`, 0, "")
|
||||
cs.Register(`git rev-parse --show-toplevel`, 0, "")
|
||||
|
||||
as, surveyTearDown := prompt.InitAskStubber()
|
||||
defer surveyTearDown()
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "repoVisibility",
|
||||
Value: "PRIVATE",
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addGitIgnore",
|
||||
Value: true,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "chooseGitIgnore",
|
||||
Value: "Go",
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "addLicense",
|
||||
Value: true,
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "chooseLicense",
|
||||
Value: "GNU Affero General Public License v3.0",
|
||||
},
|
||||
})
|
||||
|
||||
as.Stub([]*prompt.QuestionStub{
|
||||
{
|
||||
Name: "confirmSubmit",
|
||||
Value: true,
|
||||
},
|
||||
})
|
||||
|
||||
reg := &httpmock.Registry{}
|
||||
reg.Register(
|
||||
httpmock.REST("GET", "users/OWNER"),
|
||||
httpmock.StringResponse(`{ "node_id": "OWNERID" }`))
|
||||
reg.Register(
|
||||
httpmock.REST("GET", "gitignore/templates"),
|
||||
httpmock.StringResponse(`["Actionscript","Android","AppceleratorTitanium","Autotools","Bancha","C","C++","Go"]`))
|
||||
reg.Register(
|
||||
httpmock.REST("GET", "licenses"),
|
||||
httpmock.StringResponse(`[{"key": "mit","name": "MIT License"},{"key": "lgpl-3.0","name": "GNU Lesser General Public License v3.0"}]`))
|
||||
reg.Register(
|
||||
httpmock.REST("POST", "user/repos"),
|
||||
httpmock.StringResponse(`{"name":"REPO", "owner":{"login": "OWNER"}, "html_url":"https://github.com/OWNER/REPO"}`))
|
||||
httpClient := &http.Client{Transport: reg}
|
||||
|
||||
output, err := runCommand(httpClient, "OWNER/REPO", true)
|
||||
if err != nil {
|
||||
t.Errorf("error running command `repo create`: %v", err)
|
||||
}
|
||||
|
||||
assert.Equal(t, "", output.String())
|
||||
assert.Equal(t, "✓ Created repository OWNER/REPO on GitHub\n✓ Added remote https://github.com/OWNER/REPO.git\n", output.Stderr())
|
||||
|
||||
var reqBody struct {
|
||||
Name string
|
||||
Visibility string
|
||||
OwnerId string
|
||||
LicenseTemplate string
|
||||
}
|
||||
|
||||
if len(reg.Requests) != 4 {
|
||||
t.Fatalf("expected 4 HTTP request, got %d", len(reg.Requests))
|
||||
}
|
||||
|
||||
bodyBytes, _ := ioutil.ReadAll(reg.Requests[3].Body)
|
||||
_ = json.Unmarshal(bodyBytes, &reqBody)
|
||||
fmt.Println(reqBody, "==========")
|
||||
if repoName := reqBody.Name; repoName != "REPO" {
|
||||
t.Errorf("expected %q, got %q", "REPO", repoName)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue