Skip to content

Commit

Permalink
Merge pull request #1706 from GetStream/fix/replace-mentions
Browse files Browse the repository at this point in the history
  • Loading branch information
xsahil03x authored Aug 11, 2023
2 parents fb9ab5a + 1264fa1 commit 229b236
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 3 deletions.
7 changes: 7 additions & 0 deletions packages/stream_chat_flutter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
6 changes: 3 additions & 3 deletions packages/stream_chat_flutter/lib/src/utils/extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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',
);
}
Expand Down
122 changes: 122 additions & 0 deletions packages/stream_chat_flutter/test/src/utils/extension_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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')));
});
});
}

0 comments on commit 229b236

Please sign in to comment.