mirror of https://gitlab.com/gitlab-org/cli.git
215 lines
5.1 KiB
Go
215 lines
5.1 KiB
Go
package view
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os/exec"
|
|
"regexp"
|
|
"testing"
|
|
"time"
|
|
|
|
"gitlab.com/gitlab-org/cli/pkg/iostreams"
|
|
|
|
"github.com/acarl005/stripansi"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/xanzy/go-gitlab"
|
|
"gitlab.com/gitlab-org/cli/api"
|
|
"gitlab.com/gitlab-org/cli/commands/cmdtest"
|
|
"gitlab.com/gitlab-org/cli/commands/cmdutils"
|
|
"gitlab.com/gitlab-org/cli/internal/config"
|
|
"gitlab.com/gitlab-org/cli/internal/run"
|
|
mainTest "gitlab.com/gitlab-org/cli/test"
|
|
)
|
|
|
|
var (
|
|
stubFactory *cmdutils.Factory
|
|
stdout *bytes.Buffer
|
|
stderr *bytes.Buffer
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
defer config.StubConfig(`---
|
|
hosts:
|
|
gitlab.com:
|
|
username: monalisa
|
|
token: OTOKEN
|
|
`, "")()
|
|
|
|
var io *iostreams.IOStreams
|
|
io, _, stdout, stderr = iostreams.Test()
|
|
stubFactory, _ = cmdtest.StubFactoryWithConfig("")
|
|
stubFactory.IO = io
|
|
stubFactory.IO.IsaTTY = true
|
|
stubFactory.IO.IsErrTTY = true
|
|
|
|
timer, _ := time.Parse(time.RFC3339, "2014-11-12T11:45:26.371Z")
|
|
api.GetIssue = func(client *gitlab.Client, projectID interface{}, issueID int) (*gitlab.Issue, error) {
|
|
if projectID == "" || projectID == "WRONG_REPO" || projectID == "expected_err" {
|
|
return nil, fmt.Errorf("error expected")
|
|
}
|
|
repo, err := stubFactory.BaseRepo()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &gitlab.Issue{
|
|
ID: issueID,
|
|
IID: issueID,
|
|
Title: "issueTitle",
|
|
Labels: gitlab.Labels{"test", "bug"},
|
|
State: "opened",
|
|
Description: "issueBody",
|
|
References: &gitlab.IssueReferences{
|
|
Full: fmt.Sprintf("%s#%d", repo.FullName(), issueID),
|
|
},
|
|
Milestone: &gitlab.Milestone{
|
|
Title: "MilestoneTitle",
|
|
},
|
|
Assignees: []*gitlab.IssueAssignee{
|
|
{
|
|
Username: "mona",
|
|
},
|
|
{
|
|
Username: "lisa",
|
|
},
|
|
},
|
|
Author: &gitlab.IssueAuthor{
|
|
ID: issueID,
|
|
Name: "John Dev Wick",
|
|
Username: "jdwick",
|
|
},
|
|
WebURL: fmt.Sprintf("https://%s/%s/-/issues/%d", repo.RepoHost(), repo.FullName(), issueID),
|
|
CreatedAt: &timer,
|
|
UserNotesCount: 2,
|
|
}, nil
|
|
}
|
|
cmdtest.InitTest(m, "mr_view_test")
|
|
}
|
|
|
|
func TestNewCmdView_web_numberArg(t *testing.T) {
|
|
cmd := NewCmdView(stubFactory)
|
|
cmdutils.EnableRepoOverride(cmd, stubFactory)
|
|
|
|
var seenCmd *exec.Cmd
|
|
restoreCmd := run.SetPrepareCmd(func(cmd *exec.Cmd) run.Runnable {
|
|
seenCmd = cmd
|
|
return &mainTest.OutputStub{}
|
|
})
|
|
defer restoreCmd()
|
|
|
|
_, err := cmdtest.RunCommand(cmd, "225 -w -R glab-cli/test")
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
assert.Contains(t, stderr.String(), "Opening gitlab.com/glab-cli/test/-/issues/225 in your browser.")
|
|
assert.Equal(t, "", stdout.String())
|
|
|
|
if seenCmd == nil {
|
|
t.Log("expected a command to run")
|
|
}
|
|
stdout.Reset()
|
|
stderr.Reset()
|
|
}
|
|
|
|
func TestNewCmdView(t *testing.T) {
|
|
oldListIssueNotes := api.ListIssueNotes
|
|
timer, _ := time.Parse(time.RFC3339, "2014-11-12T11:45:26.371Z")
|
|
api.ListIssueNotes = func(client *gitlab.Client, projectID interface{}, issueID int, opts *gitlab.ListIssueNotesOptions) ([]*gitlab.Note, error) {
|
|
if projectID == "PROJECT_MR_WITH_EMPTY_NOTE" {
|
|
return []*gitlab.Note{}, nil
|
|
}
|
|
return []*gitlab.Note{
|
|
{
|
|
ID: 1,
|
|
Body: "Note Body",
|
|
Title: "Note Title",
|
|
Author: cmdtest.Author{
|
|
ID: 1,
|
|
Username: "johnwick",
|
|
Name: "John Wick",
|
|
},
|
|
System: false,
|
|
CreatedAt: &timer,
|
|
NoteableID: 0,
|
|
},
|
|
{
|
|
ID: 1,
|
|
Body: "Marked issue as stale",
|
|
Title: "",
|
|
Author: cmdtest.Author{
|
|
ID: 1,
|
|
Username: "johnwick",
|
|
Name: "John Wick",
|
|
},
|
|
System: true,
|
|
CreatedAt: &timer,
|
|
NoteableID: 0,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
t.Run("show", func(t *testing.T) {
|
|
cmd := NewCmdView(stubFactory)
|
|
cmdutils.EnableRepoOverride(cmd, stubFactory)
|
|
_, err := cmdtest.RunCommand(cmd, "13 -c -s -R glab-cli/test")
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
out := stripansi.Strip(stdout.String())
|
|
outErr := stripansi.Strip(stderr.String())
|
|
stdout.Reset()
|
|
stderr.Reset()
|
|
|
|
require.Contains(t, out, "issueTitle #13")
|
|
require.Contains(t, out, "issueBody")
|
|
require.Equal(t, outErr, "")
|
|
assert.Contains(t, out, "https://gitlab.com/glab-cli/test/-/issues/13")
|
|
assert.Contains(t, out, "johnwick Marked issue as stale")
|
|
})
|
|
|
|
t.Run("no_tty", func(t *testing.T) {
|
|
stubFactory.IO.IsaTTY = false
|
|
stubFactory.IO.IsErrTTY = false
|
|
|
|
cmd := NewCmdView(stubFactory)
|
|
cmdutils.EnableRepoOverride(cmd, stubFactory)
|
|
|
|
_, err := cmdtest.RunCommand(cmd, "13 -c -s -R glab-cli/test")
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
expectedOutputs := []string{
|
|
`title:\tissueTitle`,
|
|
`assignees:\tmona, lisa`,
|
|
`author:\tjdwick`,
|
|
`state:\topen`,
|
|
`comments:\t2`,
|
|
`labels:\ttest, bug`,
|
|
`milestone:\tMilestoneTitle\n`,
|
|
`--`,
|
|
`issueBody`,
|
|
}
|
|
|
|
out := stripansi.Strip(stdout.String())
|
|
outErr := stripansi.Strip(stderr.String())
|
|
|
|
cmdtest.Eq(t, outErr, "")
|
|
t.Helper()
|
|
var r *regexp.Regexp
|
|
for _, l := range expectedOutputs {
|
|
r = regexp.MustCompile(l)
|
|
if !r.MatchString(out) {
|
|
t.Errorf("output did not match regexp /%s/\n> output\n%s\n", r, out)
|
|
return
|
|
}
|
|
}
|
|
})
|
|
api.ListIssueNotes = oldListIssueNotes
|
|
}
|