chore: minor fix, add test
Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user