Skip to content

Commit ccad711

Browse files
committed
test: fix existing tests
1 parent 9f507c3 commit ccad711

File tree

8 files changed

+63
-74
lines changed

8 files changed

+63
-74
lines changed

packages/stream_chat/lib/src/client/channel.dart

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'dart:math' as math;
66
import 'package:collection/collection.dart';
77
import 'package:rxdart/rxdart.dart';
88
import 'package:stream_chat/src/client/retry_queue.dart';
9-
import 'package:stream_chat/src/core/util/message_rules.dart';
109
import 'package:stream_chat/src/core/util/utils.dart';
1110
import 'package:stream_chat/stream_chat.dart';
1211
import 'package:synchronized/synchronized.dart';
@@ -2847,26 +2846,6 @@ class ChannelClientState {
28472846
}));
28482847
}
28492848

2850-
// Logic taken from the backend SDK
2851-
// https://github.com/GetStream/chat/blob/9245c2b3f7e679267d57ee510c60e93de051cb8e/types/channel.go#L1136-L1150
2852-
bool _shouldUpdateChannelLastMessageAt(Message message) {
2853-
if (message.isError) return false;
2854-
if (message.shadowed) return false;
2855-
if (message.isEphemeral) return false;
2856-
2857-
final config = channelState.channel?.config;
2858-
if (message.isSystem && config?.skipLastMsgUpdateForSystemMsgs == true) {
2859-
return false;
2860-
}
2861-
2862-
final currentUserId = _client.state.currentUser?.id;
2863-
if (currentUserId case final userId? when message.isNotVisibleTo(userId)) {
2864-
return false;
2865-
}
2866-
2867-
return true;
2868-
}
2869-
28702849
/// Updates the [read] in the state if it exists. Adds it otherwise.
28712850
void updateRead([Iterable<Read>? read]) {
28722851
final existingReads = <Read>[...?channelState.read];

packages/stream_chat/lib/src/core/models/event.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ enum AITypingState {
339339
generating,
340340
}
341341

342-
extension ABC on Event {
342+
/// Helper extension methods for [Event].
343+
extension EventExtension on Event {
343344
/// Whether the event is from the given user.
344345
bool isFromUser({String? userId}) {
345346
if (userId == null) return false;

packages/stream_chat/lib/stream_chat.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export 'package:rate_limiter/rate_limiter.dart';
1717
export 'package:uuid/uuid.dart';
1818

1919
export 'src/client/channel.dart';
20+
export 'src/client/channel_delivery_reporter.dart';
2021
export 'src/client/client.dart';
2122
export 'src/client/key_stroke_handler.dart';
2223
export 'src/client/retry_policy.dart';

packages/stream_chat/test/fixtures/read.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@
44
},
55
"last_read": "2020-01-28T22:17:30.966485504Z",
66
"unread_messages": 10,
7-
"last_read_message_id": "8cc1301d-2d47-4305-945a-cd8e19b736d6"
7+
"last_read_message_id": "8cc1301d-2d47-4305-945a-cd8e19b736d6",
8+
"last_delivered_at": "2020-01-28T22:17:30.966485504Z",
9+
"last_delivered_message_id": "8cc1301d-2d47-4305-945a-cd8e19b736d6"
810
}

packages/stream_chat/test/src/client/channel_test.dart

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4361,56 +4361,8 @@ void main() {
43614361
expect(updatedRead?.lastRead.isAtSameMomentAs(DateTime(2022)), isTrue);
43624362
});
43634363

4364-
test('should update read state on notification mark read event',
4365-
() async {
4366-
// Create the current read state
4367-
final currentUser = User(id: 'test-user');
4368-
final currentRead = Read(
4369-
user: currentUser,
4370-
lastRead: DateTime(2020),
4371-
unreadMessages: 10,
4372-
);
4373-
4374-
// Setup initial read state
4375-
channel.state?.updateChannelState(
4376-
channel.state!.channelState.copyWith(
4377-
read: [currentRead],
4378-
),
4379-
);
4380-
4381-
// Verify initial state
4382-
final read = channel.state?.read.first;
4383-
expect(read?.user.id, 'test-user');
4384-
expect(read?.unreadMessages, 10);
4385-
expect(read?.lastReadMessageId, isNull);
4386-
expect(read?.lastRead.isAtSameMomentAs(DateTime(2020)), isTrue);
4387-
4388-
// Create mark read notification event
4389-
final markReadEvent = Event(
4390-
cid: channel.cid,
4391-
type: EventType.notificationMarkRead,
4392-
user: currentUser,
4393-
createdAt: DateTime(2022),
4394-
unreadMessages: 0,
4395-
lastReadMessageId: 'message-123',
4396-
);
4397-
4398-
// Dispatch event
4399-
client.addEvent(markReadEvent);
4400-
4401-
// Wait for event to be processed
4402-
await Future.delayed(Duration.zero);
4403-
4404-
// Verify read state is updated
4405-
final updatedRead = channel.state?.read.first;
4406-
expect(updatedRead?.user.id, 'test-user');
4407-
expect(updatedRead?.unreadMessages, 0);
4408-
expect(updatedRead?.lastReadMessageId, 'message-123');
4409-
expect(updatedRead?.lastRead.isAtSameMomentAs(DateTime(2022)), isTrue);
4410-
});
4411-
44124364
test(
4413-
'should add a new read state if not exist on notification mark read',
4365+
'should add a new read state if not exist on message read event',
44144366
() async {
44154367
// Create the current read state
44164368
final currentUser = User(id: 'test-user');
@@ -4422,7 +4374,7 @@ void main() {
44224374
// Create mark read notification event
44234375
final markReadEvent = Event(
44244376
cid: channel.cid,
4425-
type: EventType.notificationMarkRead,
4377+
type: EventType.messageRead,
44264378
user: currentUser,
44274379
createdAt: DateTime(2022),
44284380
unreadMessages: 0,

packages/stream_chat/test/src/core/models/read_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ void main() {
1212
expect(read.user.id, 'bbb19d9a-ee50-45bc-84e5-0584e79d0c9e');
1313
expect(read.unreadMessages, 10);
1414
expect(read.lastReadMessageId, '8cc1301d-2d47-4305-945a-cd8e19b736d6');
15+
expect(
16+
read.lastDeliveredAt,
17+
DateTime.parse('2020-01-28T22:17:30.966485504Z'),
18+
);
19+
expect(
20+
read.lastDeliveredMessageId,
21+
'8cc1301d-2d47-4305-945a-cd8e19b736d6',
22+
);
1523
});
1624

1725
test('should serialize to json correctly', () {
@@ -20,13 +28,17 @@ void main() {
2028
user: User(id: 'bbb19d9a-ee50-45bc-84e5-0584e79d0c9e'),
2129
unreadMessages: 10,
2230
lastReadMessageId: '8cc1301d-2d47-4305-945a-cd8e19b736d6',
31+
lastDeliveredAt: DateTime.parse('2020-01-28T22:17:30.966485504Z'),
32+
lastDeliveredMessageId: '8cc1301d-2d47-4305-945a-cd8e19b736d6',
2333
);
2434

2535
expect(read.toJson(), {
2636
'user': {'id': 'bbb19d9a-ee50-45bc-84e5-0584e79d0c9e'},
2737
'last_read': '2020-01-28T22:17:30.966485Z',
2838
'unread_messages': 10,
2939
'last_read_message_id': '8cc1301d-2d47-4305-945a-cd8e19b736d6',
40+
'last_delivered_at': '2020-01-28T22:17:30.966485Z',
41+
'last_delivered_message_id': '8cc1301d-2d47-4305-945a-cd8e19b736d6',
3042
});
3143
});
3244

@@ -46,6 +58,8 @@ void main() {
4658
lastRead: DateTime.parse('2021-01-28T22:17:30.966485504Z'),
4759
unreadMessages: 2,
4860
lastReadMessageId: 'last_test',
61+
lastDeliveredAt: DateTime.parse('2021-01-28T22:17:30.966485504Z'),
62+
lastDeliveredMessageId: 'last_delivered_test',
4963
);
5064

5165
expect(
@@ -55,6 +69,10 @@ void main() {
5569
expect(newRead.user.id, 'test');
5670
expect(newRead.unreadMessages, 2);
5771
expect(newRead.lastReadMessageId, 'last_test');
72+
expect(
73+
newRead.lastDeliveredAt,
74+
DateTime.parse('2021-01-28T22:17:30.966485504Z'),
75+
);
5876
});
5977
});
6078
}

packages/stream_chat/test/src/fakes.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,16 @@ class FakeClientState extends Fake implements ClientState {
155155
@override
156156
int totalUnreadCount = 0;
157157

158+
final _channels = <String, Channel>{};
159+
160+
@override
161+
void addChannels(Map<String, Channel> channelMap) {
162+
_channels.addAll(channelMap);
163+
}
164+
158165
@override
159166
void removeChannel(String channelCid) {
160-
return;
167+
_channels.remove(channelCid);
161168
}
162169
}
163170

packages/stream_chat/test/src/mocks.dart

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:logging/logging.dart';
33
import 'package:mocktail/mocktail.dart';
44
import 'package:rxdart/rxdart.dart';
55
import 'package:stream_chat/src/client/channel.dart';
6+
import 'package:stream_chat/src/client/channel_delivery_reporter.dart';
67
import 'package:stream_chat/src/client/client.dart';
78
import 'package:stream_chat/src/core/api/attachment_file_uploader.dart';
89
import 'package:stream_chat/src/core/api/channel_api.dart';
@@ -96,6 +97,13 @@ class MockStreamChatClient extends Mock implements StreamChatClient {
9697
@override
9798
bool get persistenceEnabled => false;
9899

100+
ChannelDeliveryReporter? _deliveryReporter;
101+
102+
@override
103+
ChannelDeliveryReporter get channelDeliveryReporter {
104+
return _deliveryReporter ??= MockChannelDeliveryReporter();
105+
}
106+
99107
@override
100108
Stream<Event> get eventStream => _eventController.stream;
101109
final _eventController = PublishSubject<Event>();
@@ -165,3 +173,24 @@ class MockRetryQueueChannel extends Mock implements Channel {
165173
}
166174

167175
class MockWebSocket extends Mock implements WebSocket {}
176+
177+
class MockChannelDeliveryReporter extends Mock
178+
implements ChannelDeliveryReporter {
179+
@override
180+
Future<void> submitForDelivery(Iterable<Channel> channels) {
181+
return Future.value();
182+
}
183+
184+
@override
185+
Future<void> reconcileDelivery(Iterable<Channel> channels) {
186+
return Future.value();
187+
}
188+
189+
@override
190+
Future<void> cancelDelivery(Iterable<String> channels) {
191+
return Future.value();
192+
}
193+
194+
@override
195+
void cancel() {}
196+
}

0 commit comments

Comments
 (0)