Merge pull request #405 from arkentos/master

Fix: Nil pointer dereference while previewing PR and Issues with empty body
This commit is contained in:
Nate Smith 2020-02-13 13:19:59 -06:00 committed by GitHub
commit 15d6d4bcf0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 135 additions and 6 deletions

View file

@ -255,9 +255,11 @@ func printIssuePreview(out io.Writer, issue *api.Issue) {
utils.Pluralize(issue.Comments.TotalCount, "comment"),
coloredLabels,
)))
fmt.Fprintln(out)
fmt.Fprintln(out, utils.RenderMarkdown(issue.Body))
fmt.Fprintln(out)
if issue.Body != "" {
fmt.Fprintln(out)
fmt.Fprintln(out, utils.RenderMarkdown(issue.Body))
fmt.Fprintln(out)
}
fmt.Fprintf(out, utils.Gray("View this issue on GitHub: %s\n"), issue.URL)
}

View file

@ -288,6 +288,51 @@ func TestIssueView_preview(t *testing.T) {
}
}
func TestIssueView_previewWithEmptyBody(t *testing.T) {
initBlankContext("OWNER/REPO", "master")
http := initFakeHTTP()
http.StubRepoResponse("OWNER", "REPO")
http.StubResponse(200, bytes.NewBufferString(`
{ "data": { "repository": { "hasIssuesEnabled": true, "issue": {
"number": 123,
"body": "",
"title": "ix of coins",
"author": {
"login": "marseilles"
},
"labels": {
"nodes": [
{"name": "tarot"}
]
},
"comments": {
"totalCount": 9
},
"url": "https://github.com/OWNER/REPO/issues/123"
} } } }
`))
output, err := RunCommand(issueViewCmd, "issue view -p 123")
if err != nil {
t.Errorf("error running command `issue view`: %v", err)
}
eq(t, output.Stderr(), "")
expectedLines := []*regexp.Regexp{
regexp.MustCompile(`ix of coins`),
regexp.MustCompile(`opened by marseilles. 9 comments. \(tarot\)`),
regexp.MustCompile(`View this issue on GitHub: https://github.com/OWNER/REPO/issues/123`),
}
for _, r := range expectedLines {
if !r.MatchString(output.String()) {
t.Errorf("output did not match regexp /%s/\n> output\n%s\n", r, output)
return
}
}
}
func TestIssueView_notFound(t *testing.T) {
initBlankContext("OWNER/REPO", "master")
http := initFakeHTTP()

View file

@ -308,9 +308,11 @@ func printPrPreview(out io.Writer, pr *api.PullRequest) {
pr.BaseRefName,
pr.HeadRefName,
)))
fmt.Fprintln(out)
fmt.Fprintln(out, utils.RenderMarkdown(pr.Body))
fmt.Fprintln(out)
if pr.Body != "" {
fmt.Fprintln(out)
fmt.Fprintln(out, utils.RenderMarkdown(pr.Body))
fmt.Fprintln(out)
}
fmt.Fprintf(out, utils.Gray("View this pull request on GitHub: %s\n"), pr.URL)
}

View file

@ -313,6 +313,40 @@ func TestPRView_previewCurrentBranch(t *testing.T) {
}
}
func TestPRView_previewCurrentBranchWithEmptyBody(t *testing.T) {
initBlankContext("OWNER/REPO", "blueberries")
http := initFakeHTTP()
http.StubRepoResponse("OWNER", "REPO")
jsonFile, _ := os.Open("../test/fixtures/prView_EmptyBody.json")
defer jsonFile.Close()
http.StubResponse(200, jsonFile)
restoreCmd := utils.SetPrepareCmd(func(cmd *exec.Cmd) utils.Runnable {
return &outputStub{}
})
defer restoreCmd()
output, err := RunCommand(prViewCmd, "pr view -p")
if err != nil {
t.Errorf("error running command `pr view`: %v", err)
}
eq(t, output.Stderr(), "")
expectedLines := []*regexp.Regexp{
regexp.MustCompile(`Blueberries are a good fruit`),
regexp.MustCompile(`nobody wants to merge 8 commits into master from blueberries`),
regexp.MustCompile(`View this pull request on GitHub: https://github.com/OWNER/REPO/pull/10`),
}
for _, r := range expectedLines {
if !r.MatchString(output.String()) {
t.Errorf("output did not match regexp /%s/\n> output\n%s\n", r, output)
return
}
}
}
func TestPRView_currentBranch(t *testing.T) {
initBlankContext("OWNER/REPO", "blueberries")
http := initFakeHTTP()

46
test/fixtures/prView_EmptyBody.json vendored Normal file
View file

@ -0,0 +1,46 @@
{
"data": {
"repository": {
"pullRequests": {
"nodes": [
{
"number": 12,
"title": "Blueberries are from a fork",
"body": "yeah",
"url": "https://github.com/OWNER/REPO/pull/12",
"headRefName": "blueberries",
"baseRefName": "master",
"headRepositoryOwner": {
"login": "hubot"
},
"commits": {
"totalCount": 12
},
"author": {
"login": "nobody"
},
"isCrossRepository": true
},
{
"number": 10,
"title": "Blueberries are a good fruit",
"body": "",
"url": "https://github.com/OWNER/REPO/pull/10",
"baseRefName": "master",
"headRefName": "blueberries",
"author": {
"login": "nobody"
},
"headRepositoryOwner": {
"login": "OWNER"
},
"commits": {
"totalCount": 8
},
"isCrossRepository": false
}
]
}
}
}
}