better channel api tests

This commit is contained in:
Salvatore Giordano
2021-06-26 13:25:06 +02:00
parent 56bce0957c
commit 9cc6ef124c
3 changed files with 192 additions and 54 deletions
@@ -76,7 +76,7 @@ class ChannelApi {
// pagination // pagination
...paginationParams.toJson() ...paginationParams.toJson()
}) }),
}, },
); );
return QueryChannelsResponse.fromJson(response.data); return QueryChannelsResponse.fromJson(response.data);
@@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
import 'package:stream_chat/src/core/api/channel_api.dart'; import 'package:stream_chat/src/core/api/channel_api.dart';
@@ -76,8 +78,21 @@ void main() {
const path = '$channelPath/query'; const path = '$channelPath/query';
final channelState = _generateChannelState(channelId, channelType); final channelState = _generateChannelState(channelId, channelType);
when(() => client.post(path, data: any(named: 'data')))
.thenAnswer((_) async => successResponse( 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, path,
data: channelState.toJson(), data: channelState.toJson(),
)); ));
@@ -115,8 +130,29 @@ void main() {
const path = '/channels'; const path = '/channels';
final channelState = _generateChannelState(channelId, channelType); final channelState = _generateChannelState(channelId, channelType);
when(() => client.get(path, queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => successResponse( 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, path,
data: { data: {
'channels': [channelState.toJson()] 'channels': [channelState.toJson()]
@@ -166,8 +202,15 @@ void main() {
extraData: data, extraData: data,
); );
when(() => client.post(path, data: any(named: 'data'))) when(() => client.post(
.thenAnswer((_) async => successResponse(path, data: { 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(), 'channel': channelModel.toJson(),
'message': message.toJson(), 'message': message.toJson(),
})); }));
@@ -235,8 +278,13 @@ void main() {
final path = _getChannelUrl(channelId, channelType); final path = _getChannelUrl(channelId, channelType);
when(() => client.post(path, data: any(named: 'data'))) when(() => client.post(
.thenAnswer((_) async => successResponse(path, data: { path,
data: {
'accept_invite': true,
'message': message,
},
)).thenAnswer((_) async => successResponse(path, data: {
'channel': channelModel.toJson(), 'channel': channelModel.toJson(),
'message': message.toJson(), 'message': message.toJson(),
})); }));
@@ -264,8 +312,13 @@ void main() {
final path = _getChannelUrl(channelId, channelType); final path = _getChannelUrl(channelId, channelType);
when(() => client.post(path, data: any(named: 'data'))) when(() => client.post(
.thenAnswer((_) async => successResponse(path, data: { path,
data: {
'reject_invite': true,
'message': message,
},
)).thenAnswer((_) async => successResponse(path, data: {
'channel': channelModel.toJson(), 'channel': channelModel.toJson(),
'message': message.toJson(), 'message': message.toJson(),
})); }));
@@ -293,8 +346,13 @@ void main() {
final path = _getChannelUrl(channelId, channelType); final path = _getChannelUrl(channelId, channelType);
when(() => client.post(path, data: any(named: 'data'))) when(() => client.post(
.thenAnswer((_) async => successResponse(path, data: { path,
data: {
'invites': memberIds,
'message': message,
},
)).thenAnswer((_) async => successResponse(path, data: {
'channel': channelModel.toJson(), 'channel': channelModel.toJson(),
'message': message.toJson(), 'message': message.toJson(),
})); }));
@@ -323,8 +381,13 @@ void main() {
final path = _getChannelUrl(channelId, channelType); final path = _getChannelUrl(channelId, channelType);
when(() => client.post(path, data: any(named: 'data'))) when(() => client.post(
.thenAnswer((_) async => successResponse(path, data: { path,
data: {
'add_members': memberIds,
'message': message,
},
)).thenAnswer((_) async => successResponse(path, data: {
'channel': channelModel.toJson(), 'channel': channelModel.toJson(),
'message': message.toJson(), 'message': message.toJson(),
})); }));
@@ -353,8 +416,13 @@ void main() {
final path = _getChannelUrl(channelId, channelType); final path = _getChannelUrl(channelId, channelType);
when(() => client.post(path, data: any(named: 'data'))) when(() => client.post(
.thenAnswer((_) async => successResponse(path, data: { path,
data: {
'remove_members': memberIds,
'message': message,
},
)).thenAnswer((_) async => successResponse(path, data: {
'channel': channelModel.toJson(), 'channel': channelModel.toJson(),
'message': message.toJson(), 'message': message.toJson(),
})); }));
@@ -381,7 +449,7 @@ void main() {
final path = '${_getChannelUrl(channelId, channelType)}/event'; 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: <String, dynamic>{})); (_) async => successResponse(path, data: <String, dynamic>{}));
final res = await channelApi.sendEvent(channelId, channelType, event); final res = await channelApi.sendEvent(channelId, channelType, event);
@@ -432,8 +500,14 @@ void main() {
final path = '${_getChannelUrl(channelId, channelType)}/hide'; final path = '${_getChannelUrl(channelId, channelType)}/hide';
when(() => client.post(path, data: any(named: 'data'))).thenAnswer( when(
(_) async => successResponse(path, data: <String, dynamic>{})); () => client.post(
path,
data: {
'clear_history': false,
},
),
).thenAnswer((_) async => successResponse(path, data: <String, dynamic>{}));
final res = await channelApi.hideChannel(channelId, channelType); final res = await channelApi.hideChannel(channelId, channelType);
@@ -443,6 +517,33 @@ void main() {
verifyNoMoreInteractions(client); 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: <String, dynamic>{}));
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 { test('showChannel', () async {
const channelId = 'test-channel-id'; const channelId = 'test-channel-id';
const channelType = 'test-channel-type'; const channelType = 'test-channel-type';
@@ -467,7 +568,13 @@ void main() {
final path = '${_getChannelUrl(channelId, channelType)}/read'; final path = '${_getChannelUrl(channelId, channelType)}/read';
when(() => client.post(path, data: any(named: 'data'))).thenAnswer( when(() => client.post(
path,
data: {
'message_id': messageId,
},
))
.thenAnswer(
(_) async => successResponse(path, data: <String, dynamic>{})); (_) async => successResponse(path, data: <String, dynamic>{}));
final res = await channelApi.markRead( final res = await channelApi.markRead(
@@ -35,8 +35,15 @@ void main() {
final events = final events =
List.generate(3, (index) => Event(type: 'test-event-type-$index')); List.generate(3, (index) => Event(type: 'test-event-type-$index'));
when(() => client.post(path, data: any(named: 'data'))) final data = {
.thenAnswer((_) async => successResponse(path, 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())] 'events': [...events.map((it) => it.toJson())]
})); }));
@@ -87,8 +94,20 @@ void main() {
const path = '/search'; const path = '/search';
final payload = jsonEncode({
'filter_conditions': filter,
'sort': sort,
'query': query,
...pagination.toJson(),
});
when( when(
() => client.get(path, queryParameters: any(named: 'queryParameters')), () => client.get(
path,
queryParameters: {
'payload': payload,
},
),
).thenAnswer((_) async => successResponse(path, data: {'results': []})); ).thenAnswer((_) async => successResponse(path, data: {'results': []}));
final res = await generalApi.searchMessages( final res = await generalApi.searchMessages(
@@ -115,8 +134,20 @@ void main() {
const path = '/search'; const path = '/search';
final payload = jsonEncode({
'filter_conditions': filter,
'sort': sort,
'message_filter_conditions': messageFilter,
...pagination.toJson(),
});
when( when(
() => client.get(path, queryParameters: any(named: 'queryParameters')), () => client.get(
path,
queryParameters: {
'payload': payload,
},
),
).thenAnswer((_) async => successResponse(path, data: {'results': []})); ).thenAnswer((_) async => successResponse(path, data: {'results': []}));
final res = await generalApi.searchMessages( final res = await generalApi.searchMessages(