Files
IKAR/test/scroll_down_unread_count_test.dart
T

163 lines
3.7 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:ikar/backend/modules/chats.dart';
import 'package:ikar/backend/modules/messages.dart';
import 'package:ikar/frontend/screens/chats/chat/unread_message_count.dart';
CachedChat snapshot({int unread = 10, int read = 100, int last = 110}) =>
CachedChat(
id: 2,
accountId: 1,
type: 'CHANNEL',
unreadCount: unread,
lastEventTime: last,
lastMsgTime: last,
cachedAt: 0,
dontDisturbUntil: ChatsModule.muteOff,
isOnline: false,
seenTime: 0,
participants: {1: read},
);
CachedMessage message(
int time, {
int sender = 2,
bool control = false,
bool deleted = false,
}) => CachedMessage(
id: '$time',
accountId: 1,
chatId: 2,
senderId: sender,
time: time,
isControl: control,
deleted: deleted,
);
void main() {
test(
'opening a chat counts existing unread messages before history loads',
() {
expect(
countUnreadMessages(
chat: snapshot(unread: 200),
messages: [],
accountId: 1,
readTime: 100,
newestLoaded: false,
),
200,
);
},
);
test('old read history does not acquire an unread badge', () {
expect(
countUnreadMessages(
chat: snapshot(unread: 0, read: 110),
messages: [message(90), message(110)],
accountId: 1,
readTime: 110,
newestLoaded: true,
),
0,
);
});
test('reading part of the loaded tail reduces the badge immediately', () {
expect(
countUnreadMessages(
chat: snapshot(),
messages: [for (var t = 101; t <= 110; t++) message(t)],
accountId: 1,
readTime: 106,
newestLoaded: true,
),
4,
);
});
test('unloaded newer messages remain counted when reading a middle page', () {
expect(
countUnreadMessages(
chat: snapshot(unread: 100, last: 200),
messages: [for (var t = 101; t <= 110; t++) message(t)],
accountId: 1,
readTime: 106,
newestLoaded: false,
),
94,
);
});
test(
'reaching the last message clears the badge despite a stale snapshot',
() {
expect(
countUnreadMessages(
chat: snapshot(),
messages: [for (var t = 101; t <= 110; t++) message(t)],
accountId: 1,
readTime: 110,
newestLoaded: true,
),
0,
);
},
);
test('live arrivals count once while chat metadata is being saved', () {
final incoming = message(111);
final messages = [message(110), incoming, incoming];
expect(
countUnreadMessages(
chat: snapshot(),
messages: messages,
accountId: 1,
readTime: 100,
newestLoaded: true,
),
11,
);
expect(
countUnreadMessages(
chat: snapshot(unread: 11, last: 111),
messages: messages,
accountId: 1,
readTime: 100,
newestLoaded: true,
),
11,
);
});
test('own, control and deleted arrivals do not add unread posts', () {
expect(
countUnreadMessages(
chat: snapshot(),
messages: [
message(111, sender: 1),
message(112, control: true),
message(113, deleted: true),
],
accountId: 1,
readTime: 100,
newestLoaded: true,
),
10,
);
});
test('a read marker from another device updates the count', () {
expect(
countUnreadMessages(
chat: snapshot(unread: 2, read: 108),
messages: [for (var t = 101; t <= 110; t++) message(t)],
accountId: 1,
readTime: 100,
newestLoaded: true,
),
2,
);
});
}