test(persistence): add test for member dao
Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
@@ -0,0 +1,127 @@
|
|||||||
|
import 'dart:math' as math;
|
||||||
|
|
||||||
|
import 'package:stream_chat/stream_chat.dart';
|
||||||
|
import 'package:stream_chat_persistence/src/dao/dao.dart';
|
||||||
|
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
import '../utils/date_matcher.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
MemberDao memberDao;
|
||||||
|
MoorChatDatabase database;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
database = MoorChatDatabase.testable('testUserId');
|
||||||
|
memberDao = database.memberDao;
|
||||||
|
});
|
||||||
|
|
||||||
|
Future<List<Member>> _prepareTestData(String cid) async {
|
||||||
|
final users = List.generate(3, (index) => User(id: 'testUserId$index'));
|
||||||
|
final memberList = List.generate(
|
||||||
|
3,
|
||||||
|
(index) => Member(
|
||||||
|
user: users[index],
|
||||||
|
banned: math.Random().nextBool(),
|
||||||
|
shadowBanned: math.Random().nextBool(),
|
||||||
|
createdAt: DateTime.now(),
|
||||||
|
isModerator: math.Random().nextBool(),
|
||||||
|
invited: math.Random().nextBool(),
|
||||||
|
inviteAcceptedAt: DateTime.now(),
|
||||||
|
role: 'testRole',
|
||||||
|
updatedAt: DateTime.now(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
await database.userDao.updateUsers(users);
|
||||||
|
await memberDao.updateMembers(cid, memberList);
|
||||||
|
return memberList;
|
||||||
|
}
|
||||||
|
|
||||||
|
test('getMembersByCid', () async {
|
||||||
|
const cid = 'testCid';
|
||||||
|
|
||||||
|
// Should be empty initially
|
||||||
|
final members = await memberDao.getMembersByCid(cid);
|
||||||
|
expect(members, isEmpty);
|
||||||
|
|
||||||
|
// Preparing test data
|
||||||
|
final memberList = await _prepareTestData(cid);
|
||||||
|
|
||||||
|
// Should match the previous test data
|
||||||
|
final fetchedMembers = await memberDao.getMembersByCid(cid);
|
||||||
|
expect(fetchedMembers.length, memberList.length);
|
||||||
|
for (var i = 0; i < fetchedMembers.length; i++) {
|
||||||
|
final member = memberList[i];
|
||||||
|
final fetchedMember = fetchedMembers[i];
|
||||||
|
expect(fetchedMember.user.id, member.user.id);
|
||||||
|
expect(fetchedMember.banned, member.banned);
|
||||||
|
expect(fetchedMember.shadowBanned, member.shadowBanned);
|
||||||
|
expect(fetchedMember.createdAt, isSameDateAs(member.createdAt));
|
||||||
|
expect(fetchedMember.isModerator, member.isModerator);
|
||||||
|
expect(fetchedMember.invited, member.invited);
|
||||||
|
expect(fetchedMember.role, member.role);
|
||||||
|
expect(fetchedMember.updatedAt, isSameDateAs(member.updatedAt));
|
||||||
|
expect(
|
||||||
|
fetchedMember.inviteAcceptedAt,
|
||||||
|
isSameDateAs(member.inviteAcceptedAt),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('updateMembers', () async {
|
||||||
|
const cid = 'testCid';
|
||||||
|
|
||||||
|
// Preparing test data
|
||||||
|
final memberList = await _prepareTestData(cid);
|
||||||
|
|
||||||
|
// Should match the previous test data
|
||||||
|
final fetchedMembers = await memberDao.getMembersByCid(cid);
|
||||||
|
expect(fetchedMembers.length, memberList.length);
|
||||||
|
for (var i = 0; i < fetchedMembers.length; i++) {
|
||||||
|
final member = memberList[i];
|
||||||
|
final fetchedMember = fetchedMembers[i];
|
||||||
|
expect(fetchedMember.user.id, member.user.id);
|
||||||
|
expect(fetchedMember.banned, member.banned);
|
||||||
|
expect(fetchedMember.shadowBanned, member.shadowBanned);
|
||||||
|
expect(fetchedMember.createdAt, isSameDateAs(member.createdAt));
|
||||||
|
expect(fetchedMember.isModerator, member.isModerator);
|
||||||
|
expect(fetchedMember.invited, member.invited);
|
||||||
|
expect(fetchedMember.role, member.role);
|
||||||
|
expect(fetchedMember.updatedAt, isSameDateAs(member.updatedAt));
|
||||||
|
expect(
|
||||||
|
fetchedMember.inviteAcceptedAt,
|
||||||
|
isSameDateAs(member.inviteAcceptedAt),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Updating the last added member
|
||||||
|
final updatedMember = fetchedMembers.last.copyWith(banned: true);
|
||||||
|
await memberDao.updateMembers(cid, [updatedMember]);
|
||||||
|
|
||||||
|
// Last member banned field should match the previous updated user
|
||||||
|
final newFetchedMembers = await memberDao.getMembersByCid(cid);
|
||||||
|
expect(newFetchedMembers.length, fetchedMembers.length);
|
||||||
|
final lastMember = newFetchedMembers.last;
|
||||||
|
expect(lastMember.banned, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('deleteMemberByCids', () async {
|
||||||
|
const cid = 'testCid';
|
||||||
|
|
||||||
|
// Preparing test data
|
||||||
|
final members = await _prepareTestData(cid);
|
||||||
|
final fetchedMembers = await memberDao.getMembersByCid(cid);
|
||||||
|
expect(members.length, fetchedMembers.length);
|
||||||
|
|
||||||
|
// Deleting all the members
|
||||||
|
await memberDao.deleteMemberByCids([cid]);
|
||||||
|
|
||||||
|
// Fetched member list should be empty
|
||||||
|
final newFetchedMembers = await memberDao.getMembersByCid(cid);
|
||||||
|
expect(newFetchedMembers, isEmpty);
|
||||||
|
});
|
||||||
|
|
||||||
|
tearDown(() async {
|
||||||
|
await database.disconnect();
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user