@@ -59,7 +59,7 @@ public function testOnPullRequestLabeled()
59
59
60
60
$ this ->assertCount (2 , $ responseData );
61
61
$ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
62
- $ this ->assertSame ('[Console][FrameworkBundle] [bar] Foo ' , $ responseData ['new_title ' ]);
62
+ $ this ->assertSame ('[Console][FrameworkBundle][bar] Foo ' , $ responseData ['new_title ' ]);
63
63
}
64
64
65
65
public function testOnPullRequestLabeledCaseInsensitive ()
@@ -110,7 +110,7 @@ public function testRemoveLabel()
110
110
$ responseData = $ event ->getResponseData ();
111
111
$ this ->assertCount (2 , $ responseData );
112
112
$ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
113
- $ this ->assertSame ('[Console] [Random] Foo normal title ' , $ responseData ['new_title ' ]);
113
+ $ this ->assertSame ('[Console][Random] Foo normal title ' , $ responseData ['new_title ' ]);
114
114
}
115
115
116
116
public function testExtraBlankSpace ()
@@ -129,4 +129,169 @@ public function testExtraBlankSpace()
129
129
$ this ->assertSame (57753 , $ responseData ['pull_request ' ]);
130
130
$ this ->assertSame ('[ErrorHandler] restrict the maximum length of the X-Debug-Exception header ' , $ responseData ['new_title ' ]);
131
131
}
132
+
133
+ public function testMultipleLabelsWithoutSpaceBetweenBrackets ()
134
+ {
135
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
136
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
137
+ 'title ' => 'Foo Bar ' ,
138
+ 'labels ' => [
139
+ ['name ' => 'Platform ' , 'color ' => 'dddddd ' ],
140
+ ['name ' => 'Agent ' , 'color ' => 'dddddd ' ],
141
+ ],
142
+ ]);
143
+
144
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
145
+ $ responseData = $ event ->getResponseData ();
146
+ $ this ->assertCount (2 , $ responseData );
147
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
148
+ $ this ->assertSame ('[Agent][Platform] Foo Bar ' , $ responseData ['new_title ' ]);
149
+ }
150
+
151
+ public function testMultipleLabelsUpdateRemovesSpaceBetweenBrackets ()
152
+ {
153
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
154
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
155
+ 'title ' => '[Platform] [Agent] Foo Bar ' , // Title already has labels with space
156
+ 'labels ' => [
157
+ ['name ' => 'Platform ' , 'color ' => 'dddddd ' ],
158
+ ['name ' => 'Agent ' , 'color ' => 'dddddd ' ],
159
+ ],
160
+ ]);
161
+
162
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
163
+ $ responseData = $ event ->getResponseData ();
164
+ $ this ->assertCount (2 , $ responseData );
165
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
166
+ $ this ->assertSame ('[Agent][Platform] Foo Bar ' , $ responseData ['new_title ' ]);
167
+ }
168
+
169
+ public function testAddingLabelToExistingLabeledTitle ()
170
+ {
171
+ // Simulating when we already have [Platform] and are adding Agent label
172
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
173
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
174
+ 'title ' => '[Platform] Foo Bar ' , // Title already has one label
175
+ 'labels ' => [
176
+ ['name ' => 'Platform ' , 'color ' => 'dddddd ' ],
177
+ ['name ' => 'Agent ' , 'color ' => 'dddddd ' ], // New label added
178
+ ],
179
+ ]);
180
+
181
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
182
+ $ responseData = $ event ->getResponseData ();
183
+ $ this ->assertCount (2 , $ responseData );
184
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
185
+ $ this ->assertSame ('[Agent][Platform] Foo Bar ' , $ responseData ['new_title ' ]);
186
+ }
187
+
188
+ public function testLabelsNotRecognizedAsValidLabels ()
189
+ {
190
+ // This test simulates what happens when [Platform] and [Agent] are in the title
191
+ // but they're NOT recognized as valid labels (wrong case or not in label list)
192
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
193
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
194
+ 'title ' => '[Platform] [Agent] Foo Bar ' , // These are in title but not recognized
195
+ 'labels ' => [
196
+ ['name ' => 'Bug ' , 'color ' => 'dddddd ' ], // Different valid label
197
+ ],
198
+ ]);
199
+
200
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
201
+ $ responseData = $ event ->getResponseData ();
202
+ $ this ->assertCount (2 , $ responseData );
203
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
204
+ // Since Platform and Agent are not recognized labels, they stay in the title without spaces
205
+ $ this ->assertSame ('[Bug][Platform][Agent] Foo Bar ' , $ responseData ['new_title ' ]);
206
+ }
207
+
208
+ public function testBugWithLabelsNotInRepositoryLabelList ()
209
+ {
210
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
211
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
212
+ 'title ' => 'Foo Bar ' ,
213
+ 'labels ' => [
214
+ // These labels are attached to PR but not in the StaticLabelApi list
215
+ ['name ' => 'Platform ' , 'color ' => 'dddddd ' ],
216
+ ['name ' => 'Agent ' , 'color ' => 'dddddd ' ],
217
+ ],
218
+ ]);
219
+
220
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
221
+ $ responseData = $ event ->getResponseData ();
222
+
223
+ $ this ->assertCount (2 , $ responseData );
224
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
225
+ $ this ->assertSame ('[Agent][Platform] Foo Bar ' , $ responseData ['new_title ' ]);
226
+ }
227
+
228
+ /**
229
+ * Test that ensures no spaces are ever added between label brackets.
230
+ */
231
+ public function testNoSpacesBetweenLabelBrackets ()
232
+ {
233
+ // Test with empty title after label removal
234
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
235
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
236
+ 'title ' => '[Console] [FrameworkBundle] ' , // Only labels, no other text
237
+ 'labels ' => [
238
+ ['name ' => 'Console ' , 'color ' => 'dddddd ' ],
239
+ ['name ' => 'FrameworkBundle ' , 'color ' => 'dddddd ' ],
240
+ ],
241
+ ]);
242
+
243
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
244
+ $ responseData = $ event ->getResponseData ();
245
+
246
+ // Should produce labels without spaces and no trailing space
247
+ $ this ->assertCount (2 , $ responseData );
248
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
249
+ $ this ->assertSame ('[Console][FrameworkBundle] ' , $ responseData ['new_title ' ]);
250
+ }
251
+
252
+ /**
253
+ * Test when title has unrecognized bracketed text like [Foo] that isn't a label.
254
+ */
255
+ public function testUnrecognizedBracketedTextWithNewLabel ()
256
+ {
257
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
258
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
259
+ 'title ' => '[Foo] Bar ' , // [Foo] is not a recognized label
260
+ 'labels ' => [
261
+ ['name ' => 'Console ' , 'color ' => 'dddddd ' ], // Adding Console label
262
+ ],
263
+ ]);
264
+
265
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
266
+ $ responseData = $ event ->getResponseData ();
267
+
268
+ // Currently produces: [Console] [Foo] Bar (with space)
269
+ // Should produce: [Console][Foo] Bar (no space between brackets)
270
+ $ this ->assertCount (2 , $ responseData );
271
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
272
+ $ this ->assertSame ('[Console][Foo] Bar ' , $ responseData ['new_title ' ]);
273
+ }
274
+
275
+ /**
276
+ * Test multiple unrecognized bracketed texts with real labels.
277
+ */
278
+ public function testMultipleUnrecognizedBracketsWithRealLabels ()
279
+ {
280
+ $ event = new GitHubEvent (['action ' => 'labeled ' , 'number ' => 1234 , 'pull_request ' => []], $ this ->repository );
281
+ $ this ->pullRequestApi ->method ('show ' )->willReturn ([
282
+ 'title ' => '[TODO] [WIP] [Foo] Some title ' , // [TODO], [WIP], [Foo] are not recognized labels
283
+ 'labels ' => [
284
+ ['name ' => 'Console ' , 'color ' => 'dddddd ' ],
285
+ ['name ' => 'FrameworkBundle ' , 'color ' => 'dddddd ' ],
286
+ ],
287
+ ]);
288
+
289
+ $ this ->dispatcher ->dispatch ($ event , GitHubEvents::PULL_REQUEST );
290
+ $ responseData = $ event ->getResponseData ();
291
+
292
+ // Should keep unrecognized brackets but without spaces between any brackets
293
+ $ this ->assertCount (2 , $ responseData );
294
+ $ this ->assertSame (1234 , $ responseData ['pull_request ' ]);
295
+ $ this ->assertSame ('[Console][FrameworkBundle][TODO][WIP][Foo] Some title ' , $ responseData ['new_title ' ]);
296
+ }
132
297
}
0 commit comments