diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index e173c703..eee18356 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -989,11 +989,11 @@ class Channel { /// List the reactions for a message in the channel Future getReactions( String messageId, { - PaginationParams? options, + PaginationParams? pagination, }) => _client.getReactions( messageId, - options: options, + pagination: pagination, ); /// Retrieves a list of messages by ID diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index b579f030..93949df3 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -1149,11 +1149,11 @@ class StreamChatClient { /// Get all the reactions for a [messageId] Future getReactions( String messageId, { - PaginationParams? options, + PaginationParams? pagination, }) => _chatApi.message.getReactions( messageId, - options: options, + pagination: pagination, ); /// Update the given message diff --git a/packages/stream_chat/lib/src/core/api/channel_api.dart b/packages/stream_chat/lib/src/core/api/channel_api.dart index 7660c125..68f6c4f8 100644 --- a/packages/stream_chat/lib/src/core/api/channel_api.dart +++ b/packages/stream_chat/lib/src/core/api/channel_api.dart @@ -76,7 +76,7 @@ class ChannelApi { // pagination ...paginationParams.toJson() - }) + }), }, ); return QueryChannelsResponse.fromJson(response.data); diff --git a/packages/stream_chat/lib/src/core/api/general_api.dart b/packages/stream_chat/lib/src/core/api/general_api.dart index 8eeeaa5f..c6243148 100644 --- a/packages/stream_chat/lib/src/core/api/general_api.dart +++ b/packages/stream_chat/lib/src/core/api/general_api.dart @@ -79,16 +79,17 @@ class GeneralApi { queryParameters: { 'payload': jsonEncode({ 'type': channelType, + 'filter_conditions': filter ?? {}, if (channelId != null) 'id': channelId else if (members != null) 'members': members, if (sort != null) 'sort': sort, - if (filter != null) 'filter': filter, if (pagination != null) ...pagination.toJson(), }), }, ); + return QueryMembersResponse.fromJson(response.data); } } diff --git a/packages/stream_chat/lib/src/core/api/message_api.dart b/packages/stream_chat/lib/src/core/api/message_api.dart index f50cb4a1..17269820 100644 --- a/packages/stream_chat/lib/src/core/api/message_api.dart +++ b/packages/stream_chat/lib/src/core/api/message_api.dart @@ -143,12 +143,12 @@ class MessageApi { /// Get all the reactions for a [messageId] Future getReactions( String messageId, { - PaginationParams? options, + PaginationParams? pagination, }) async { final response = await _client.get( '/messages/$messageId/reactions', queryParameters: { - if (options != null) ...options.toJson(), + if (pagination != null) ...pagination.toJson(), }, ); return QueryReactionsResponse.fromJson(response.data); diff --git a/packages/stream_chat/lib/src/core/http/stream_http_client.dart b/packages/stream_chat/lib/src/core/http/stream_http_client.dart index 4cf5b0e0..406138c3 100644 --- a/packages/stream_chat/lib/src/core/http/stream_http_client.dart +++ b/packages/stream_chat/lib/src/core/http/stream_http_client.dart @@ -3,18 +3,17 @@ import 'dart:async'; import 'package:dio/dio.dart'; import 'package:logging/logging.dart'; import 'package:meta/meta.dart'; +import 'package:stream_chat/src/core/error/error.dart'; +import 'package:stream_chat/src/core/http/connection_id_manager.dart'; import 'package:stream_chat/src/core/http/interceptor/auth_interceptor.dart'; import 'package:stream_chat/src/core/http/interceptor/connection_id_interceptor.dart'; import 'package:stream_chat/src/core/http/interceptor/logging_interceptor.dart'; import 'package:stream_chat/src/core/http/stream_chat_dio_error.dart'; import 'package:stream_chat/src/core/http/token_manager.dart'; -import 'package:stream_chat/src/core/error/error.dart'; -import 'package:stream_chat/src/location.dart'; import 'package:stream_chat/src/core/platform_detector/platform_detector.dart'; +import 'package:stream_chat/src/location.dart'; import 'package:stream_chat/version.dart'; -import 'package:stream_chat/src/core/http/connection_id_manager.dart'; - part 'stream_http_client_options.dart'; /// This is where we configure the base url, headers, diff --git a/packages/stream_chat/test/src/core/api/channel_api_test.dart b/packages/stream_chat/test/src/core/api/channel_api_test.dart index 2152cee0..ab530ff1 100644 --- a/packages/stream_chat/test/src/core/api/channel_api_test.dart +++ b/packages/stream_chat/test/src/core/api/channel_api_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:dio/dio.dart'; import 'package:mocktail/mocktail.dart'; import 'package:stream_chat/src/core/api/channel_api.dart'; @@ -76,11 +78,24 @@ void main() { const path = '$channelPath/query'; final channelState = _generateChannelState(channelId, channelType); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse( - path, - data: channelState.toJson(), - )); + + final data = { + 'state': true, + 'watch': false, + 'presence': false, + 'data': channelData, + 'messages': messagePagination, + 'members': membersPagination, + 'watchers': watchersPagination, + }; + + when(() => client.post( + path, + data: data, + )).thenAnswer((_) async => successResponse( + path, + data: channelState.toJson(), + )); final res = await channelApi.queryChannel( channelType, @@ -115,13 +130,34 @@ void main() { const path = '/channels'; final channelState = _generateChannelState(channelId, channelType); - when(() => client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse( - path, - data: { - 'channels': [channelState.toJson()] - }, - )); + + final payload = jsonEncode({ + // default options + 'state': true, + 'watch': true, + 'presence': false, + + // passed options + 'sort': sort, + 'filter_conditions': filter, + 'member_limit': memberLimit, + 'message_limit': messageLimit, + + // pagination + ...const PaginationParams().toJson() + }); + + when(() => client.get( + path, + queryParameters: { + 'payload': payload, + }, + )).thenAnswer((_) async => successResponse( + path, + data: { + 'channels': [channelState.toJson()] + }, + )); final res = await channelApi.queryChannels( filter: filter, @@ -166,11 +202,18 @@ void main() { extraData: data, ); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'channel': channelModel.toJson(), - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: any( + named: 'data', + that: wrapMatcher((Map v) => + containsPair('data', data).matches(v, {}) && + contains('message').matches(v, {})), + ), + )).thenAnswer((_) async => successResponse(path, data: { + 'channel': channelModel.toJson(), + 'message': message.toJson(), + })); final res = await channelApi.updateChannel( channelId, @@ -235,11 +278,16 @@ void main() { final path = _getChannelUrl(channelId, channelType); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'channel': channelModel.toJson(), - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: { + 'accept_invite': true, + 'message': message, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'channel': channelModel.toJson(), + 'message': message.toJson(), + })); final res = await channelApi.acceptChannelInvite( channelId, @@ -264,11 +312,16 @@ void main() { final path = _getChannelUrl(channelId, channelType); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'channel': channelModel.toJson(), - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: { + 'reject_invite': true, + 'message': message, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'channel': channelModel.toJson(), + 'message': message.toJson(), + })); final res = await channelApi.rejectChannelInvite( channelId, @@ -293,11 +346,16 @@ void main() { final path = _getChannelUrl(channelId, channelType); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'channel': channelModel.toJson(), - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: { + 'invites': memberIds, + 'message': message, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'channel': channelModel.toJson(), + 'message': message.toJson(), + })); final res = await channelApi.inviteChannelMembers( channelId, @@ -323,11 +381,16 @@ void main() { final path = _getChannelUrl(channelId, channelType); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'channel': channelModel.toJson(), - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: { + 'add_members': memberIds, + 'message': message, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'channel': channelModel.toJson(), + 'message': message.toJson(), + })); final res = await channelApi.addMembers( channelId, @@ -353,11 +416,16 @@ void main() { final path = _getChannelUrl(channelId, channelType); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'channel': channelModel.toJson(), - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: { + 'remove_members': memberIds, + 'message': message, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'channel': channelModel.toJson(), + 'message': message.toJson(), + })); final res = await channelApi.removeMembers( channelId, @@ -381,7 +449,7 @@ void main() { final path = '${_getChannelUrl(channelId, channelType)}/event'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( + when(() => client.post(path, data: {'event': event})).thenAnswer( (_) async => successResponse(path, data: {})); final res = await channelApi.sendEvent(channelId, channelType, event); @@ -432,8 +500,14 @@ void main() { final path = '${_getChannelUrl(channelId, channelType)}/hide'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when( + () => client.post( + path, + data: { + 'clear_history': false, + }, + ), + ).thenAnswer((_) async => successResponse(path, data: {})); final res = await channelApi.hideChannel(channelId, channelType); @@ -443,6 +517,33 @@ void main() { verifyNoMoreInteractions(client); }); + test('hideChannel with clear_history: true', () async { + const channelId = 'test-channel-id'; + const channelType = 'test-channel-type'; + + final path = '${_getChannelUrl(channelId, channelType)}/hide'; + + when( + () => client.post( + path, + data: { + 'clear_history': true, + }, + ), + ).thenAnswer((_) async => successResponse(path, data: {})); + + final res = await channelApi.hideChannel( + channelId, + channelType, + clearHistory: true, + ); + + expect(res, isNotNull); + + verify(() => client.post(path, data: any(named: 'data'))).called(1); + verifyNoMoreInteractions(client); + }); + test('showChannel', () async { const channelId = 'test-channel-id'; const channelType = 'test-channel-type'; @@ -467,8 +568,14 @@ void main() { final path = '${_getChannelUrl(channelId, channelType)}/read'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'message_id': messageId, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await channelApi.markRead( channelId, diff --git a/packages/stream_chat/test/src/core/api/device_api_test.dart b/packages/stream_chat/test/src/core/api/device_api_test.dart index f12f04f5..7d4f59fd 100644 --- a/packages/stream_chat/test/src/core/api/device_api_test.dart +++ b/packages/stream_chat/test/src/core/api/device_api_test.dart @@ -26,8 +26,15 @@ void main() { const path = '/devices'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'id': deviceId, + 'push_provider': pushProvider.name, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await deviceApi.addDevice(deviceId, pushProvider); @@ -69,7 +76,10 @@ void main() { const path = '/devices'; when( - () => client.delete(path, queryParameters: any(named: 'queryParameters')), + () => client.delete( + path, + queryParameters: {'id': deviceId}, + ), ).thenAnswer((_) async => successResponse(path, data: {})); final res = await deviceApi.removeDevice(deviceId); diff --git a/packages/stream_chat/test/src/core/api/general_api_test.dart b/packages/stream_chat/test/src/core/api/general_api_test.dart index 8844262f..afb3f6aa 100644 --- a/packages/stream_chat/test/src/core/api/general_api_test.dart +++ b/packages/stream_chat/test/src/core/api/general_api_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:dio/dio.dart'; import 'package:mocktail/mocktail.dart'; import 'package:stream_chat/src/core/api/general_api.dart'; @@ -33,10 +35,17 @@ void main() { final events = List.generate(3, (index) => Event(type: 'test-event-type-$index')); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'events': [...events.map((it) => it.toJson())] - })); + final data = { + 'channel_cids': cids, + 'last_sync_at': lastSyncAt.toUtc().toIso8601String(), + }; + + when(() => client.post( + path, + data: data, + )).thenAnswer((_) async => successResponse(path, data: { + 'events': [...events.map((it) => it.toJson())] + })); final res = await generalApi.sync(cids, lastSyncAt); @@ -85,8 +94,20 @@ void main() { const path = '/search'; + final payload = jsonEncode({ + 'filter_conditions': filter, + 'sort': sort, + 'query': query, + ...pagination.toJson(), + }); + when( - () => client.get(path, queryParameters: any(named: 'queryParameters')), + () => client.get( + path, + queryParameters: { + 'payload': payload, + }, + ), ).thenAnswer((_) async => successResponse(path, data: {'results': []})); final res = await generalApi.searchMessages( @@ -113,8 +134,20 @@ void main() { const path = '/search'; + final payload = jsonEncode({ + 'filter_conditions': filter, + 'sort': sort, + 'message_filter_conditions': messageFilter, + ...pagination.toJson(), + }); + when( - () => client.get(path, queryParameters: any(named: 'queryParameters')), + () => client.get( + path, + queryParameters: { + 'payload': payload, + }, + ), ).thenAnswer((_) async => successResponse(path, data: {'results': []})); final res = await generalApi.searchMessages( @@ -149,11 +182,22 @@ void main() { (index) => Member(userId: 'test-user-id=$index'), ); - when(() => - client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse(path, data: { - 'members': [...members.map((it) => it.toJson())] - })); + final payload = jsonEncode({ + 'type': channelType, + 'filter_conditions': filter, + 'id': channelId, + 'sort': sort, + ...pagination.toJson(), + }); + + when(() => client.get( + path, + queryParameters: { + 'payload': payload, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'members': [...members.map((it) => it.toJson())] + })); final res = await generalApi.queryMembers( channelType, @@ -185,11 +229,22 @@ void main() { (index) => Member(userId: 'test-user-id=$index'), ); - when(() => - client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse(path, data: { - 'members': [...members.map((it) => it.toJson())] - })); + final payload = jsonEncode({ + 'type': channelType, + 'filter_conditions': filter, + 'members': members, + 'sort': sort, + ...pagination.toJson(), + }); + + when(() => client.get( + path, + queryParameters: { + 'payload': payload, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'members': [...members.map((it) => it.toJson())] + })); final res = await generalApi.queryMembers( channelType, diff --git a/packages/stream_chat/test/src/core/api/guest_api_test.dart b/packages/stream_chat/test/src/core/api/guest_api_test.dart index 6c6386fa..7db74b4a 100644 --- a/packages/stream_chat/test/src/core/api/guest_api_test.dart +++ b/packages/stream_chat/test/src/core/api/guest_api_test.dart @@ -26,11 +26,13 @@ void main() { const path = '/guest'; - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'access_token': accessToken, - 'user': user.toJson(), - })); + when(() => client.post( + path, + data: {'user': user}, + )).thenAnswer((_) async => successResponse(path, data: { + 'access_token': accessToken, + 'user': user.toJson(), + })); final res = await guestApi.getGuestUser(user); diff --git a/packages/stream_chat/test/src/core/api/message_api_test.dart b/packages/stream_chat/test/src/core/api/message_api_test.dart index d7fa93cd..1aacb6d2 100644 --- a/packages/stream_chat/test/src/core/api/message_api_test.dart +++ b/packages/stream_chat/test/src/core/api/message_api_test.dart @@ -27,10 +27,15 @@ void main() { const path = '/channels/$channelType/$channelId/message'; - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'message': message.toJson(), - })); + when(() => client.post( + path, + data: { + 'message': message, + 'skip_push': false, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'message': message.toJson(), + })); final res = await messageApi.sendMessage(channelId, channelType, message); @@ -41,6 +46,37 @@ void main() { verifyNoMoreInteractions(client); }); + test('sendMessage with skipPush: true', () async { + const channelId = 'test-channel-id'; + const channelType = 'test-channel-type'; + final message = Message(id: 'test-message-id', text: 'test-message-text'); + + const path = '/channels/$channelType/$channelId/message'; + + when(() => client.post( + path, + data: { + 'message': message, + 'skip_push': true, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'message': message.toJson(), + })); + + final res = await messageApi.sendMessage( + channelId, + channelType, + message, + skipPush: true, + ); + + expect(res, isNotNull); + expect(res.message.id, message.id); + + verify(() => client.post(path, data: any(named: 'data'))).called(1); + verifyNoMoreInteractions(client); + }); + test('getMessagesById', () async { const channelId = 'test-channel-id'; const channelType = 'test-channel-type'; @@ -53,10 +89,12 @@ void main() { (index) => Message(id: 'test-message-id-$index'), ); - when(() => client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse(path, data: { - 'messages': [...messages.map((it) => it.toJson())], - })); + when(() => client.get( + path, + queryParameters: {'ids': messageIds.join(',')}, + )).thenAnswer((_) async => successResponse(path, data: { + 'messages': [...messages.map((it) => it.toJson())], + })); final res = await messageApi.getMessagesById( channelId, @@ -97,7 +135,10 @@ void main() { final path = '/messages/${message.id}'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( + when(() => client.post( + path, + data: {'message': message}, + )).thenAnswer( (_) async => successResponse(path, data: {'message': message.toJson()}), ); @@ -169,8 +210,17 @@ void main() { const path = '/messages/$messageId/action'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'id': channelId, + 'type': channelType, + 'form_data': formData, + 'message_id': messageId, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await messageApi.sendAction( channelId, @@ -195,11 +245,17 @@ void main() { final message = Message(id: messageId); final reaction = Reaction(type: reactionType, messageId: messageId); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'message': message.toJson(), - 'reaction': reaction.toJson(), - })); + when(() => client.post( + path, + data: { + 'reaction': Map.from(extraData) + ..addAll({'type': reactionType}), + 'enforce_unique': false, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'message': message.toJson(), + 'reaction': reaction.toJson(), + })); final res = await messageApi.sendReaction( messageId, @@ -216,6 +272,44 @@ void main() { verifyNoMoreInteractions(client); }); + test('sendReaction with enforceUnique: true', () async { + const messageId = 'test-message-id'; + const reactionType = 'test-reaction-type'; + const extraData = {'test-key': 'test-data'}; + + const path = '/messages/$messageId/reaction'; + + final message = Message(id: messageId); + final reaction = Reaction(type: reactionType, messageId: messageId); + + when(() => client.post( + path, + data: { + 'reaction': Map.from(extraData) + ..addAll({'type': reactionType}), + 'enforce_unique': true, + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'message': message.toJson(), + 'reaction': reaction.toJson(), + })); + + final res = await messageApi.sendReaction( + messageId, + reactionType, + extraData: extraData, + enforceUnique: true, + ); + + expect(res, isNotNull); + expect(res.message.id, messageId); + expect(res.reaction.messageId, messageId); + expect(res.reaction.type, reactionType); + + verify(() => client.post(path, data: any(named: 'data'))).called(1); + verifyNoMoreInteractions(client); + }); + test('deleteReaction', () async { const messageId = 'test-message-id'; const reactionType = 'test-reaction-type'; @@ -247,12 +341,16 @@ void main() { ), ); - when(() => client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse(path, data: { - 'reactions': [...reactions.map((it) => it.toJson())] - })); + when(() => client.get( + path, + queryParameters: { + ...const PaginationParams().toJson(), + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'reactions': [...reactions.map((it) => it.toJson())] + })); - final res = await messageApi.getReactions(messageId, options: options); + final res = await messageApi.getReactions(messageId, pagination: options); expect(res, isNotNull); expect(res.reactions.length, reactions.length); @@ -277,10 +375,12 @@ void main() { language: translatedMessageText, }); - when(() => client.post(path, data: any(named: 'data'))) - .thenAnswer((_) async => successResponse(path, data: { - 'message': translatedMessage.toJson(), - })); + when(() => client.post( + path, + data: {'language': language}, + )).thenAnswer((_) async => successResponse(path, data: { + 'message': translatedMessage.toJson(), + })); final res = await messageApi.translateMessage(messageId, language); @@ -306,10 +406,14 @@ void main() { ), ); - when(() => client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse(path, data: { - 'messages': [...messages.map((it) => it.toJson())] - })); + when(() => client.get( + path, + queryParameters: { + ...options.toJson(), + }, + )).thenAnswer((_) async => successResponse(path, data: { + 'messages': [...messages.map((it) => it.toJson())] + })); final res = await messageApi.getReplies(parentId, options: options); diff --git a/packages/stream_chat/test/src/core/api/moderation_api_test.dart b/packages/stream_chat/test/src/core/api/moderation_api_test.dart index fb2a1f29..69d85fd9 100644 --- a/packages/stream_chat/test/src/core/api/moderation_api_test.dart +++ b/packages/stream_chat/test/src/core/api/moderation_api_test.dart @@ -24,8 +24,12 @@ void main() { const path = '/moderation/mute'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when( + () => client.post( + path, + data: {'target_id': userId}, + ), + ).thenAnswer((_) async => successResponse(path, data: {})); final res = await moderationApi.muteUser(userId); @@ -40,8 +44,12 @@ void main() { const path = '/moderation/unmute'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when( + () => client.post( + path, + data: {'target_id': userId}, + ), + ).thenAnswer((_) async => successResponse(path, data: {})); final res = await moderationApi.unmuteUser(userId); @@ -57,8 +65,15 @@ void main() { const path = '/moderation/mute/channel'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'channel_cid': channelCid, + 'expiration': expiration.inMilliseconds, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.muteChannel( channelCid, @@ -76,8 +91,12 @@ void main() { const path = '/moderation/unmute/channel'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: {'channel_cid': channelCid}, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.unmuteChannel(channelCid); @@ -92,8 +111,14 @@ void main() { const path = '/moderation/flag'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'target_message_id': messageId, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.flagMessage(messageId); @@ -108,8 +133,14 @@ void main() { const path = '/moderation/unflag'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'target_message_id': messageId, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.unflagMessage(messageId); @@ -124,8 +155,11 @@ void main() { const path = '/moderation/flag'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post(path, data: { + 'target_user_id': userId, + })) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.flagUser(userId); @@ -140,8 +174,14 @@ void main() { const path = '/moderation/unflag'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post( + path, + data: { + 'target_user_id': userId, + }, + )) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.unflagUser(userId); @@ -157,8 +197,12 @@ void main() { const path = '/moderation/ban'; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: {})); + when(() => client.post(path, data: { + 'target_user_id': targetUserId, + ...options, + })) + .thenAnswer( + (_) async => successResponse(path, data: {})); final res = await moderationApi.banUser(targetUserId, options: options); @@ -175,7 +219,13 @@ void main() { const path = '/moderation/ban'; when( - () => client.delete(path, queryParameters: any(named: 'queryParameters')), + () => client.delete( + path, + queryParameters: { + 'target_user_id': targetUserId, + ...options, + }, + ), ).thenAnswer((_) async => successResponse(path, data: {})); final res = await moderationApi.unbanUser(targetUserId, options: options); diff --git a/packages/stream_chat/test/src/core/api/user_api_test.dart b/packages/stream_chat/test/src/core/api/user_api_test.dart index ebf0e343..6eecbee1 100644 --- a/packages/stream_chat/test/src/core/api/user_api_test.dart +++ b/packages/stream_chat/test/src/core/api/user_api_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:dio/dio.dart'; import 'package:mocktail/mocktail.dart'; import 'package:stream_chat/src/core/api/requests.dart'; @@ -32,10 +34,16 @@ void main() { final users = List.generate(3, (index) => User(id: 'test-user-id-$index')); - when(() => client.get(path, queryParameters: any(named: 'queryParameters'))) - .thenAnswer((_) async => successResponse(path, data: { - 'users': [...users.map((it) => it.toJson())] - })); + when(() => client.get(path, queryParameters: { + 'payload': jsonEncode({ + 'presence': presence, + 'sort': sort, + 'filter_conditions': filter, + ...pagination.toJson(), + }), + })).thenAnswer((_) async => successResponse(path, data: { + 'users': [...users.map((it) => it.toJson())] + })); final res = await userApi.queryUsers( presence: presence, @@ -60,8 +68,10 @@ void main() { final updatedUsers = {for (final user in users) user.id: user}; - when(() => client.post(path, data: any(named: 'data'))).thenAnswer( - (_) async => successResponse(path, data: { + when(() => client.post(path, data: { + 'users': updatedUsers, + })).thenAnswer((_) async => successResponse(path, + data: { 'users': updatedUsers .map((key, value) => MapEntry(key, value.toJson())) }));