test(persistence): add getMessagesByCid along with quotedMessage test in message, pinned message dao.

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-03-19 17:34:41 +05:30
parent 252783adf6
commit ab9990e5bd
2 changed files with 92 additions and 10 deletions
@@ -16,19 +16,20 @@ void main() {
Future<List<Message>> _prepareTestData( Future<List<Message>> _prepareTestData(
String cid, { String cid, {
bool quoted = false,
bool threads = false, bool threads = false,
bool mapAllThreadToFirstMessage = false, bool mapAllThreadToFirstMessage = false,
int count = 3, int count = 3,
}) async { }) async {
final users = List.generate(count, (index) => User(id: 'testUserId$index'));
final messages = List.generate( final messages = List.generate(
count, count,
(index) => Message( (index) => Message(
id: 'testMessageId$cid$index', id: 'testMessageId$cid$index',
type: 'testType', type: 'testType',
user: User(id: 'testUserId$index'), user: users[index],
createdAt: DateTime.now(), createdAt: DateTime.now(),
shadowed: math.Random().nextBool(), shadowed: math.Random().nextBool(),
showInChannel: math.Random().nextBool(),
replyCount: index, replyCount: index,
updatedAt: DateTime.now(), updatedAt: DateTime.now(),
extraData: {'extra_test_field': 'extraTestData'}, extraData: {'extra_test_field': 'extraTestData'},
@@ -38,17 +39,34 @@ void main() {
pinnedBy: User(id: 'testUserId$index'), pinnedBy: User(id: 'testUserId$index'),
), ),
); );
final quotedMessages = List.generate(
count,
(index) => Message(
id: 'testQuotedMessageId$cid$index',
type: 'testType',
user: users[index],
createdAt: DateTime.now(),
shadowed: math.Random().nextBool(),
replyCount: index,
updatedAt: DateTime.now(),
extraData: {'extra_test_field': 'extraTestData'},
text: 'Dummy text #$index',
quotedMessageId: messages[index].id,
pinned: math.Random().nextBool(),
pinnedAt: DateTime.now(),
pinnedBy: User(id: 'testUserId$index'),
),
);
final threadMessages = List.generate( final threadMessages = List.generate(
count, count,
(index) => Message( (index) => Message(
id: 'testThreadMessageId$cid$index', id: 'testThreadMessageId$cid$index',
type: 'testType', type: 'testType',
user: User(id: 'testUserId$index'), user: users[index],
parentId: parentId:
mapAllThreadToFirstMessage ? messages[0].id : messages[index].id, mapAllThreadToFirstMessage ? messages[0].id : messages[index].id,
createdAt: DateTime.now(), createdAt: DateTime.now(),
shadowed: math.Random().nextBool(), shadowed: math.Random().nextBool(),
showInChannel: math.Random().nextBool(),
replyCount: index, replyCount: index,
updatedAt: DateTime.now(), updatedAt: DateTime.now(),
extraData: {'extra_test_field': 'extraTestData'}, extraData: {'extra_test_field': 'extraTestData'},
@@ -58,7 +76,12 @@ void main() {
pinnedBy: User(id: 'testUserId$index'), pinnedBy: User(id: 'testUserId$index'),
), ),
); );
final allMessages = [...messages, if (threads) ...threadMessages]; final allMessages = [
...messages,
if (quoted) ...quotedMessages,
if (threads) ...threadMessages
];
await database.userDao.updateUsers(users);
await messageDao.updateMessages(cid, allMessages); await messageDao.updateMessages(cid, allMessages);
return allMessages; return allMessages;
} }
@@ -241,6 +264,24 @@ void main() {
} }
}); });
test('getMessagesByCid along with quotedMessage', () async {
const cid = 'testCid';
// Should be empty initially
final messages = await messageDao.getMessagesByCid(cid);
expect(messages, isEmpty);
// Preparing test data
final insertedMessages = await _prepareTestData(cid, quoted: true);
expect(insertedMessages, isNotEmpty);
// Fetched message should match the inserted messages
final fetchedMessages = await messageDao.getMessagesByCid(cid);
expect(fetchedMessages.length, insertedMessages.length);
final quoted = fetchedMessages.where((it) => it.quotedMessage != null);
expect(quoted.length, insertedMessages.length / 2);
});
test('getMessagesByCid along with pagination', () async { test('getMessagesByCid along with pagination', () async {
const cid = 'testCid'; const cid = 'testCid';
const pagination = PaginationParams( const pagination = PaginationParams(
@@ -16,19 +16,20 @@ void main() {
Future<List<Message>> _prepareTestData( Future<List<Message>> _prepareTestData(
String cid, { String cid, {
bool quoted = false,
bool threads = false, bool threads = false,
bool mapAllThreadToFirstMessage = false, bool mapAllThreadToFirstMessage = false,
int count = 3, int count = 3,
}) async { }) async {
final users = List.generate(count, (index) => User(id: 'testUserId$index'));
final messages = List.generate( final messages = List.generate(
count, count,
(index) => Message( (index) => Message(
id: 'testMessageId$cid$index', id: 'testMessageId$cid$index',
type: 'testType', type: 'testType',
user: User(id: 'testUserId$index'), user: users[index],
createdAt: DateTime.now(), createdAt: DateTime.now(),
shadowed: math.Random().nextBool(), shadowed: math.Random().nextBool(),
showInChannel: math.Random().nextBool(),
replyCount: index, replyCount: index,
updatedAt: DateTime.now(), updatedAt: DateTime.now(),
extraData: {'extra_test_field': 'extraTestData'}, extraData: {'extra_test_field': 'extraTestData'},
@@ -38,17 +39,34 @@ void main() {
pinnedBy: User(id: 'testUserId$index'), pinnedBy: User(id: 'testUserId$index'),
), ),
); );
final quotedMessages = List.generate(
count,
(index) => Message(
id: 'testQuotedMessageId$cid$index',
type: 'testType',
user: users[index],
createdAt: DateTime.now(),
shadowed: math.Random().nextBool(),
replyCount: index,
updatedAt: DateTime.now(),
extraData: {'extra_test_field': 'extraTestData'},
text: 'Dummy text #$index',
quotedMessageId: messages[index].id,
pinned: math.Random().nextBool(),
pinnedAt: DateTime.now(),
pinnedBy: User(id: 'testUserId$index'),
),
);
final threadMessages = List.generate( final threadMessages = List.generate(
count, count,
(index) => Message( (index) => Message(
id: 'testThreadMessageId$cid$index', id: 'testThreadMessageId$cid$index',
type: 'testType', type: 'testType',
user: User(id: 'testUserId$index'), user: users[index],
parentId: parentId:
mapAllThreadToFirstMessage ? messages[0].id : messages[index].id, mapAllThreadToFirstMessage ? messages[0].id : messages[index].id,
createdAt: DateTime.now(), createdAt: DateTime.now(),
shadowed: math.Random().nextBool(), shadowed: math.Random().nextBool(),
showInChannel: math.Random().nextBool(),
replyCount: index, replyCount: index,
updatedAt: DateTime.now(), updatedAt: DateTime.now(),
extraData: {'extra_test_field': 'extraTestData'}, extraData: {'extra_test_field': 'extraTestData'},
@@ -58,7 +76,12 @@ void main() {
pinnedBy: User(id: 'testUserId$index'), pinnedBy: User(id: 'testUserId$index'),
), ),
); );
final allMessages = [...messages, if (threads) ...threadMessages]; final allMessages = [
...messages,
if (quoted) ...quotedMessages,
if (threads) ...threadMessages
];
await database.userDao.updateUsers(users);
await pinnedMessageDao.updateMessages(cid, allMessages); await pinnedMessageDao.updateMessages(cid, allMessages);
return allMessages; return allMessages;
} }
@@ -242,6 +265,24 @@ void main() {
} }
}); });
test('getMessagesByCid along with quotedMessage', () async {
const cid = 'testCid';
// Should be empty initially
final messages = await pinnedMessageDao.getMessagesByCid(cid);
expect(messages, isEmpty);
// Preparing test data
final insertedMessages = await _prepareTestData(cid, quoted: true);
expect(insertedMessages, isNotEmpty);
// Fetched message should match the inserted messages
final fetchedMessages = await pinnedMessageDao.getMessagesByCid(cid);
expect(fetchedMessages.length, insertedMessages.length);
final quoted = fetchedMessages.where((it) => it.quotedMessage != null);
expect(quoted.length, insertedMessages.length / 2);
});
test('getMessagesByCid along with pagination', () async { test('getMessagesByCid along with pagination', () async {
const cid = 'testCid'; const cid = 'testCid';
const pagination = PaginationParams( const pagination = PaginationParams(