fix tests

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-04-19 17:43:11 +05:30
parent af135ecb9c
commit 07196eab96
4 changed files with 339 additions and 139 deletions
+105 -105
View File
@@ -75,7 +75,7 @@ class Channel {
/// Channel configuration
ChannelConfig? get config {
_checkInitialized();
return state?._channelState?.channel?.config;
return state?._channelState.channel?.config;
}
/// Channel configuration as a stream
@@ -87,7 +87,7 @@ class Channel {
/// Channel user creator
User? get createdBy {
_checkInitialized();
return state?._channelState?.channel?.createdBy;
return state?._channelState.channel?.createdBy;
}
/// Channel user creator as a stream
@@ -99,7 +99,7 @@ class Channel {
/// Channel frozen status
bool? get frozen {
_checkInitialized();
return state?._channelState?.channel?.frozen;
return state?._channelState.channel?.frozen;
}
/// Channel frozen status as a stream
@@ -111,7 +111,7 @@ class Channel {
/// Channel creation date
DateTime? get createdAt {
_checkInitialized();
return state?._channelState?.channel?.createdAt;
return state?._channelState.channel?.createdAt;
}
/// Channel creation date as a stream
@@ -124,7 +124,7 @@ class Channel {
DateTime? get lastMessageAt {
_checkInitialized();
return state?._channelState?.channel?.lastMessageAt;
return state?._channelState.channel?.lastMessageAt;
}
/// Channel last message date as a stream
@@ -138,7 +138,7 @@ class Channel {
DateTime? get updatedAt {
_checkInitialized();
return state?._channelState?.channel?.updatedAt;
return state?._channelState.channel?.updatedAt;
}
/// Channel updated date as a stream
@@ -152,7 +152,7 @@ class Channel {
DateTime? get deletedAt {
_checkInitialized();
return state?._channelState?.channel?.deletedAt;
return state?._channelState.channel?.deletedAt;
}
/// Channel deletion date as a stream
@@ -166,7 +166,7 @@ class Channel {
int? get memberCount {
_checkInitialized();
return state?._channelState?.channel?.memberCount;
return state?._channelState.channel?.memberCount;
}
/// Channel member count as a stream
@@ -177,20 +177,20 @@ class Channel {
}
/// Channel id
String? get id => state?._channelState?.channel?.id ?? _id;
String? get id => state?._channelState.channel?.id ?? _id;
/// Channel cid
String? get cid => state?._channelState?.channel?.cid ?? _cid;
String? get cid => state?._channelState.channel?.cid ?? _cid;
/// Channel team
String? get team {
_checkInitialized();
return state?._channelState?.channel?.team;
return state?._channelState.channel?.team;
}
/// Channel extra data
Map<String, dynamic>? get extraData =>
state?._channelState?.channel?.extraData ?? _extraData;
state?._channelState.channel?.extraData ?? _extraData;
/// Channel extra data as a stream
Stream<Map<String, dynamic>?>? get extraDataStream {
@@ -341,14 +341,15 @@ class Channel {
/// Send a [message] to this channel.
/// Waits for a [_messageAttachmentsUploadCompleter] to complete
/// before actually sending the message.
Future<SendMessageResponse?> sendMessage(Message message) async {
Future<SendMessageResponse> sendMessage(Message message) async {
_checkInitialized();
// Cancelling previous completer in case it's called again in the process
// Eg. Updating the message while the previous call is in progress.
_messageAttachmentsUploadCompleter
.remove(message.id)
?.completeError('Message Cancelled');
final quotedMessage = state?.messages.firstWhereOrNull(
final quotedMessage = state!.messages.firstWhereOrNull(
(m) => m.id == message.quotedMessageId,
);
// ignore: parameter_assignments
@@ -365,7 +366,7 @@ class Channel {
).toList(),
);
state?.addMessage(message);
state!.addMessage(message);
try {
if (message.attachments.any((it) => !it.uploadState.isSuccess) == true) {
@@ -384,11 +385,11 @@ class Channel {
}
final response = await _client.sendMessage(message, id!, type!);
state?.addMessage(response.message);
state!.addMessage(response.message);
return response;
} catch (error) {
if (error is DioError && error.type != DioErrorType.response) {
state?.retryQueue?.add([message]);
state!.retryQueue?.add([message]);
}
rethrow;
}
@@ -397,7 +398,7 @@ class Channel {
/// Updates the [message] in this channel.
/// Waits for a [_messageAttachmentsUploadCompleter] to complete
/// before actually updating the message.
Future<UpdateMessageResponse?> updateMessage(Message message) async {
Future<UpdateMessageResponse> updateMessage(Message message) async {
// Cancelling previous completer in case it's called again in the process
// Eg. Updating the message while the previous call is in progress.
_messageAttachmentsUploadCompleter
@@ -452,7 +453,7 @@ class Channel {
}
/// Deletes the [message] from the channel.
Future<EmptyResponse?> deleteMessage(Message message) async {
Future<EmptyResponse> deleteMessage(Message message) async {
// Directly deleting the local messages which are not yet sent to server
if (message.status == MessageSendingStatus.sending ||
message.status == MessageSendingStatus.failed) {
@@ -493,7 +494,7 @@ class Channel {
}
/// Pins provided message
Future<UpdateMessageResponse?> pinMessage(
Future<UpdateMessageResponse> pinMessage(
Message message,
Object? timeoutOrExpirationDate,
) {
@@ -523,11 +524,11 @@ class Channel {
}
/// Unpins provided message
Future<UpdateMessageResponse?> unpinMessage(Message message) =>
Future<UpdateMessageResponse> unpinMessage(Message message) =>
updateMessage(message.copyWith(pinned: false));
/// Send a file to this channel
Future<SendFileResponse?> sendFile(
Future<SendFileResponse> sendFile(
AttachmentFile file, {
ProgressCallback? onSendProgress,
CancelToken? cancelToken,
@@ -543,7 +544,7 @@ class Channel {
}
/// Send an image to this channel
Future<SendImageResponse?> sendImage(
Future<SendImageResponse> sendImage(
AttachmentFile file, {
ProgressCallback? onSendProgress,
CancelToken? cancelToken,
@@ -559,7 +560,7 @@ class Channel {
}
/// A message search.
Future<SearchMessagesResponse?> search({
Future<SearchMessagesResponse> search({
String? query,
Map<String, dynamic>? messageFilters,
List<SortOption>? sort,
@@ -578,7 +579,7 @@ class Channel {
);
/// Delete a file from this channel
Future<EmptyResponse?> deleteFile(
Future<EmptyResponse> deleteFile(
String url, {
CancelToken? cancelToken,
}) {
@@ -592,7 +593,7 @@ class Channel {
}
/// Delete an image from this channel
Future<EmptyResponse?> deleteImage(
Future<EmptyResponse> deleteImage(
String url, {
CancelToken? cancelToken,
}) {
@@ -616,12 +617,13 @@ class Channel {
/// Send a reaction to this channel
/// Set [enforceUnique] to true to remove the existing user reaction
Future<SendReactionResponse?> sendReaction(
Future<SendReactionResponse> sendReaction(
Message message,
String type, {
Map<String, dynamic> extraData = const {},
bool enforceUnique = false,
}) async {
_checkInitialized();
final messageId = message.id;
final now = DateTime.now();
final user = _client.state.user;
@@ -686,7 +688,7 @@ class Channel {
}
/// Delete a reaction from this channel
Future<EmptyResponse?> deleteReaction(
Future<EmptyResponse> deleteReaction(
Message message, Reaction reaction) async {
final type = reaction.type;
final user = _client.state.user;
@@ -730,7 +732,7 @@ class Channel {
}
/// Edit the channel custom data
Future<UpdateChannelResponse?> update(
Future<UpdateChannelResponse> update(
Map<String, dynamic> channelData, [
Message? updateMessage,
]) async {
@@ -743,40 +745,40 @@ class Channel {
}
/// Edit the channel custom data
Future<PartialUpdateChannelResponse?> updatePartial(
Future<PartialUpdateChannelResponse> updatePartial(
Map<String, dynamic> channelData) async {
final response = await _client.patch(_channelURL, data: channelData);
return _client.decode(response.data, PartialUpdateChannelResponse.fromJson);
}
/// Delete this channel. Messages are permanently removed.
Future<EmptyResponse?> delete() async {
Future<EmptyResponse> delete() async {
final response = await _client.delete(_channelURL);
return _client.decode(response.data, EmptyResponse.fromJson);
}
/// Removes all messages from the channel
Future<EmptyResponse?> truncate() async {
Future<EmptyResponse> truncate() async {
final response = await _client.post('$_channelURL/truncate');
return _client.decode(response.data, EmptyResponse.fromJson);
}
/// Accept invitation to the channel
Future<AcceptInviteResponse?> acceptInvite([Message? message]) async {
Future<AcceptInviteResponse> acceptInvite([Message? message]) async {
final res = await _client.post(_channelURL,
data: {'accept_invite': true, 'message': message?.toJson()});
return _client.decode(res.data, AcceptInviteResponse.fromJson);
}
/// Reject invitation to the channel
Future<RejectInviteResponse?> rejectInvite([Message? message]) async {
Future<RejectInviteResponse> rejectInvite([Message? message]) async {
final res = await _client.post(_channelURL,
data: {'reject_invite': true, 'message': message?.toJson()});
return _client.decode(res.data, RejectInviteResponse.fromJson);
}
/// Add members to the channel
Future<AddMembersResponse?> addMembers(
Future<AddMembersResponse> addMembers(
List<String> memberIds, [
Message? message,
]) async {
@@ -788,7 +790,7 @@ class Channel {
}
/// Invite members to the channel
Future<InviteMembersResponse?> inviteMembers(
Future<InviteMembersResponse> inviteMembers(
List<String> memberIds, [
Message? message,
]) async {
@@ -800,7 +802,7 @@ class Channel {
}
/// Remove members from the channel
Future<RemoveMembersResponse?> removeMembers(
Future<RemoveMembersResponse> removeMembers(
List<String> memberIds, [
Message? message,
]) async {
@@ -836,7 +838,7 @@ class Channel {
Message? oldMessage;
if (oldIndex != -1) {
oldMessage = state!.messages[oldIndex];
state!.updateChannelState(state!._channelState!.copyWith(
state!.updateChannelState(state!._channelState.copyWith(
messages: state?.messages?..remove(oldMessage),
));
} else {
@@ -863,7 +865,7 @@ class Channel {
}
/// Mark all channel messages as read
Future<EmptyResponse?> markRead() async {
Future<EmptyResponse> markRead() async {
_checkInitialized();
client.state.totalUnreadCount = max(
0, (client.state.totalUnreadCount ?? 0) - (state!.unreadCount ?? 0));
@@ -908,7 +910,7 @@ class Channel {
}
/// Stop watching the channel
Future<EmptyResponse?> stopWatching() async {
Future<EmptyResponse> stopWatching() async {
final response = await _client.post(
'$_channelURL/stop-watching',
data: {},
@@ -949,7 +951,7 @@ class Channel {
}
/// List the reactions for a message in the channel
Future<QueryReactionsResponse?> getReactions(
Future<QueryReactionsResponse> getReactions(
String messageID,
PaginationParams options,
) async {
@@ -982,7 +984,7 @@ class Channel {
}
/// Retrieves a list of messages by ID
Future<TranslateMessageResponse?> translateMessage(
Future<TranslateMessageResponse> translateMessage(
String messageId,
String language,
) async {
@@ -999,16 +1001,16 @@ class Channel {
}
/// Creates a new channel
Future<ChannelState>? create() async => query(options: {
Future<ChannelState> create() async => query(options: {
'watch': false,
'state': false,
'presence': false,
})!;
});
/// Query the API, get messages, members or other channel fields
/// Set [preferOffline] to true to avoid the api call if the data is already
/// in the offline storage
Future<ChannelState>? query({
Future<ChannelState> query({
Map<String, dynamic> options = const {},
PaginationParams? messagesPagination,
PaginationParams? membersPagination,
@@ -1079,7 +1081,7 @@ class Channel {
}
/// Query channel members
Future<QueryMembersResponse?> queryMembers({
Future<QueryMembersResponse> queryMembers({
Map<String, dynamic>? filter,
List<SortOption>? sort,
PaginationParams? pagination,
@@ -1108,7 +1110,7 @@ class Channel {
}
/// Mutes the channel
Future<EmptyResponse?> mute({Duration? expiration}) async {
Future<EmptyResponse> mute({Duration? expiration}) async {
final response = await _client.post('/moderation/mute/channel', data: {
'channel_cid': cid,
if (expiration != null) 'expiration': expiration.inMilliseconds,
@@ -1117,7 +1119,7 @@ class Channel {
}
/// Unmutes the channel
Future<EmptyResponse?> unmute() async {
Future<EmptyResponse> unmute() async {
final response = await _client.post('/moderation/unmute/channel', data: {
'channel_cid': cid,
});
@@ -1125,7 +1127,7 @@ class Channel {
}
/// Bans a user from the channel
Future<EmptyResponse?> banUser(
Future<EmptyResponse> banUser(
String userID,
Map<String, dynamic> options,
) async {
@@ -1139,7 +1141,7 @@ class Channel {
}
/// Remove the ban for a user in the channel
Future<EmptyResponse?> unbanUser(String userID) async {
Future<EmptyResponse> unbanUser(String userID) async {
_checkInitialized();
return _client.unbanUser(userID, {
'type': type,
@@ -1148,7 +1150,7 @@ class Channel {
}
/// Shadow bans a user from the channel
Future<EmptyResponse?> shadowBan(
Future<EmptyResponse> shadowBan(
String userID,
Map<String, dynamic> options,
) async {
@@ -1162,7 +1164,7 @@ class Channel {
}
/// Remove the shadow ban for a user in the channel
Future<EmptyResponse?> removeShadowBan(String userID) async {
Future<EmptyResponse> removeShadowBan(String userID) async {
_checkInitialized();
return _client.removeShadowBan(userID, {
'type': type,
@@ -1173,7 +1175,7 @@ class Channel {
/// Hides the channel from [StreamChatClient.queryChannels] for the user
/// until a message is added If [clearHistory] is set to true - all messages
/// will be removed for the user
Future<EmptyResponse?> hide({bool clearHistory = false}) async {
Future<EmptyResponse> hide({bool clearHistory = false}) async {
_checkInitialized();
final response = await _client
.post('$_channelURL/hide', data: {'clear_history': clearHistory});
@@ -1190,7 +1192,7 @@ class Channel {
}
/// Removes the hidden status for the channel
Future<EmptyResponse?> show() async {
Future<EmptyResponse> show() async {
_checkInitialized();
final response = await _client.post('$_channelURL/show');
return _client.decode(response.data, EmptyResponse.fromJson);
@@ -1257,9 +1259,10 @@ class Channel {
void _checkInitialized() {
assert(
!_initializedCompleter.isCompleted,
"Channel $cid hasn't been initialized yet. Make sure to call .watch()"
' or to instantiate the client using [Channel.fromState]');
_initializedCompleter.isCompleted,
"Channel $cid hasn't been initialized yet. Make sure to call .watch()"
' or to instantiate the client using [Channel.fromState]',
);
}
}
@@ -1413,9 +1416,9 @@ class ChannelClientState {
/// This flag should be managed by UI sdks.
/// When false, any new message (received by WebSocket event
/// - [EventType.messageNew]) will not be pushed on to message list.
bool? get isUpToDate => _isUpToDateController.value;
bool get isUpToDate => _isUpToDateController.value!;
set isUpToDate(bool? isUpToDate) => _isUpToDateController.add(isUpToDate);
set isUpToDate(bool isUpToDate) => _isUpToDateController.add(isUpToDate);
/// [isUpToDate] flag count as a stream
Stream<bool?> get isUpToDateStream => _isUpToDateController.stream;
@@ -1483,9 +1486,9 @@ class ChannelClientState {
addMessage(message);
if (message.pinned == true) {
_channelState = _channelState!.copyWith(
_channelState = _channelState.copyWith(
pinnedMessages: [
..._channelState!.pinnedMessages,
..._channelState.pinnedMessages,
message,
],
);
@@ -1522,7 +1525,7 @@ class ChannelClientState {
/// Add a message to this channel
void addMessage(Message message) {
if (message.parentId == null || message.showInChannel == true) {
final newMessages = List<Message>.from(_channelState!.messages);
final newMessages = List<Message>.from(_channelState.messages);
final oldIndex = newMessages.indexWhere((m) => m.id == message.id);
if (oldIndex != -1) {
Message? m;
@@ -1537,9 +1540,9 @@ class ChannelClientState {
newMessages.add(message);
}
_channelState = _channelState!.copyWith(
_channelState = _channelState.copyWith(
messages: newMessages,
channel: _channelState!.channel!.copyWith(
channel: _channelState.channel?.copyWith(
lastMessageAt: message.createdAt,
),
);
@@ -1551,7 +1554,7 @@ class ChannelClientState {
}
void _listenReadEvents() {
if (_channel.config?.readEvents == false) {
if (_channelState.channel?.config.readEvents == false) {
return;
}
@@ -1563,7 +1566,7 @@ class ChannelClientState {
)
.listen(
(event) {
final readList = List<Read>.from(_channelState?.read ?? []);
final readList = List<Read>.from(_channelState.read);
final userReadIndex =
read?.indexWhere((r) => r.user.id == event.user!.id);
@@ -1577,7 +1580,7 @@ class ChannelClientState {
lastRead: event.createdAt!,
unreadMessages: event.totalUnreadCount!,
));
_channelState = _channelState!.copyWith(read: readList);
_channelState = _channelState.copyWith(read: readList);
}
},
),
@@ -1585,22 +1588,22 @@ class ChannelClientState {
}
/// Channel message list
List<Message> get messages => _channelState!.messages;
List<Message> get messages => _channelState.messages;
/// Channel message list as a stream
Stream<List<Message>?> get messagesStream =>
channelStateStream.map((cs) => cs!.messages);
/// Channel pinned message list
List<Message>? get pinnedMessages => _channelState!.pinnedMessages.toList();
List<Message>? get pinnedMessages => _channelState.pinnedMessages.toList();
/// Channel pinned message list as a stream
Stream<List<Message>?> get pinnedMessagesStream =>
channelStateStream.map((cs) => cs!.pinnedMessages.toList());
/// Get channel last message
Message? get lastMessage => _channelState!.messages.isNotEmpty == true
? _channelState!.messages.last
Message? get lastMessage => _channelState.messages.isNotEmpty == true
? _channelState.messages.last
: null;
/// Get channel last message
@@ -1608,7 +1611,7 @@ class ChannelClientState {
.map((event) => event?.isNotEmpty == true ? event!.last : null);
/// Channel members list
List<Member> get members => _channelState!.members
List<Member> get members => _channelState.members
.map((e) => e.copyWith(user: _channel.client.state.users[e.user!.id]))
.toList();
@@ -1622,14 +1625,14 @@ class ChannelClientState {
);
/// Channel watcher count
int? get watcherCount => _channelState!.watcherCount;
int? get watcherCount => _channelState.watcherCount;
/// Channel watcher count as a stream
Stream<int?> get watcherCountStream =>
channelStateStream.map((cs) => cs!.watcherCount);
/// Channel watchers list
List<User> get watchers => _channelState!.watchers
List<User> get watchers => _channelState.watchers
.map((e) => _channel.client.state.users[e.id] ?? e)
.toList();
@@ -1642,7 +1645,7 @@ class ChannelClientState {
);
/// Channel read list
List<Read>? get read => _channelState!.read;
List<Read>? get read => _channelState.read;
/// Channel read list as a stream
Stream<List<Read>?> get readStream =>
@@ -1693,7 +1696,7 @@ class ChannelClientState {
/// Delete all channel messages
void truncate() {
_channelState = _channelState!.copyWith(
_channelState = _channelState.copyWith(
messages: [],
);
}
@@ -1704,24 +1707,22 @@ class ChannelClientState {
void updateChannelState(ChannelState updatedState) {
final newMessages = <Message>[
...updatedState.messages,
..._channelState?.messages
.where((m) =>
updatedState.messages
.any((newMessage) => newMessage.id == m.id) !=
true)
.toList() ??
[],
..._channelState.messages
.where((m) =>
updatedState.messages
.any((newMessage) => newMessage.id == m.id) !=
true)
.toList(),
]..sort(_sortByCreatedAt as int Function(Message, Message)?);
final newWatchers = <User>[
...updatedState.watchers,
..._channelState?.watchers
.where((w) =>
updatedState.watchers
.any((newWatcher) => newWatcher.id == w.id) !=
true)
.toList() ??
[],
..._channelState.watchers
.where((w) =>
updatedState.watchers
.any((newWatcher) => newWatcher.id == w.id) !=
true)
.toList(),
];
final newMembers = <Member>[
@@ -1730,20 +1731,19 @@ class ChannelClientState {
final newReads = <Read>[
...updatedState.read,
..._channelState?.read
.where((r) =>
updatedState.read
.any((newRead) => newRead.user.id == r.user.id) !=
true)
.toList() ??
[],
..._channelState.read
.where((r) =>
updatedState.read
.any((newRead) => newRead.user.id == r.user.id) !=
true)
.toList(),
];
_checkExpiredAttachmentMessages(updatedState);
_channelState = _channelState!.copyWith(
_channelState = _channelState.copyWith(
messages: newMessages,
channel: _channelState!.channel?.merge(updatedState.channel),
channel: _channelState.channel?.merge(updatedState.channel),
watchers: newWatchers,
watcherCount: updatedState.watcherCount,
members: newMembers,
@@ -1765,7 +1765,7 @@ class ChannelClientState {
}
/// The channel state related to this client
ChannelState? get _channelState => _channelStateController.value;
ChannelState get _channelState => _channelStateController.value!;
/// The channel state related to this client as a stream
Stream<ChannelState?> get channelStateStream =>
@@ -1773,11 +1773,11 @@ class ChannelClientState {
/// The channel state related to this client
ChannelState? get channelState => _channelStateController.value;
late BehaviorSubject<ChannelState?> _channelStateController;
late BehaviorSubject<ChannelState> _channelStateController;
final Debounce _debouncedUpdatePersistenceChannelState;
set _channelState(ChannelState? v) {
set _channelState(ChannelState v) {
_channelStateController.add(v);
_debouncedUpdatePersistenceChannelState.call([v]);
}
@@ -1812,7 +1812,7 @@ class ChannelClientState {
final Map<User?, DateTime> _typings = {};
void _listenTypingEvents() {
if (_channel.config?.typingEvents == false) {
if (_channelState.channel?.config.typingEvents == false) {
return;
}
@@ -1867,7 +1867,7 @@ class ChannelClientState {
late Timer _cleaningTimer;
void _startCleaning() {
if (_channel.config?.typingEvents == false) {
if (_channelState.channel?.config.typingEvents == false) {
return;
}
@@ -1899,7 +1899,7 @@ class ChannelClientState {
))
.toList();
updateChannelState(_channelState!.copyWith(
updateChannelState(_channelState.copyWith(
pinnedMessages: pinnedMessages!.where(_pinIsValid()).toList(),
messages: expiredMessages,
));
@@ -12,11 +12,11 @@ class Reaction {
this.messageId,
DateTime? createdAt,
required this.type,
required this.user,
this.user,
String? userId,
this.score = 0,
this.extraData,
}) : userId = userId ?? user.id,
}) : userId = userId ?? user?.id,
createdAt = createdAt ?? DateTime.now();
/// Create a new instance from a json
@@ -38,7 +38,7 @@ class Reaction {
/// The user that sent the reaction
@JsonKey(includeIfNull: false, toJson: Serialization.readOnly)
final User user;
final User? user;
/// The score of the reaction (ie. number of reactions sent)
@JsonKey(defaultValue: 0)
@@ -13,7 +13,9 @@ Reaction _$ReactionFromJson(Map<String, dynamic> json) {
? null
: DateTime.parse(json['created_at'] as String),
type: json['type'] as String,
user: User.fromJson(json['user'] as Map<String, dynamic>),
user: json['user'] == null
? null
: User.fromJson(json['user'] as Map<String, dynamic>),
userId: json['user_id'] as String?,
score: json['score'] as int? ?? 0,
extraData: json['extra_data'] as Map<String, dynamic>?,
@@ -38,6 +38,17 @@ void main() {
final channelClient = client.channel('messaging', id: 'testid');
final message = Message(text: 'hey', id: 'test');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(
() => mockDio.post<String>(
'/channels/messaging/testid/message',
@@ -45,7 +56,7 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({'message': message}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
@@ -227,6 +238,17 @@ void main() {
);
final channelClient = client.channel(channelType, id: channelId);
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(() => mockUploader.sendFile(file, channelId, channelType))
.thenAnswer((_) async => SendFileResponse());
@@ -255,6 +277,17 @@ void main() {
);
final channelClient = client.channel(channelType, id: channelId);
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(() => mockUploader.sendImage(image, channelId, channelType))
.thenAnswer((_) async => SendImageResponse());
@@ -278,6 +311,17 @@ void main() {
final channelClient = client.channel('messaging', id: 'testid');
const url = 'url';
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(
() => mockDio.delete<String>(
'/channels/messaging/testid/file',
@@ -311,6 +355,17 @@ void main() {
final channelClient = client.channel('messaging', id: 'testid');
const url = 'url';
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(
() => mockDio.delete<String>(
'/channels/messaging/testid/image',
@@ -357,6 +412,17 @@ void main() {
final channelClient = client.channel('messaging', id: 'testid');
final message = Message(text: 'Hello', id: 'test');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(
() => mockDio.post<String>(
'/messages/${message.id}',
@@ -364,7 +430,7 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({'message': message}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
@@ -391,6 +457,17 @@ void main() {
final channelClient = client.channel('messaging', id: 'testid');
final message = Message(text: 'Hello', id: 'test');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState()),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
when(
() => mockDio.post<String>(
'/messages/${message.id}',
@@ -398,7 +475,7 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({'message': message}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
@@ -567,14 +644,30 @@ void main() {
tokenProvider: (_) async => '',
);
client.state.user = OwnUser(id: 'test-id');
final user = OwnUser(id: 'test-id');
final channelClient = client.channel('messaging', id: 'testid');
client.state.user = user;
final message = Message(id: 'messageid');
const reactionType = 'test';
final reaction = Reaction(type: reactionType);
final channelClient = client.channel('messaging', id: 'testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer(
(_) async => Response(
data: '{}',
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
);
await channelClient.watch();
when(
() => mockDio.post<String>(
'/messages/messageid/reaction',
'/messages/${message.id}/reaction',
data: {
'reaction': {
'type': reactionType,
@@ -584,16 +677,17 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'message': message,
'reaction': reaction,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
);
await channelClient.sendReaction(
Message(
id: 'messageid',
),
message,
reactionType,
);
@@ -697,26 +791,44 @@ void main() {
tokenProvider: (_) async => '',
);
final channelClient = client.channel('messaging', id: 'testid');
final members = ['vishal'];
final channelModel = ChannelModel(cid: 'messaging:testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState(channel: channelModel)),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
final members = [Member(userId: 'vishal')];
final memberIds = members.map((e) => e.userId!).toList();
final message = Message(text: 'test');
when(
() => mockDio.post<String>(
'/channels/messaging/testid',
data: {'add_members': members, 'message': message.toJson()},
data: {'add_members': memberIds, 'message': message.toJson()},
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'members': members,
'message': message,
'channel': channelModel,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
);
await channelClient.addMembers(members, message);
await channelClient.addMembers(memberIds, message);
verify(() => mockDio.post<String>('/channels/messaging/testid',
data: {'add_members': members, 'message': message.toJson()}))
data: {'add_members': memberIds, 'message': message.toJson()}))
.called(1);
});
@@ -732,6 +844,19 @@ void main() {
tokenProvider: (_) async => '',
);
final channelClient = client.channel('messaging', id: 'testid');
final channelModel = ChannelModel(cid: 'messaging:testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState(channel: channelModel)),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
final message = Message(text: 'test');
when(
@@ -741,7 +866,10 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'message': message,
'channel': channelModel,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
@@ -2080,6 +2208,19 @@ void main() {
tokenProvider: (_) async => '',
);
final channelClient = client.channel('messaging', id: 'testid');
final channelModel = ChannelModel(cid: 'messaging:testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState(channel: channelModel)),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
final message = Message(text: 'test');
when(
@@ -2092,7 +2233,10 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'channel': channelModel,
'message': message,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
@@ -2179,6 +2323,19 @@ void main() {
tokenProvider: (_) async => '',
);
final channelClient = client.channel('messaging', id: 'testid');
final channelModel = ChannelModel(cid: 'messaging:testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState(channel: channelModel)),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
final message = Message(text: 'test');
when(
@@ -2188,7 +2345,10 @@ void main() {
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'message': message,
'channel': channelModel,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
@@ -2213,26 +2373,45 @@ void main() {
tokenProvider: (_) async => '',
);
final channelClient = client.channel('messaging', id: 'testid');
final members = ['vishal'];
final channelModel = ChannelModel(cid: 'messaging:testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState(channel: channelModel)),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
final members = [Member(userId: 'vishal')];
final memberIds = members.map((e) => e.userId!).toList();
final message = Message(text: 'test');
when(
() => mockDio.post<String>(
'/channels/messaging/testid',
data: {'invites': members, 'message': message.toJson()},
data: {'invites': memberIds, 'message': message.toJson()},
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'members': members,
'message': message,
'channel': channelModel,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
);
await channelClient.inviteMembers(members, message);
await channelClient.inviteMembers(memberIds, message);
verify(() => mockDio.post<String>('/channels/messaging/testid',
data: {'invites': members, 'message': message.toJson()})).called(1);
data: {'invites': memberIds, 'message': message.toJson()}))
.called(1);
});
test('removeMembers', () async {
@@ -2247,27 +2426,46 @@ void main() {
tokenProvider: (_) async => '',
);
final channelClient = client.channel('messaging', id: 'testid');
final members = ['vishal'];
final channelModel = ChannelModel(cid: 'messaging:testid');
when(() => mockDio.post<String>(
any(),
data: any(named: 'data'),
)).thenAnswer((_) async => Response(
data: jsonEncode(ChannelState(channel: channelModel)),
statusCode: 200,
requestOptions: FakeRequestOptions(),
));
await channelClient.watch();
final members = [Member(userId: 'vishal')];
final memberIds = members.map((e) => e.userId!).toList();
final message = Message(text: 'test');
when(
() => mockDio.post<String>(
'/channels/messaging/testid',
data: {'remove_members': members, 'message': message.toJson()},
data: {'remove_members': memberIds, 'message': message.toJson()},
),
).thenAnswer(
(_) async => Response(
data: '{}',
data: jsonEncode({
'members': members,
'message': message,
'channel': channelModel,
}),
statusCode: 200,
requestOptions: FakeRequestOptions(),
),
);
await channelClient.removeMembers(members, message);
await channelClient.removeMembers(memberIds, message);
verify(() => mockDio.post<String>('/channels/messaging/testid',
data: {'remove_members': members, 'message': message.toJson()}))
.called(1);
verify(() => mockDio.post<String>('/channels/messaging/testid', data: {
'remove_members': memberIds,
'message': message.toJson()
})).called(1);
});
test('hide', () async {