Skip to content

Commit

Permalink
fix(neon_talk): Update parent messages
Browse files Browse the repository at this point in the history
Signed-off-by: provokateurin <kate@provokateurin.de>
  • Loading branch information
provokateurin committed Jul 9, 2024
1 parent e1c3e8b commit 25d007d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
5 changes: 5 additions & 0 deletions packages/neon/neon_talk/lib/src/blocs/room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -392,10 +392,15 @@ class _TalkRoomBloc extends InteractiveBloc implements TalkRoomBloc {
// If there are multiple messages updating the same parent message only the newest is applied because it already contains all values
for (final newHiddenMessage in newHiddenMessages) {
final parent = newHiddenMessage.parent!;

if (message.id == parent.id) {
// Conversion from ChatMessage to ChatMessageWithParent is necessary because parent messages can't have parents of their own
return spreed.ChatMessageWithParent.fromJson(parent.toJson());
}

if (message.parent?.id == parent.id) {
return message.rebuild((b) => b.parent.replace(parent));
}
}

return message;
Expand Down
36 changes: 33 additions & 3 deletions packages/neon/neon_talk/test/room_bloc_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,17 @@ Account mockTalkAccount() {
json.encode({
'ocs': {
'meta': {'status': '', 'statuscode': 0},
'data': List.generate(messageCount, (i) => getChatMessage(id: messageCount - i - 1)),
'data': List.generate(
messageCount,
(i) => getChatMessage(
id: messageCount - i - 1,
parent: messageCount - i - 2 >= 0
? getChatMessage(
id: messageCount - i - 2,
)
: null,
),
),
},
}),
200,
Expand Down Expand Up @@ -360,8 +370,8 @@ void main() {
roomBloc.messages.transformResult((e) => BuiltList<int?>(e.map((m) => m.parent?.id))),
emitsInOrder([
Result<BuiltList<int?>>.loading(),
Result.success(BuiltList<int?>([null, null, null])),
Result.success(BuiltList<int?>([message.id, null, null, null])),
Result.success(BuiltList<int?>([1, 0, null])),
Result.success(BuiltList<int?>([1, 1, 0, null])),
]),
);

Expand Down Expand Up @@ -593,6 +603,26 @@ void main() {
),
]),
);
expect(
roomBloc.messages.transformResult((e) => BuiltList<spreed.MessageType?>(e.map((m) => m.parent?.messageType))),
emitsInOrder([
Result<BuiltList<spreed.MessageType?>>.loading(),
Result.success(
BuiltList<spreed.MessageType?>([
spreed.MessageType.comment,
spreed.MessageType.comment,
null,
]),
),
Result.success(
BuiltList<spreed.MessageType?>([
spreed.MessageType.commentDeleted,
null,
null,
]),
),
]),
);

final message = MockChatMessage();
when(() => message.id).thenReturn(1);
Expand Down

0 comments on commit 25d007d

Please sign in to comment.