From 016e049e7d6bece79049d27d3040f93680860639 Mon Sep 17 00:00:00 2001 From: Marc O'Morain Date: Wed, 27 Sep 2023 11:21:43 +0100 Subject: [PATCH 1/2] Add `async` version of `IRestChannel.Status` Fixes #1263 --- src/IO.Ably.Shared/Rest/IRestChannel.cs | 7 +++++++ src/IO.Ably.Shared/Rest/RestChannel.cs | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/IO.Ably.Shared/Rest/IRestChannel.cs b/src/IO.Ably.Shared/Rest/IRestChannel.cs index dfeed61c8..b3a4c0dbd 100644 --- a/src/IO.Ably.Shared/Rest/IRestChannel.cs +++ b/src/IO.Ably.Shared/Rest/IRestChannel.cs @@ -106,6 +106,13 @@ public interface IRestChannel /// Returns the active status for the channel including the number of publishers, subscribers and presenceMembers etc. /// /// Channel Details. + Task StatusAsync(); + + /// + /// Sync version of . + /// /// Prefer async version where possible. + /// + /// Channel Details. ChannelDetails Status(); } diff --git a/src/IO.Ably.Shared/Rest/RestChannel.cs b/src/IO.Ably.Shared/Rest/RestChannel.cs index 794e9d615..fa4eac1dc 100644 --- a/src/IO.Ably.Shared/Rest/RestChannel.cs +++ b/src/IO.Ably.Shared/Rest/RestChannel.cs @@ -227,7 +227,8 @@ public PaginatedResult History(PaginatedRequestParams query) return AsyncHelper.RunSync(() => HistoryAsync(query)); } - private async Task StatusAsync() + /// + public async Task StatusAsync() { AblyRequest request = _ablyRest.CreateGetRequest("/channels/" + Name); return await _ablyRest.ExecuteRequest(request); From 731e172ae325413003adc8b57cdb534f3023dc34 Mon Sep 17 00:00:00 2001 From: Marc O'Morain Date: Wed, 27 Sep 2023 12:26:55 +0100 Subject: [PATCH 2/2] Add test for channel status --- src/IO.Ably.Tests.Shared/Rest/ChannelSpecs.cs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/IO.Ably.Tests.Shared/Rest/ChannelSpecs.cs b/src/IO.Ably.Tests.Shared/Rest/ChannelSpecs.cs index 2a3ca4285..2958428ea 100644 --- a/src/IO.Ably.Tests.Shared/Rest/ChannelSpecs.cs +++ b/src/IO.Ably.Tests.Shared/Rest/ChannelSpecs.cs @@ -279,6 +279,55 @@ public ChannelPublish(ITestOutputHelper output) } } + public class ChannelStatus : ChannelSpecs + { + public ChannelStatus(ITestOutputHelper output) + : base(output) + { + } + + [Fact] + [Trait("spec", "XXX")] + public async Task Status_ShouldMakeGetRequest() + { + const string channelName = "test:one"; + var response = new ChannelDetails + { + ChannelId = "foo", + Status = new Ably.Rest.ChannelStatus + { + IsActive = true, + Occupancy = new ChannelOccupancy + { + Metrics = new ChannelMetrics + { + Connections = 1, + Publishers = 2, + Subscribers = 3, + PresenceConnections = 4, + PresenceSubscribers = 5, + PresenceMembers = 6, + }, + }, + }, + }; + var client = GetRestClient(request => new AblyResponse + { + Headers = DataRequestQueryTests.GetSampleHistoryRequestHeaders(), + TextResponse = response.ToJson(), + }.ToTask()); + + var channel = client.Channels.Get(channelName); + var result = await channel.StatusAsync(); + LastRequest.Method.Should().Be(HttpMethod.Get); + LastRequest.Url.Should().Be($"/channels/{channelName}"); + result.Status.Occupancy.Metrics.PresenceMembers.Should().Be(6); + + var syncResult = channel.Status(); + syncResult.Should().BeEquivalentTo(result); + } + } + public class ChannelHistory : ChannelSpecs { private readonly IRestChannel _channel;