@@ -174,6 +174,80 @@ public function testGetRichMessageWithDuplicatedMention() {
174
174
$this->assertEquals($expectedMessageParameters, $chatMessage->getMessageParameters());
175
175
}
176
176
177
+ public function dataGetRichMessageWithMentionsFullyIncludedInOtherMentions() {
178
+ // Based on valid characters from server/lib/private/User/Manager.php
179
+ return [
180
+ ['testUser', 'testUser1', false],
181
+ ['testUser', 'testUser1', true],
182
+ ['testUser', 'testUser_1', false],
183
+ ['testUser', 'testUser_1', true],
184
+ ['testUser', 'testUser.1', false],
185
+ ['testUser', 'testUser.1', true],
186
+ ['testUser', 'testUser@1', false],
187
+ ['testUser', 'testUser@1', true],
188
+ ['testUser', 'testUser-1', false],
189
+ ['testUser', 'testUser-1', true],
190
+ ['testUser', 'testUser\'1', false],
191
+ ['testUser', 'testUser\'1', true],
192
+ ];
193
+ }
194
+
195
+ /**
196
+ * @dataProvider dataGetRichMessageWithMentionsFullyIncludedInOtherMentions
197
+ */
198
+ public function testGetRichMessageWithMentionsFullyIncludedInOtherMentions(string $baseId, string $longerId, bool $quoted) {
199
+ $mentions = [
200
+ ['type' => 'user', 'id' => $baseId],
201
+ ['type' => 'user', 'id' => $longerId],
202
+ ];
203
+ $comment = $this->newComment($mentions);
204
+
205
+ $this->commentsManager->expects($this->exactly(2))
206
+ ->method('resolveDisplayName')
207
+ ->willReturnCallback(function ($type, $id) {
208
+ return $id . ' display name';
209
+ });
210
+
211
+ $this->userManager->expects($this->exactly(2))
212
+ ->method('get')
213
+ ->withConsecutive(
214
+ [$longerId],
215
+ [$baseId]
216
+ )
217
+ ->willReturn($this->createMock(IUser::class));
218
+
219
+ /** @var Room|MockObject $room */
220
+ $room = $this->createMock(Room::class);
221
+ /** @var Participant|MockObject $participant */
222
+ $participant = $this->createMock(Participant::class);
223
+ /** @var IL10N|MockObject $l */
224
+ $l = $this->createMock(IL10N::class);
225
+ $chatMessage = new Message($room, $participant, $comment, $l);
226
+ if ($quoted) {
227
+ $chatMessage->setMessage('Mention to @"' . $baseId . '" and @"' . $longerId . '"', []);
228
+ } else {
229
+ $chatMessage->setMessage('Mention to @' . $baseId . ' and @' . $longerId, []);
230
+ }
231
+
232
+ $this->parser->parseMessage($chatMessage);
233
+
234
+ $expectedMessageParameters = [
235
+ 'mention-user1' => [
236
+ 'type' => 'user',
237
+ 'id' => $longerId,
238
+ 'name' => $longerId . ' display name'
239
+ ],
240
+ 'mention-user2' => [
241
+ 'type' => 'user',
242
+ 'id' => $baseId,
243
+ 'name' => $baseId . ' display name'
244
+ ],
245
+ ];
246
+
247
+ $this->assertEquals('Mention to {mention-user2} and {mention-user1}', $chatMessage->getMessage());
248
+ $this->assertEquals($expectedMessageParameters, $chatMessage->getMessageParameters());
249
+ }
250
+
177
251
public function testGetRichMessageWithSeveralMentions() {
178
252
$mentions = [
179
253
['type' => 'user', 'id' => 'testUser1'],
@@ -249,15 +323,12 @@ public function testGetRichMessageWithNonExistingUserMention() {
249
323
->with('user', 'testUser')
250
324
->willReturn('testUser display name');
251
325
252
- $this->userManager->expects($this->at(0))
253
- ->method('get')
254
- ->with('me')
255
- ->willReturn(null);
256
-
257
- $this->userManager->expects($this->at(1))
326
+ $this->userManager->expects($this->exactly(2))
258
327
->method('get')
259
- ->with('testUser')
260
- ->willReturn($this->createMock(IUser::class));
328
+ ->willReturnMap([
329
+ ['me', null],
330
+ ['testUser', $this->createMock(IUser::class)],
331
+ ]);
261
332
262
333
/** @var Room|MockObject $room */
263
334
$room = $this->createMock(Room::class);
0 commit comments