Skip to content

Commit 5277ace

Browse files
authored
Merge pull request #191 from GetStream/feature/uni-83-fix-config-fields-types-for-partition_size-and-partition_ttl
Fix PartitionTtl to be of string type (example value is "4h")
2 parents 2a449ea + 78ac142 commit 5277ace

File tree

5 files changed

+55
-27
lines changed

5 files changed

+55
-27
lines changed

Assets/Plugins/StreamChat/Core/InternalDTO/Models/ChannelConfigInternalDTO.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ internal partial class ChannelConfigInternalDTO
7171
public int? PartitionSize { get; set; }
7272

7373
[Newtonsoft.Json.JsonProperty("partition_ttl", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
74-
public int? PartitionTtl { get; set; }
74+
public string PartitionTtl { get; set; }
7575

7676
[Newtonsoft.Json.JsonProperty("polls", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
7777
public bool Polls { get; set; }

Assets/Plugins/StreamChat/Core/InternalDTO/Models/ChannelConfigWithInfoInternalDTO.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ internal partial class ChannelConfigWithInfoInternalDTO
7474
public int? PartitionSize { get; set; }
7575

7676
[Newtonsoft.Json.JsonProperty("partition_ttl", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
77-
public int? PartitionTtl { get; set; }
77+
public string PartitionTtl { get; set; }
7878

7979
[Newtonsoft.Json.JsonProperty("polls", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
8080
public bool Polls { get; set; }

Assets/Plugins/StreamChat/Core/Models/StreamChannelConfig.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,16 @@ public class StreamChannelConfig : IStateLoadableFrom<ChannelConfigWithInfoInter
7070
/// Channel type name
7171
/// </summary>
7272
public string Name { get; private set; }
73+
74+
/// <summary>
75+
/// Dynamic partition size. See: <see href="https://getstream.io/chat/docs/unity/dynamic_partitioning/"/>
76+
/// </summary>
77+
public int? PartitionSize { get; set; }
78+
79+
/// <summary>
80+
/// Dynamic partition TTL (time to live). See: <see href="https://getstream.io/chat/docs/unity/dynamic_partitioning/"/>
81+
/// </summary>
82+
public string PartitionTtl { get; set; }
7383

7484
/// <summary>
7585
/// Enables push notifications
@@ -139,6 +149,8 @@ StreamChannelConfig IStateLoadableFrom<ChannelConfigWithInfoInternalDTO, StreamC
139149
MessageRetention = dto.MessageRetention;
140150
Mutes = dto.Mutes;
141151
Name = dto.Name;
152+
PartitionSize = dto.PartitionSize;
153+
PartitionTtl = dto.PartitionTtl;
142154
PushNotifications = dto.PushNotifications;
143155
Quotes = dto.Quotes;
144156
Reactions = dto.Reactions;

Assets/Plugins/StreamChat/Tests/StatefulClient/BaseStateIntegrationTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@ public async void OneTimeTearDown()
4949
/// <summary>
5050
/// Create temp channel with random id that will be removed in [TearDown]
5151
/// </summary>
52-
protected async Task<IStreamChannel> CreateUniqueTempChannelAsync(string name = null, bool watch = true, StreamChatClient overrideClient = null)
52+
protected async Task<IStreamChannel> CreateUniqueTempChannelAsync(string name = null, bool watch = true, ChannelType? channelTypeOverride = default, StreamChatClient overrideClient = null)
5353
{
5454
var channelId = "random-channel-11111-" + Guid.NewGuid();
5555
var client = overrideClient ?? Client;
56+
var channelType = channelTypeOverride ?? ChannelType.Messaging;
5657

57-
var channelState = await client.InternalGetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId, name, watch: watch);
58+
var channelState = await client.InternalGetOrCreateChannelWithIdAsync(channelType, channelId, name, watch: watch);
5859
_tempChannels.Add(channelState);
5960
return channelState;
6061
}

Assets/Plugins/StreamChat/Tests/StatefulClient/ChannelsTests.cs

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ private async Task When_unmute_muted_channel_expect_unmuted_Async()
134134

135135
Assert.IsNotEmpty(Client.LocalUserData.ChannelMutes);
136136

137-
var mutes = await TryAsync(() => Task.FromResult(Client.LocalUserData.ChannelMutes), mutes => mutes.FirstOrDefault(m => m.Channel == channel) != null);
137+
var mutes = await TryAsync(() => Task.FromResult(Client.LocalUserData.ChannelMutes),
138+
mutes => mutes.FirstOrDefault(m => m.Channel == channel) != null);
138139
var channelMute = mutes.FirstOrDefault(m => m.Channel == channel);
139140
Assert.IsNotNull(channelMute);
140141
Assert.AreEqual(true, channel.Muted);
@@ -338,7 +339,7 @@ await WaitWhileTrueAsync(
338339
Assert.IsFalse(channel.CustomData.ContainsKey("owned_dogs"));
339340
Assert.IsFalse(channel.CustomData.ContainsKey("breakfast"));
340341
}
341-
342+
342343
[UnityTest]
343344
public IEnumerator When_update_overwrite_channel_with_full_data_expect_no_change()
344345
=> ConnectAndExecute(When_update_overwrite_channel_with_full_data_expect_no_change_Async);
@@ -366,7 +367,7 @@ void OnChannelUpdated(IStreamChannel channel2)
366367
}
367368

368369
channel.Updated += OnChannelUpdated;
369-
370+
370371
await channel.UpdatePartialAsync(setFields: new Dictionary<string, object>
371372
{
372373
{ "owned_dogs", 5 },
@@ -383,15 +384,15 @@ void OnChannelUpdated(IStreamChannel channel2)
383384
await WaitWithTimeoutAsync(cts.Task, $"Channel {nameof(channel.Updated)} event was not received");
384385

385386
channel.Updated -= OnChannelUpdated;
386-
387+
387388
Assert.AreEqual(channelName, channel.Name);
388389
Assert.AreEqual(2, channel.CustomData.Count);
389390
Assert.IsTrue(channel.CustomData.ContainsKey("owned_dogs"));
390391
Assert.IsTrue(channel.CustomData.ContainsKey("breakfast"));
391392
Assert.AreEqual(5, channel.CustomData.Get<int>("owned_dogs"));
392393
Assert.AreEqual("donuts", channel.CustomData.Get<string[]>("breakfast")[0]);
393394
}
394-
395+
395396
[UnityTest]
396397
public IEnumerator When_update_overwrite_channel_with_no_data_expect_data_cleared()
397398
=> ConnectAndExecute(When_update_overwrite_channel_with_no_data_expect_data_cleared_Async);
@@ -419,7 +420,7 @@ void OnChannelUpdated(IStreamChannel channel2)
419420
}
420421

421422
channel.Updated += OnChannelUpdated;
422-
423+
423424
await channel.UpdatePartialAsync(setFields: new Dictionary<string, object>
424425
{
425426
{ "owned_dogs", 5 },
@@ -436,11 +437,11 @@ void OnChannelUpdated(IStreamChannel channel2)
436437
await WaitWithTimeoutAsync(cts.Task, $"Channel {nameof(channel.Updated)} event was not received");
437438

438439
channel.Updated -= OnChannelUpdated;
439-
440+
440441
Assert.AreEqual(string.Empty, channel.Name);
441442
Assert.AreEqual(0, channel.CustomData.Count);
442443
}
443-
444+
444445
[UnityTest]
445446
public IEnumerator When_update_overwrite_channel_with_partial_data_expect_data_partially_cleared()
446447
=> ConnectAndExecute(When_update_overwrite_channel_with_partial_data_expect_data_partially_cleared_Async);
@@ -469,7 +470,7 @@ void OnChannelUpdated(IStreamChannel channel2)
469470
}
470471

471472
channel.Updated += OnChannelUpdated;
472-
473+
473474
await channel.UpdatePartialAsync(setFields: new Dictionary<string, object>
474475
{
475476
{ "owned_dogs", 5 },
@@ -486,15 +487,15 @@ await channel.UpdateOverwriteAsync(new StreamUpdateOverwriteChannelRequest
486487
Name = channelName2,
487488
CustomData = new StreamCustomDataRequest
488489
{
489-
{"owned_dogs", 7},
490-
{"owned_cats", "twenty"}
490+
{ "owned_dogs", 7 },
491+
{ "owned_cats", "twenty" }
491492
}
492493
});
493494

494495
await WaitWithTimeoutAsync(cts.Task, $"Channel {nameof(channel.Updated)} event was not received");
495496

496497
channel.Updated -= OnChannelUpdated;
497-
498+
498499
Assert.AreEqual(channelName2, channel.Name);
499500
Assert.AreEqual(2, channel.CustomData.Count);
500501
Assert.IsTrue(channel.CustomData.ContainsKey("owned_dogs"));
@@ -582,7 +583,7 @@ void OnChannelUpdated(IStreamChannel channel2)
582583

583584
channel.Updated -= OnChannelUpdated;
584585
}
585-
586+
586587
//StreamTODO: debug why having 2 clients connected simultaneously doesn't work
587588
// [UnityTest]
588589
// public IEnumerator When_inviting_a_member_expect_invited_user_to_receive_an_invite()
@@ -612,7 +613,7 @@ void OnChannelUpdated(IStreamChannel channel2)
612613
// await WaitWithTimeout(taskCompletionSource.Task, maxSeconds: 3,
613614
// $"Event {nameof(otherClient.ChannelInviteReceived)} was not received");
614615
// }
615-
616+
616617
[UnityTest]
617618
public IEnumerator When_freezing_a_channel_expect_channel_frozen()
618619
=> ConnectAndExecute(When_freezing_a_channel_expect_channel_frozen_Async);
@@ -623,7 +624,7 @@ private async Task When_freezing_a_channel_expect_channel_frozen_Async()
623624
await channel.FreezeAsync();
624625
Assert.IsTrue(channel.Frozen);
625626
}
626-
627+
627628
[UnityTest]
628629
public IEnumerator When_sending_message_to_frozen_channel_expect_error_message_returned()
629630
=> ConnectAndExecute(When_sending_message_to_frozen_channel_expect_error_message_returned_Async);
@@ -636,18 +637,18 @@ private async Task When_sending_message_to_frozen_channel_expect_error_message_r
636637
var lastNormalMessage = channel.Messages.LastOrDefault();
637638
Assert.IsNotNull(lastNormalMessage);
638639
Assert.AreNotEqual(StreamMessageType.Error, lastNormalMessage.Type);
639-
640+
640641
await channel.FreezeAsync();
641642
await WaitWhileFalseAsync(() => channel.Frozen);
642643
Assert.IsTrue(channel.Frozen);
643-
644+
644645
await channel.SendNewMessageAsync("MessageAfterFrozenChannel");
645646
var lastMessage = channel.Messages.LastOrDefault();
646-
647+
647648
Assert.IsNotNull(lastMessage);
648649
Assert.AreEqual(StreamMessageType.Error, lastMessage.Type);
649650
}
650-
651+
651652
[UnityTest]
652653
public IEnumerator When_unfreezing_a_frozen_channel_expect_channel_unfrozen()
653654
=> ConnectAndExecute(When_unfreezing_a_frozen_channel_expect_channel_unfrozen_Async);
@@ -656,21 +657,35 @@ private async Task When_unfreezing_a_frozen_channel_expect_channel_unfrozen_Asyn
656657
{
657658
var channel = await CreateUniqueTempChannelAsync();
658659
await channel.FreezeAsync();
659-
660+
660661
await WaitWhileFalseAsync(() => channel.Frozen);
661662
Assert.IsTrue(channel.Frozen);
662-
663+
663664
await channel.UnfreezeAsync();
664-
665+
665666
await WaitWhileTrueAsync(() => channel.Frozen);
666667
Assert.IsFalse(channel.Frozen);
667-
668+
668669
await channel.SendNewMessageAsync("MessageAfterUnfrozenChannel");
669670
var lastMessage = channel.Messages.LastOrDefault();
670671
Assert.IsNotNull(lastMessage);
671672
Assert.AreEqual("MessageAfterUnfrozenChannel", lastMessage.Text);
672673
Assert.AreNotEqual(StreamMessageType.Error, lastMessage.Type);
673674
}
675+
676+
[UnityTest]
677+
public IEnumerator When_creating_channel_with_partition_ttl_and_size_expect_no_errors()
678+
=> ConnectAndExecute(When_setting_channel_partition_ttl_and_size_expect_no_errors_Async);
679+
680+
private async Task When_setting_channel_partition_ttl_and_size_expect_no_errors_Async()
681+
{
682+
var channel = await CreateUniqueTempChannelAsync(channelTypeOverride: ChannelType.Custom("test_partition"));
683+
684+
// These values were set manually in the Dashboard. Atm they cannot be set via client-side SDK
685+
Assert.AreEqual(50, channel.Config.PartitionSize);
686+
Assert.AreEqual("24h", channel.Config.PartitionTtl);
687+
688+
}
674689
}
675690
}
676691

0 commit comments

Comments
 (0)