From a9ff1aab1fe66abe876cd29a02f40a12b2da7556 Mon Sep 17 00:00:00 2001 From: MohitMaulekhi Date: Sat, 4 Jan 2025 18:38:31 +0530 Subject: [PATCH 1/3] test for chat --- test/service_tests/chat_service_test.dart | 106 ++++++++++++++++++++-- 1 file changed, 98 insertions(+), 8 deletions(-) diff --git a/test/service_tests/chat_service_test.dart b/test/service_tests/chat_service_test.dart index cd6da0d8d..3b239d629 100644 --- a/test/service_tests/chat_service_test.dart +++ b/test/service_tests/chat_service_test.dart @@ -1,10 +1,14 @@ // ignore_for_file: talawa_api_doc // ignore_for_file: talawa_good_doc_comments +import 'dart:async'; + import 'package:flutter_test/flutter_test.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:mockito/mockito.dart'; import 'package:talawa/locator.dart'; +import 'package:talawa/models/chats/chat_list_tile_data_model.dart'; +import 'package:talawa/models/chats/chat_message.dart'; import 'package:talawa/services/chat_service.dart'; import 'package:talawa/services/database_mutation_functions.dart'; import 'package:talawa/utils/chat_queries.dart'; @@ -17,7 +21,7 @@ void main() { group('Test ChatService', () { test('Test SendMessageToDirectChat Method', () async { final dataBaseMutationFunctions = locator(); - const id = "1"; + const chatId = "1"; const messageContent = "test"; final query = ChatQueries().sendMessageToDirectChat(); @@ -25,7 +29,7 @@ void main() { dataBaseMutationFunctions.gqlAuthMutation( query, variables: { - "chatId": id, + "chatId": chatId, "messageContent": messageContent, }, ), @@ -34,7 +38,7 @@ void main() { options: QueryOptions(document: gql(query)), data: { 'sendMessageToDirectChat': { - '_id': id, + '_id': chatId, 'messageContent': messageContent, 'sender': { 'firstName': 'Mohamed', @@ -48,16 +52,38 @@ void main() { ), ); final service = ChatService(); + final completer = Completer(); + final messages = []; + final subscription = service.chatMessagesStream.listen((message) { + messages.add(message); + completer.complete(); + }); + + await service.sendMessageToDirectChat( - id, + chatId, messageContent, ); + + await completer.future; + + await subscription.cancel(); + + print(messages.first.id); + expect(messages, isA>()); + expect(messages.length, 1); + expect(messages.first.messageContent, messageContent); + expect(messages.first.sender?.firstName, 'Mohamed'); + expect(messages.first.receiver?.firstName, 'Ali'); + }); + + test('getDirectChatsByUserId Method', () async { final dataBaseMutationFunctions = locator(); const userId = "xzy1"; final query = ChatQueries().fetchDirectChatsByUserId(userId); - // when(locator()).thenAnswer((_) => UserConfig()); + when(dataBaseMutationFunctions.gqlAuthQuery(query)).thenAnswer( (_) async => QueryResult( options: QueryOptions( @@ -66,17 +92,40 @@ void main() { data: { 'directChatsByUserID': [ { - 'users': [], - '_id': 'xzy1', - } + 'users': [ + {'_id': 'user1', 'firstName': 'John', 'email': 'john@example.com'}, + {'_id': 'xzy1', 'firstName': 'Jane', 'email': 'jane@example.com'}, + ], + '_id': 'chat1', + }, ], }, source: QueryResultSource.network, ), ); final service = ChatService(); + final completer = Completer(); + final chats = []; + final subscription = service.chatListStream.listen((chat) { + chats.add(chat); + if (!completer.isCompleted) { + completer.complete(); + } + }); + await service.getDirectChatsByUserId(); + + await completer.future; + + await subscription.cancel(); + + expect(chats, isA>()); + expect(chats.length, 1); + expect(chats.first.users?.length, 2); + expect(chats.first.users?.first.firstName, 'John'); }); + + test("getDirectChatMessagesByChatId Method", () async { final dataBaseMutationFunctions = locator(); const chatId = 'test'; @@ -91,6 +140,16 @@ void main() { { '_id': 'test', 'messageContent': 'test', + 'sender': { + '_id': 'user1', + 'firstName': 'John', + 'image': 'image_url_1', + }, + 'receiver': { + '_id': 'user2', + 'firstName': 'Jane', + 'image': 'image_url_2', + }, } ], }, @@ -99,7 +158,38 @@ void main() { ); final service = ChatService(); + final completer = Completer(); + final messages = []; + final subscription = service.chatMessagesStream.listen((message) { + messages.add(message); + if (!completer.isCompleted) { + completer.complete(); + } + }); + await service.getDirectChatMessagesByChatId(chatId); + + await completer.future; + + await subscription.cancel(); + + expect(messages, isA>()); + expect(messages.length, 1); + expect(messages.first.messageContent, 'test'); + expect(messages.first.sender?.firstName, 'John'); + expect(messages.first.receiver?.firstName, 'Jane'); + }); + + + test("chatListStream return a stream of ChatListTileDataModel", () { + final service = ChatService(); + expect(service.chatListStream, isA>()); + }); + + test('chatMessagesStream returns a stream of ChatMessage', () async { + final chatService = ChatService(); + expect(chatService.chatMessagesStream, isA>()); }); + }); } From 0199435c0ae9ca9d29a525fadcdf5213c65af2c5 Mon Sep 17 00:00:00 2001 From: MohitMaulekhi Date: Sat, 4 Jan 2025 18:43:33 +0530 Subject: [PATCH 2/3] test for chat --- test/service_tests/chat_service_test.dart | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/test/service_tests/chat_service_test.dart b/test/service_tests/chat_service_test.dart index 3b239d629..8495bef2b 100644 --- a/test/service_tests/chat_service_test.dart +++ b/test/service_tests/chat_service_test.dart @@ -59,7 +59,6 @@ void main() { completer.complete(); }); - await service.sendMessageToDirectChat( chatId, messageContent, @@ -75,10 +74,8 @@ void main() { expect(messages.first.messageContent, messageContent); expect(messages.first.sender?.firstName, 'Mohamed'); expect(messages.first.receiver?.firstName, 'Ali'); - }); - test('getDirectChatsByUserId Method', () async { final dataBaseMutationFunctions = locator(); const userId = "xzy1"; @@ -93,8 +90,16 @@ void main() { 'directChatsByUserID': [ { 'users': [ - {'_id': 'user1', 'firstName': 'John', 'email': 'john@example.com'}, - {'_id': 'xzy1', 'firstName': 'Jane', 'email': 'jane@example.com'}, + { + '_id': 'user1', + 'firstName': 'John', + 'email': 'john@example.com' + }, + { + '_id': 'xzy1', + 'firstName': 'Jane', + 'email': 'jane@example.com' + }, ], '_id': 'chat1', }, @@ -104,7 +109,7 @@ void main() { ), ); final service = ChatService(); - final completer = Completer(); + final completer = Completer(); final chats = []; final subscription = service.chatListStream.listen((chat) { chats.add(chat); @@ -125,7 +130,6 @@ void main() { expect(chats.first.users?.first.firstName, 'John'); }); - test("getDirectChatMessagesByChatId Method", () async { final dataBaseMutationFunctions = locator(); const chatId = 'test'; @@ -180,7 +184,6 @@ void main() { expect(messages.first.receiver?.firstName, 'Jane'); }); - test("chatListStream return a stream of ChatListTileDataModel", () { final service = ChatService(); expect(service.chatListStream, isA>()); @@ -190,6 +193,5 @@ void main() { final chatService = ChatService(); expect(chatService.chatMessagesStream, isA>()); }); - }); } From 422d04b514b6989b53a35be4c4dd5beed11d8649 Mon Sep 17 00:00:00 2001 From: MohitMaulekhi Date: Sat, 4 Jan 2025 18:47:27 +0530 Subject: [PATCH 3/3] Test ready for chat service --- test/service_tests/chat_service_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/service_tests/chat_service_test.dart b/test/service_tests/chat_service_test.dart index 8495bef2b..a93e19853 100644 --- a/test/service_tests/chat_service_test.dart +++ b/test/service_tests/chat_service_test.dart @@ -93,12 +93,12 @@ void main() { { '_id': 'user1', 'firstName': 'John', - 'email': 'john@example.com' + 'email': 'john@example.com', }, { '_id': 'xzy1', 'firstName': 'Jane', - 'email': 'jane@example.com' + 'email': 'jane@example.com', }, ], '_id': 'chat1',