diff --git a/src/Models/Channel.cs b/src/Models/Channel.cs index 2e2278d2..39177e32 100644 --- a/src/Models/Channel.cs +++ b/src/Models/Channel.cs @@ -99,9 +99,24 @@ public class ChannelRequest : CustomDataBase public ConfigOverridesRequest ConfigOverrides { get; set; } } + public class ParsedPredefinedFilterResponse + { + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("filter")] + public Dictionary Filter { get; set; } + + [JsonProperty("sort", NullValueHandling = NullValueHandling.Ignore)] + public List Sort { get; set; } + } + public class QueryChannelResponse : ApiResponse { public List Channels { get; set; } + + [JsonProperty("predefined_filter", NullValueHandling = NullValueHandling.Ignore)] + public ParsedPredefinedFilterResponse PredefinedFilter { get; set; } } public class QueryMembersResponse : ApiResponse diff --git a/tests/ParsedPredefinedFilterResponseTests.cs b/tests/ParsedPredefinedFilterResponseTests.cs new file mode 100644 index 00000000..96258353 --- /dev/null +++ b/tests/ParsedPredefinedFilterResponseTests.cs @@ -0,0 +1,73 @@ +using System.Collections.Generic; +using FluentAssertions; +using Newtonsoft.Json; +using NUnit.Framework; +using StreamChat.Models; + +namespace StreamChatTests +{ + /// Tests for . + /// + /// + /// The tests follow arrange-act-assert pattern divided by empty lines. + /// Please make sure to follow the pattern to keep the consistency. + /// + [TestFixture] + public class ParsedPredefinedFilterResponseTests + { + [Test] + public void TestDeserializePredefinedFilterResponse() + { + var json = @"{ + ""channels"": [], + ""predefined_filter"": { + ""name"": ""user_messaging"", + ""filter"": {""type"": ""messaging"", ""members"": {""$in"": [""user123""]}}, + ""sort"": [{""Field"": ""last_message_at"", ""Direction"": -1}] + }, + ""duration"": ""0.01s"" + }"; + + var response = JsonConvert.DeserializeObject(json); + + response.PredefinedFilter.Should().NotBeNull(); + response.PredefinedFilter.Name.Should().Be("user_messaging"); + response.PredefinedFilter.Filter.Should().NotBeNull(); + response.PredefinedFilter.Filter["type"].Should().Be("messaging"); + response.PredefinedFilter.Sort.Should().HaveCount(1); + response.PredefinedFilter.Sort[0].Field.Should().Be("last_message_at"); + } + + [Test] + public void TestDeserializeResponseWithoutPredefinedFilter() + { + var json = @"{ + ""channels"": [], + ""duration"": ""0.01s"" + }"; + + var response = JsonConvert.DeserializeObject(json); + + response.PredefinedFilter.Should().BeNull(); + } + + [Test] + public void TestDeserializePredefinedFilterWithoutSort() + { + var json = @"{ + ""channels"": [], + ""predefined_filter"": { + ""name"": ""simple_filter"", + ""filter"": {""type"": ""messaging""} + }, + ""duration"": ""0.01s"" + }"; + + var response = JsonConvert.DeserializeObject(json); + + response.PredefinedFilter.Should().NotBeNull(); + response.PredefinedFilter.Name.Should().Be("simple_filter"); + response.PredefinedFilter.Sort.Should().BeNull(); + } + } +}