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}