Skip to content

Commit 3e4d64c

Browse files
authored
feat: Add support for MemberLimit and MessageLimit when querying channels. (#156)
* feat: Add support for `MemberLimit` and `MessageLimit` when querying channels. Can be set in `QueryChannelsOptions` * Add seperate channel for tests asserting message limits -> another test was truncating the messages * Add async postfix to test names
1 parent c7c2da2 commit 3e4d64c

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

src/Models/QueryOptions.cs

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public class QueryChannelsOptions
7676

7777
public int Offset { get; set; } = DefaultOffset;
7878
public int Limit { get; set; } = DefaultLimit;
79+
public int MemberLimit { get; set; }
80+
public int MessageLimit { get; set; }
7981
public bool Presence { get; set; }
8082
public bool State { get; set; }
8183
public bool Watch { get; set; }

tests/ChannelClientTests.cs

+70-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Linq;
44
using System.Threading.Tasks;
55
using FluentAssertions;
6-
using Newtonsoft.Json;
76
using NUnit.Framework;
87
using StreamChat.Models;
98

@@ -21,6 +20,7 @@ public class ChannelClientTests : TestBase
2120
private UserRequest _user2;
2221
private UserRequest _user3;
2322
private ChannelWithConfig _channel;
23+
private ChannelWithConfig _channel2;
2424

2525
[OneTimeSetUp]
2626
public async Task SetupAsync()
@@ -29,7 +29,13 @@ public async Task SetupAsync()
2929
await UpsertNewUserAsync());
3030
_channel = await CreateChannelAsync(createdByUserId: _user1.Id,
3131
members: new[] { _user1.Id, _user2.Id, _user3.Id });
32-
await _messageClient.SendMessageAsync(_channel.Type, _channel.Id, _user1.Id, "text");
32+
_channel2 = await CreateChannelAsync(createdByUserId: _user1.Id,
33+
members: new[] { _user1.Id, _user2.Id, _user3.Id });
34+
await _messageClient.SendMessageAsync(_channel2.Type, _channel2.Id, _user1.Id, "text");
35+
await _messageClient.SendMessageAsync(_channel2.Type, _channel2.Id, _user1.Id, "text 2");
36+
await _messageClient.SendMessageAsync(_channel2.Type, _channel2.Id, _user1.Id, "text 3");
37+
await _messageClient.SendMessageAsync(_channel2.Type, _channel2.Id, _user1.Id, "text 4");
38+
await _messageClient.SendMessageAsync(_channel2.Type, _channel2.Id, _user1.Id, "text 5");
3339
}
3440

3541
[OneTimeTearDown]
@@ -812,5 +818,67 @@ public async Task TestUnarchiveChannelForMemberAsync()
812818

813819
archivedChannels.Channels.Should().NotContain(c => c.Channel.Cid == channel.Cid);
814820
}
821+
822+
[Test]
823+
public async Task TestQueryChannelsWithoutMembersLimitAsync()
824+
{
825+
var queryChannelResponse = await _channelClient.QueryChannelsAsync(new QueryChannelsOptions
826+
{
827+
Filter = new Dictionary<string, object>()
828+
{
829+
{ "cid", _channel2.Cid },
830+
},
831+
UserId = _user1.Id,
832+
});
833+
queryChannelResponse.Channels.Should().HaveCount(1);
834+
queryChannelResponse.Channels.First().Members.Should().HaveCount(3);
835+
}
836+
837+
[Test]
838+
public async Task TestQueryChannelsWithMembersLimitAsync()
839+
{
840+
var queryChannelResponse = await _channelClient.QueryChannelsAsync(new QueryChannelsOptions
841+
{
842+
Filter = new Dictionary<string, object>()
843+
{
844+
{ "cid", _channel2.Cid },
845+
},
846+
MemberLimit = 1,
847+
UserId = _user1.Id,
848+
});
849+
queryChannelResponse.Channels.Should().HaveCount(1);
850+
queryChannelResponse.Channels.First().Members.Should().HaveCount(1);
851+
}
852+
853+
[Test]
854+
public async Task TestQueryChannelsWithoutMessageLimitAsync()
855+
{
856+
var queryChannelResponse = await _channelClient.QueryChannelsAsync(new QueryChannelsOptions
857+
{
858+
Filter = new Dictionary<string, object>()
859+
{
860+
{ "cid", _channel2.Cid },
861+
},
862+
UserId = _user1.Id,
863+
});
864+
queryChannelResponse.Channels.Should().HaveCount(1);
865+
queryChannelResponse.Channels.First().Messages.Should().HaveCount(5);
866+
}
867+
868+
[Test]
869+
public async Task TestQueryChannelsWithMessageLimitAsync()
870+
{
871+
var queryChannelResponse = await _channelClient.QueryChannelsAsync(new QueryChannelsOptions
872+
{
873+
Filter = new Dictionary<string, object>()
874+
{
875+
{ "cid", _channel2.Cid },
876+
},
877+
MessageLimit = 2,
878+
UserId = _user1.Id,
879+
});
880+
queryChannelResponse.Channels.Should().HaveCount(1);
881+
queryChannelResponse.Channels.First().Messages.Should().HaveCount(2);
882+
}
815883
}
816884
}

0 commit comments

Comments
 (0)