From d0c2c81f2d1e9d70945c5a99efdecf3875011b97 Mon Sep 17 00:00:00 2001 From: AliabbasMerchant Date: Thu, 27 Aug 2020 13:39:21 +0530 Subject: [PATCH] Interactive template selection test for issue create --- pkg/cmd/issue/create/create.go | 7 +- pkg/cmd/issue/create/create_test.go | 71 ++++++++++++++++++- .../.github/ISSUE_TEMPLATE/bug_report.md | 9 +++ .../.github/ISSUE_TEMPLATE/enhancement.md | 9 +++ 4 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/enhancement.md diff --git a/pkg/cmd/issue/create/create.go b/pkg/cmd/issue/create/create.go index 8d47e4e27..4190fba3f 100644 --- a/pkg/cmd/issue/create/create.go +++ b/pkg/cmd/issue/create/create.go @@ -23,6 +23,8 @@ type CreateOptions struct { IO *iostreams.IOStreams BaseRepo func() (ghrepo.Interface, error) + RootDirOverride string + RepoOverride string WebMode bool @@ -94,9 +96,10 @@ func createRun(opts *CreateOptions) error { } var nonLegacyTemplateFiles []string - if opts.RepoOverride == "" { + if opts.RootDirOverride != "" { + nonLegacyTemplateFiles = githubtemplate.FindNonLegacy(opts.RootDirOverride, "ISSUE_TEMPLATE") + } else if opts.RepoOverride == "" { if rootDir, err := git.ToplevelDir(); err == nil { - // TODO: figure out how to stub this in tests nonLegacyTemplateFiles = githubtemplate.FindNonLegacy(rootDir, "ISSUE_TEMPLATE") } } diff --git a/pkg/cmd/issue/create/create_test.go b/pkg/cmd/issue/create/create_test.go index b483d090b..9a3cd119f 100644 --- a/pkg/cmd/issue/create/create_test.go +++ b/pkg/cmd/issue/create/create_test.go @@ -16,6 +16,7 @@ import ( "github.com/cli/cli/pkg/cmdutil" "github.com/cli/cli/pkg/httpmock" "github.com/cli/cli/pkg/iostreams" + "github.com/cli/cli/pkg/prompt" "github.com/cli/cli/test" "github.com/google/shlex" "github.com/stretchr/testify/assert" @@ -29,6 +30,10 @@ func eq(t *testing.T, got interface{}, expected interface{}) { } func runCommand(rt http.RoundTripper, isTTY bool, cli string) (*test.CmdOut, error) { + return runCommandWithRootDirOverridden(rt, isTTY, cli, "") +} + +func runCommandWithRootDirOverridden(rt http.RoundTripper, isTTY bool, cli string, rootDir string) (*test.CmdOut, error) { io, _, stdout, stderr := iostreams.Test() io.SetStdoutTTY(isTTY) io.SetStdinTTY(isTTY) @@ -47,7 +52,10 @@ func runCommand(rt http.RoundTripper, isTTY bool, cli string) (*test.CmdOut, err }, } - cmd := NewCmdCreate(factory, nil) + cmd := NewCmdCreate(factory, func(opts *CreateOptions) error { + opts.RootDirOverride = rootDir + return createRun(opts) + }) argv, err := shlex.Split(cli) if err != nil { @@ -126,6 +134,67 @@ func TestIssueCreate(t *testing.T) { eq(t, output.String(), "https://github.com/OWNER/REPO/issues/12\n") } +func TestIssueCreate_nonLegacyTemplate(t *testing.T) { + http := &httpmock.Registry{} + defer http.Verify(t) + + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "repository": { + "id": "REPOID", + "hasIssuesEnabled": true + } } } + `)) + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "createIssue": { "issue": { + "URL": "https://github.com/OWNER/REPO/issues/12" + } } } } + `)) + + as, teardown := prompt.InitAskStubber() + defer teardown() + as.Stub([]*prompt.QuestionStub{ + { + Name: "index", + Value: 1, + }, + }) + as.Stub([]*prompt.QuestionStub{ + { + Name: "body", + Default: true, + }, + }) + as.Stub([]*prompt.QuestionStub{ + { + Name: "confirmation", + Value: 0, + }, + }) + + output, err := runCommandWithRootDirOverridden(http, true, `-t hello`, "./repoWithNonLegacyIssueTemplates") + if err != nil { + t.Errorf("error running command `issue create`: %v", err) + } + + bodyBytes, _ := ioutil.ReadAll(http.Requests[1].Body) + reqBody := struct { + Variables struct { + Input struct { + RepositoryID string + Title string + Body string + } + } + }{} + _ = json.Unmarshal(bodyBytes, &reqBody) + + eq(t, reqBody.Variables.Input.RepositoryID, "REPOID") + eq(t, reqBody.Variables.Input.Title, "hello") + eq(t, reqBody.Variables.Input.Body, "I have a suggestion for an enhancement") + + eq(t, output.String(), "https://github.com/OWNER/REPO/issues/12\n") +} + func TestIssueCreate_metadata(t *testing.T) { http := &httpmock.Registry{} defer http.Verify(t) diff --git a/pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/bug_report.md b/pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..d57082bcf --- /dev/null +++ b/pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,9 @@ +--- +name: Bug report +about: Report a bug or unexpected behavior +title: Bug Report +labels: bug + +--- + +I wanna report a bug \ No newline at end of file diff --git a/pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/enhancement.md b/pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/enhancement.md new file mode 100644 index 000000000..0fe84afa3 --- /dev/null +++ b/pkg/cmd/issue/create/repoWithNonLegacyIssueTemplates/.github/ISSUE_TEMPLATE/enhancement.md @@ -0,0 +1,9 @@ +--- +name: Submit a request +about: Propose an improvement +title: Enhancement Proposal +labels: enhancement + +--- + +I have a suggestion for an enhancement \ No newline at end of file