chore: minor fix, add test

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2023-07-18 16:35:35 +05:30
parent b6cc2e0899
commit 678fe4e807
2 changed files with 78 additions and 64 deletions
@@ -272,17 +272,14 @@ class StreamChatPersistenceClient extends ChatPersistenceClient {
channels.map((e) => getChannelStateByCid(e.cid)), channels.map((e) => getChannelStateByCid(e.cid)),
); );
// Only sort the channel states if the channels are not already sorted. // Sort the channel states
if (channelStateSort == null) { var comparator = _defaultChannelStateComparator;
var comparator = _defaultChannelStateComparator; if (channelStateSort != null && channelStateSort.isNotEmpty) {
if (channelStateSort != null && channelStateSort.isNotEmpty) { comparator = _combineComparators(
comparator = _combineComparators( channelStateSort.map((it) => it.comparator).withNullifyer,
channelStateSort.map((it) => it.comparator).withNullifyer, );
);
}
channelStates.sort(comparator);
} }
channelStates.sort(comparator);
final offset = paginationParams?.offset; final offset = paginationParams?.offset;
if (offset != null && offset > 0 && channelStates.isNotEmpty) { if (offset != null && offset > 0 && channelStates.isNotEmpty) {
@@ -245,64 +245,81 @@ void main() {
.called(1); .called(1);
}); });
test('getChannelStates', () async { group('getChannelState', () {
const cid = 'testType:testId'; test('should throw if sort is provided without comparator', () async {
final channels = List.generate(3, (index) => ChannelModel(cid: cid)); final sort = [
final messages = List.generate(3, (index) => Message()); const SortOption<ChannelState>(
final members = List.generate(3, (index) => Member()); 'testField',
final reads = List.generate( direction: SortOption.ASC,
3, ),
(index) => Read( ];
user: User(id: 'testUserId$index'),
lastRead: DateTime.now(),
),
);
final channel = ChannelModel(cid: cid);
final channelStates = channels
.map(
(channel) => ChannelState(
channel: channel,
messages: messages,
pinnedMessages: messages,
members: members,
read: reads,
),
)
.toList(growable: false);
when(() => mockDatabase.channelQueryDao.getChannels()) expect(
.thenAnswer((_) async => channels); () => client.getChannelStates(channelStateSort: sort),
when(() => mockDatabase.memberDao.getMembersByCid(cid)) throwsA(isA<ArgumentError>()),
.thenAnswer((_) async => members); );
when(() => mockDatabase.readDao.getReadsByCid(cid)) });
.thenAnswer((_) async => reads);
when(() => mockDatabase.channelDao.getChannelByCid(cid))
.thenAnswer((_) async => channel);
when(() => mockDatabase.messageDao.getMessagesByCid(cid))
.thenAnswer((_) async => messages);
when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid))
.thenAnswer((_) async => messages);
final fetchedChannelStates = await client.getChannelStates(); test('should work fine', () async {
expect(fetchedChannelStates.length, channelStates.length); const cid = 'testType:testId';
final channels = List.generate(3, (index) => ChannelModel(cid: cid));
final messages = List.generate(3, (index) => Message());
final members = List.generate(3, (index) => Member());
final reads = List.generate(
3,
(index) => Read(
user: User(id: 'testUserId$index'),
lastRead: DateTime.now(),
),
);
final channel = ChannelModel(cid: cid);
final channelStates = channels
.map(
(channel) => ChannelState(
channel: channel,
messages: messages,
pinnedMessages: messages,
members: members,
read: reads,
),
)
.toList(growable: false);
for (var i = 0; i < fetchedChannelStates.length; i++) { when(() => mockDatabase.channelQueryDao.getChannels())
final original = channelStates[i]; .thenAnswer((_) async => channels);
final fetched = fetchedChannelStates[i]; when(() => mockDatabase.memberDao.getMembersByCid(cid))
expect(fetched.members?.length, original.members?.length); .thenAnswer((_) async => members);
expect(fetched.messages?.length, original.messages?.length); when(() => mockDatabase.readDao.getReadsByCid(cid))
expect(fetched.pinnedMessages?.length, original.pinnedMessages?.length); .thenAnswer((_) async => reads);
expect(fetched.read?.length, original.read?.length); when(() => mockDatabase.channelDao.getChannelByCid(cid))
expect(fetched.channel!.cid, original.channel!.cid); .thenAnswer((_) async => channel);
} when(() => mockDatabase.messageDao.getMessagesByCid(cid))
.thenAnswer((_) async => messages);
when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid))
.thenAnswer((_) async => messages);
verify(() => mockDatabase.channelQueryDao.getChannels()).called(1); final fetchedChannelStates = await client.getChannelStates();
verify(() => mockDatabase.memberDao.getMembersByCid(cid)).called(3); expect(fetchedChannelStates.length, channelStates.length);
verify(() => mockDatabase.readDao.getReadsByCid(cid)).called(3);
verify(() => mockDatabase.channelDao.getChannelByCid(cid)).called(3); for (var i = 0; i < fetchedChannelStates.length; i++) {
verify(() => mockDatabase.messageDao.getMessagesByCid(cid)).called(3); final original = channelStates[i];
verify(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) final fetched = fetchedChannelStates[i];
.called(3); expect(fetched.members?.length, original.members?.length);
expect(fetched.messages?.length, original.messages?.length);
expect(
fetched.pinnedMessages?.length, original.pinnedMessages?.length);
expect(fetched.read?.length, original.read?.length);
expect(fetched.channel!.cid, original.channel!.cid);
}
verify(() => mockDatabase.channelQueryDao.getChannels()).called(1);
verify(() => mockDatabase.memberDao.getMembersByCid(cid)).called(3);
verify(() => mockDatabase.readDao.getReadsByCid(cid)).called(3);
verify(() => mockDatabase.channelDao.getChannelByCid(cid)).called(3);
verify(() => mockDatabase.messageDao.getMessagesByCid(cid)).called(3);
verify(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid))
.called(3);
});
}); });
test('updateChannelQueries', () async { test('updateChannelQueries', () async {