test: merge duplicate terminal, git and Actions service tests

Signed-off-by: bircni <bircni@icloud.com>
This commit is contained in:
bircni committed 2026-10-12 20:49:32 +02:00
1 parent aee57be8b9
commit 9df6cb7dd3
6 files changed
+38 -136

No files matched your search

+13 -41
View File
@@ -6,11 +6,9 @@ package terminal
import (
"bytes"
"context"
"io"
"path/filepath"
"strings"
"testing"
"time"
"github.com/stretchr/testify/require"
)
@@ -31,55 +29,28 @@ func TestCollectIssuePropertiesUsesEditBodyDraft(t *testing.T) {
require.NotEmpty(t, values.Draft.Path)
}
// lineReader returns one line per read, so that each accessible prompt reads only its answer.
type lineReader struct{ text string }
func (r *lineReader) Read(p []byte) (int, error) {
if r.text == "" {
return 0, io.EOF
}
line, _, _ := strings.Cut(r.text, "\n")
n := copy(p, line+"\n")
r.text = r.text[min(n, len(r.text)):]
return n, nil
}
func TestIssueFormAsksWhatsNextBeforeMetadata(t *testing.T) {
choices := IssueFormChoices{AskNext: true, CanPush: true, Assignees: []string{"alice"}, EditBody: noEdit}
for _, test := range []struct {
for _, tc := range []struct {
name, input string
canceled bool
want IssueFormValues
err error
}{
{"submit", "Title\n1\n", false},
{"cancel", "Title\n3\n", true},
{name: "submit", input: "Title\n1\n", want: IssueFormValues{Title: "Title"}},
{name: "cancel", input: "Title\n3\n", err: ErrCanceled},
{name: "metadata", input: "Title\n2\n1\n0\n2028-01-15\n", want: IssueFormValues{Title: "Title", Assignees: []string{"alice"}, Deadline: mustDueDate(t, "2028-01-15")}},
} {
t.Run(test.name, func(t *testing.T) {
t.Setenv("TERM", "dumb")
p, rendered := testPrompter(&lineReader{text: test.input})
t.Run(tc.name, func(t *testing.T) {
p, rendered := linePrompter(t, tc.input)
values, err := p.collectIssueProperties(context.Background(), "", "", choices)
require.ErrorIs(t, err, tc.err)
require.Contains(t, rendered.String(), "What's next?")
require.Contains(t, rendered.String(), "Add metadata")
require.NotContains(t, rendered.String(), "Assignees:")
if test.canceled {
require.ErrorIs(t, err, ErrCanceled)
return
require.Equal(t, tc.name == "metadata", strings.Contains(rendered.String(), "Assignees:"))
if tc.err == nil {
require.Equal(t, tc.want, values)
}
require.NoError(t, err)
require.Equal(t, "Title", values.Title)
require.Empty(t, values.Assignees)
})
}
t.Setenv("TERM", "dumb")
p, rendered := testPrompter(&lineReader{text: "Title\n2\n1\n0\n2028-01-15\n"})
values, err := p.collectIssueProperties(context.Background(), "", "", choices)
require.NoError(t, err)
require.Contains(t, rendered.String(), "Assignees:")
require.Equal(t, []string{"alice"}, values.Assignees)
require.Equal(t, "2028-01-15", values.Deadline.Format(time.DateOnly))
p, rendered = accessiblePrompter(t, "Title\n")
_, err = p.collectIssueProperties(context.Background(), "", "", IssueFormChoices{EditBody: noEdit})
require.NoError(t, err)
require.NotContains(t, rendered.String(), "What's next?")
}
func TestIssueFormMarksTitleRequired(t *testing.T) {
@@ -87,4 +58,5 @@ func TestIssueFormMarksTitleRequired(t *testing.T) {
_, err := p.collectIssueProperties(context.Background(), "", "", IssueFormChoices{EditBody: noEdit})
require.NoError(t, err)
require.Contains(t, rendered.String(), "Title (required):")
require.NotContains(t, rendered.String(), "What's next?")
}