From ac21bc27ff9592edd76cd8d88f70aec468f624d2 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Thu, 18 Feb 2021 18:14:12 +0530 Subject: [PATCH 1/4] feat: Added updatePartial endpoint --- packages/stream_chat/lib/src/api/channel.dart | 7 +++++++ packages/stream_chat/lib/src/api/responses.dart | 14 ++++++++++++++ .../stream_chat/lib/src/api/responses.g.dart | 17 +++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index bdf74dd6..d64779e4 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -394,6 +394,13 @@ class Channel { return _client.decode(response.data, UpdateChannelResponse.fromJson); } + /// Edit the channel custom data + Future updatePartial( + Map 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 delete() async { final response = await _client.delete(_channelURL); diff --git a/packages/stream_chat/lib/src/api/responses.dart b/packages/stream_chat/lib/src/api/responses.dart index 3e5b7a7f..a1e928d6 100644 --- a/packages/stream_chat/lib/src/api/responses.dart +++ b/packages/stream_chat/lib/src/api/responses.dart @@ -247,6 +247,20 @@ class UpdateChannelResponse extends _BaseResponse { _$UpdateChannelResponseFromJson(json); } +/// Model response for [Channel.updatePartial] api call +@JsonSerializable(createToJson: false) +class PartialUpdateChannelResponse extends _BaseResponse { + /// Updated channel + ChannelModel channel; + + /// Channel members + List members; + + /// Create a new instance from a json + static PartialUpdateChannelResponse fromJson(Map json) => + _$PartialUpdateChannelResponseFromJson(json); +} + /// Model response for [Channel.inviteMembers] api call @JsonSerializable(createToJson: false) class InviteMembersResponse extends _BaseResponse { diff --git a/packages/stream_chat/lib/src/api/responses.g.dart b/packages/stream_chat/lib/src/api/responses.g.dart index fc51dd52..1f290d6e 100644 --- a/packages/stream_chat/lib/src/api/responses.g.dart +++ b/packages/stream_chat/lib/src/api/responses.g.dart @@ -225,6 +225,23 @@ UpdateChannelResponse _$UpdateChannelResponseFromJson(Map json) { )); } +PartialUpdateChannelResponse _$PartialUpdateChannelResponseFromJson(Map json) { + return PartialUpdateChannelResponse() + ..duration = json['duration'] as String + ..channel = json['channel'] == null + ? null + : ChannelModel.fromJson((json['channel'] as Map)?.map( + (k, e) => MapEntry(k as String, e), + )) + ..members = (json['members'] as List) + ?.map((e) => e == null + ? null + : Member.fromJson((e as Map)?.map( + (k, e) => MapEntry(k as String, e), + ))) + ?.toList(); +} + InviteMembersResponse _$InviteMembersResponseFromJson(Map json) { return InviteMembersResponse() ..duration = json['duration'] as String From 6f994c6a3a1c0bf8fb6313bd959bf1dac9635ce7 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Fri, 19 Feb 2021 16:10:51 +0530 Subject: [PATCH 2/4] feat: Added test --- packages/stream_chat/test/src/client_test.dart | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/stream_chat/test/src/client_test.dart b/packages/stream_chat/test/src/client_test.dart index bbc7aef4..1dbf2770 100644 --- a/packages/stream_chat/test/src/client_test.dart +++ b/packages/stream_chat/test/src/client_test.dart @@ -935,5 +935,19 @@ void main() { }); }); }); + + group('channel', () { + test('should update channel', () async { + final client = StreamChatClient('test'); + final channelClient = + client.channel('type', id: 'id', extraData: {'name': 'init'}); + await channelClient.updatePartial({ + 'set': { + 'name': 'demo', + } + }); + expect(channelClient.extraData['name'], 'demo'); + }); + }); }); } From 8402a6cade2e58198e5d8e5b613a3976b35e1120 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Fri, 19 Feb 2021 16:24:36 +0530 Subject: [PATCH 3/4] feat: Added test --- .../stream_chat/test/src/client_test.dart | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/stream_chat/test/src/client_test.dart b/packages/stream_chat/test/src/client_test.dart index 1dbf2770..c9fca7b1 100644 --- a/packages/stream_chat/test/src/client_test.dart +++ b/packages/stream_chat/test/src/client_test.dart @@ -938,15 +938,33 @@ void main() { group('channel', () { test('should update channel', () async { - final client = StreamChatClient('test'); + final mockDio = MockDio(); + + when(mockDio.options).thenReturn(BaseOptions()); + when(mockDio.interceptors).thenReturn(Interceptors()); + + final client = StreamChatClient( + 'api-key', + httpClient: mockDio, + ); + final channelClient = client.channel('type', id: 'id', extraData: {'name': 'init'}); - await channelClient.updatePartial({ - 'set': { - 'name': 'demo', - } - }); - expect(channelClient.extraData['name'], 'demo'); + + var update = { + 'set': {'name': 'demo'} + }; + + when(mockDio.patch( + '/channels/${channelClient.type}/${channelClient.id}', + data: update, + )).thenAnswer((_) async => Response(data: '{}', statusCode: 200)); + + await channelClient.updatePartial(update); + verify(mockDio.patch( + '/channels/${channelClient.type}/${channelClient.id}', + data: update)) + .called(1); }); }); }); From 5845683eb1832ad64fe80ad547057947db1e9d57 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 19 Feb 2021 15:34:16 +0100 Subject: [PATCH 4/4] fix error builder --- .../stream_chat_flutter/lib/src/message_search_list_view.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/message_search_list_view.dart b/packages/stream_chat_flutter/lib/src/message_search_list_view.dart index 94a79eaf..da1144b8 100644 --- a/packages/stream_chat_flutter/lib/src/message_search_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_search_list_view.dart @@ -154,7 +154,7 @@ class _MessageSearchListViewState extends State { }, ); }, - errorBuilder: widget.emptyBuilder ?? + errorBuilder: widget.errorBuilder ?? (BuildContext context, dynamic error) { if (error is Error) { print((error).stackTrace);