From ab9990e5bdd5f27c964340c84ff31549eb20fe78 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Fri, 19 Mar 2021 17:34:41 +0530 Subject: [PATCH] test(persistence): add getMessagesByCid along with quotedMessage test in message, pinned message dao. Signed-off-by: Sahil Kumar --- .../test/src/dao/message_dao_test.dart | 51 +++++++++++++++++-- .../test/src/dao/pinned_message_dao_test.dart | 51 +++++++++++++++++-- 2 files changed, 92 insertions(+), 10 deletions(-) diff --git a/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart b/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart index 377c949e..85e0a795 100644 --- a/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart +++ b/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart @@ -16,19 +16,20 @@ void main() { Future> _prepareTestData( String cid, { + bool quoted = false, bool threads = false, bool mapAllThreadToFirstMessage = false, int count = 3, }) async { + final users = List.generate(count, (index) => User(id: 'testUserId$index')); final messages = List.generate( count, (index) => Message( id: 'testMessageId$cid$index', type: 'testType', - user: User(id: 'testUserId$index'), + user: users[index], createdAt: DateTime.now(), shadowed: math.Random().nextBool(), - showInChannel: math.Random().nextBool(), replyCount: index, updatedAt: DateTime.now(), extraData: {'extra_test_field': 'extraTestData'}, @@ -38,17 +39,34 @@ void main() { 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( count, (index) => Message( id: 'testThreadMessageId$cid$index', type: 'testType', - user: User(id: 'testUserId$index'), + user: users[index], parentId: mapAllThreadToFirstMessage ? messages[0].id : messages[index].id, createdAt: DateTime.now(), shadowed: math.Random().nextBool(), - showInChannel: math.Random().nextBool(), replyCount: index, updatedAt: DateTime.now(), extraData: {'extra_test_field': 'extraTestData'}, @@ -58,7 +76,12 @@ void main() { 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); 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 { const cid = 'testCid'; const pagination = PaginationParams( diff --git a/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart b/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart index 66875990..26c652db 100644 --- a/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart +++ b/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart @@ -16,19 +16,20 @@ void main() { Future> _prepareTestData( String cid, { + bool quoted = false, bool threads = false, bool mapAllThreadToFirstMessage = false, int count = 3, }) async { + final users = List.generate(count, (index) => User(id: 'testUserId$index')); final messages = List.generate( count, (index) => Message( id: 'testMessageId$cid$index', type: 'testType', - user: User(id: 'testUserId$index'), + user: users[index], createdAt: DateTime.now(), shadowed: math.Random().nextBool(), - showInChannel: math.Random().nextBool(), replyCount: index, updatedAt: DateTime.now(), extraData: {'extra_test_field': 'extraTestData'}, @@ -38,17 +39,34 @@ void main() { 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( count, (index) => Message( id: 'testThreadMessageId$cid$index', type: 'testType', - user: User(id: 'testUserId$index'), + user: users[index], parentId: mapAllThreadToFirstMessage ? messages[0].id : messages[index].id, createdAt: DateTime.now(), shadowed: math.Random().nextBool(), - showInChannel: math.Random().nextBool(), replyCount: index, updatedAt: DateTime.now(), extraData: {'extra_test_field': 'extraTestData'}, @@ -58,7 +76,12 @@ void main() { 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); 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 { const cid = 'testCid'; const pagination = PaginationParams(