scooter  ·  2026-04-13

edit_test.go

  1package main
  2
  3import (
  4	"testing"
  5)
  6
  7func TestParseEditContent_IssueFormat(t *testing.T) {
  8	tests := []struct {
  9		name        string
 10		content     string
 11		wantTitle   string
 12		wantMessage string
 13		wantErr     bool
 14	}{
 15		{
 16			name:        "simple title and message",
 17			content:     "Title\n\nMessage body",
 18			wantTitle:   "Title",
 19			wantMessage: "\nMessage body",
 20			wantErr:     false,
 21		},
 22		{
 23			name:        "title with comment lines",
 24			content:     ";; comment\nTitle\n\nMessage",
 25			wantTitle:   "Title",
 26			wantMessage: "Message",
 27			wantErr:     false,
 28		},
 29		{
 30			name:        "multiline message",
 31			content:     "Title\n\nLine 1\nLine 2\nLine 3",
 32			wantTitle:   "Title",
 33			wantMessage: "\nLine 1\nLine 2\nLine 3",
 34			wantErr:     false,
 35		},
 36		{
 37			name:        "title only no message",
 38			content:     "Title",
 39			wantTitle:   "Title",
 40			wantMessage: "",
 41			wantErr:     false,
 42		},
 43		{
 44			name:        "empty content",
 45			content:     "",
 46			wantTitle:   "",
 47			wantMessage: "",
 48			wantErr:     true,
 49		},
 50		{
 51			name:        "only comment lines",
 52			content:     ";; comment 1\n;; comment 2",
 53			wantTitle:   "",
 54			wantMessage: "",
 55			wantErr:     true,
 56		},
 57		{
 58			name:        "title with leading/trailing whitespace in lines",
 59			content:     "  Title  \n\n  Line 1  \n  Line 2  ",
 60			wantTitle:   "Title",
 61			wantMessage: "\n  Line 1  \n  Line 2  ",
 62			wantErr:     false,
 63		},
 64	}
 65
 66	for _, tt := range tests {
 67		t.Run(tt.name, func(t *testing.T) {
 68			gotTitle, gotMessage, err := parseEditContent(tt.content, false)
 69			if (err != nil) != tt.wantErr {
 70				t.Errorf("parseEditContent() error = %v, wantErr %v", err, tt.wantErr)
 71				return
 72			}
 73			if gotTitle != tt.wantTitle {
 74				t.Errorf("parseEditContent() title = %q, want %q", gotTitle, tt.wantTitle)
 75			}
 76			if gotMessage != tt.wantMessage {
 77				t.Errorf("parseEditContent() message = %q, want %q", gotMessage, tt.wantMessage)
 78			}
 79		})
 80	}
 81}
 82
 83func TestParseEditContent_CommentFormat(t *testing.T) {
 84	tests := []struct {
 85		name        string
 86		content     string
 87		wantTitle   string
 88		wantMessage string
 89		wantErr     bool
 90	}{
 91		{
 92			name:        "simple comment",
 93			content:     "Comment text",
 94			wantTitle:   "",
 95			wantMessage: "Comment text",
 96			wantErr:     false,
 97		},
 98		{
 99			name:        "multiline comment",
100			content:     "Line 1\nLine 2\nLine 3",
101			wantTitle:   "",
102			wantMessage: "Line 1\nLine 2\nLine 3",
103			wantErr:     false,
104		},
105		{
106			name:        "comment with instruction lines",
107			content:     ";; instruction\nComment text",
108			wantTitle:   "",
109			wantMessage: "Comment text",
110			wantErr:     false,
111		},
112		{
113			name:        "empty content",
114			content:     "",
115			wantTitle:   "",
116			wantMessage: "",
117			wantErr:     true,
118		},
119		{
120			name:        "only whitespace",
121			content:     "   \n   ",
122			wantTitle:   "",
123			wantMessage: "",
124			wantErr:     true,
125		},
126		{
127			name:        "only comment lines",
128			content:     ";; comment 1\n;; comment 2",
129			wantTitle:   "",
130			wantMessage: "",
131			wantErr:     true,
132		},
133	}
134
135	for _, tt := range tests {
136		t.Run(tt.name, func(t *testing.T) {
137			gotTitle, gotMessage, err := parseEditContent(tt.content, true)
138			if (err != nil) != tt.wantErr {
139				t.Errorf("parseEditContent() error = %v, wantErr %v", err, tt.wantErr)
140				return
141			}
142			if gotTitle != tt.wantTitle {
143				t.Errorf("parseEditContent() title = %q, want %q", gotTitle, tt.wantTitle)
144			}
145			if gotMessage != tt.wantMessage {
146				t.Errorf("parseEditContent() message = %q, want %q", gotMessage, tt.wantMessage)
147			}
148		})
149	}
150}