Merge pull request #1706 from GetStream/fix/replace-mentions

This commit is contained in:
Sahil Kumar
2023-08-11 16:12:06 +05:30
committed by GitHub
3 changed files with 132 additions and 3 deletions
@@ -1,3 +1,10 @@
## Upcoming
🐞 Fixed
- [[#1702]](https://github.com/GetStream/stream-chat-flutter/issues/1702)
Fixed `Message.replaceMentions` not treating `@usernames` as mentions.
## 6.8.1
🐞 Fixed
@@ -352,12 +352,12 @@ extension MessageX on Message {
final userName = user.name;
if (linkify) {
messageTextToRender = messageTextToRender?.replaceAll(
'@$userId',
'[@$userName](@${userName.replaceAll(' ', '')})',
RegExp('@($userId|$userName)'),
'[@$userName]($userId)',
);
} else {
messageTextToRender = messageTextToRender?.replaceAll(
'@$userId',
RegExp('@($userId|$userName)'),
'@$userName',
);
}
@@ -148,4 +148,126 @@ void main() {
expect('ㅎㅎㅎㅎ'.isOnlyEmoji, false);
});
});
group('Message Extension Tests', () {
test('replaceMentions should replace user mentions with names and IDs', () {
final user1 = User(id: 'user1', name: 'Alice');
final user2 = User(id: 'user2', name: 'Bob');
final message = Message(
text: 'Hello, @user1 and @user2!',
mentionedUsers: [user1, user2],
);
final modifiedMessage = message.replaceMentions();
expect(modifiedMessage.text, contains('[@Alice](user1)'));
expect(modifiedMessage.text, contains('[@Bob](user2)'));
});
test('replaceMentions without linkify should not add links', () {
final user = User(id: 'user1', name: 'Alice');
final message = Message(
text: 'Hello, @user1!',
mentionedUsers: [user],
);
final modifiedMessage = message.replaceMentions(linkify: false);
expect(modifiedMessage.text, contains('@Alice'));
});
test('replaceMentions should handle mentions with usernames', () {
final user = User(id: 'user1', name: 'Alice');
final message = Message(
text: 'Hello, @Alice!',
mentionedUsers: [user],
);
final modifiedMessage = message.replaceMentions();
expect(modifiedMessage.text, contains('[@Alice](user1)'));
});
test(
'''replaceMentions without linkify should not change mentions with usernames''',
() {
final user = User(id: 'user1', name: 'Alice');
final message = Message(
text: 'Hello, @Alice!',
mentionedUsers: [user],
);
final modifiedMessage = message.replaceMentions(linkify: false);
expect(modifiedMessage.text, contains('@Alice'));
},
);
test(
'replaceMentions should replace mixed user mentions with names and IDs',
() {
final user1 = User(id: 'user1', name: 'Alice');
final user2 = User(id: 'user2', name: 'Bob');
final message = Message(
text: 'Hello, @user1 and @Bob!',
mentionedUsers: [user1, user2],
);
final modifiedMessage = message.replaceMentions();
expect(modifiedMessage.text, contains('[@Alice](user1)'));
expect(modifiedMessage.text, contains('[@Bob](user2)'));
},
);
test('replaceMentionsWithId should replace user names with IDs', () {
final user1 = User(id: 'user1', name: 'Alice');
final user2 = User(id: 'user2', name: 'Bob');
final message = Message(
text: 'Hello, @Alice and @Bob!',
mentionedUsers: [user1, user2],
);
final modifiedMessage = message.replaceMentionsWithId();
expect(modifiedMessage.text, contains('@user1'));
expect(modifiedMessage.text, contains('@user2'));
expect(modifiedMessage.text, isNot(contains('@Alice')));
expect(modifiedMessage.text, isNot(contains('@Bob')));
});
test(
'replaceMentionsWithId should not change message without mentions',
() {
final message = Message(
text: 'Hello, @Alice!',
);
final modifiedMessage = message.replaceMentionsWithId();
expect(modifiedMessage.text, equals('Hello, @Alice!'));
expect(modifiedMessage.text, isNot(contains('@user1')));
},
);
test('replaceMentionsWithId should handle message with only mention', () {
final user = User(id: 'user1', name: 'Alice');
final message = Message(
text: '@Alice',
mentionedUsers: [user],
);
final modifiedMessage = message.replaceMentionsWithId();
expect(modifiedMessage.text, contains('@user1'));
expect(modifiedMessage.text, isNot(contains('@Alice')));
});
});
}