Skip to content

Commit 528a73c

Browse files
authored
Refactor When_messages_flagged_expect_query_flagged_messages_return_them & When_user_flagged_expect_response_target_user_id_match to async/await + refactor CreateTempUniqueChannelAsync to retry few times if failed + reduce the max waiting time between retry attempts (#124)
1 parent 2c92f22 commit 528a73c

2 files changed

Lines changed: 37 additions & 50 deletions

File tree

Assets/Plugins/StreamChat/Tests/LowLevelClient/Integration/BaseIntegrationTests.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ protected async Task<ChannelState> CreateTempUniqueChannelAsync(string channelTy
9292
Debug.LogError($"Channel with id {channelId} already exists!");
9393
}
9494

95-
var channelState
96-
= await LowLevelClient.ChannelApi.GetOrCreateChannelAsync(channelType, channelId,
97-
channelGetOrCreateRequest);
95+
var channelState = await Try(() => LowLevelClient.ChannelApi.GetOrCreateChannelAsync(channelType, channelId,
96+
channelGetOrCreateRequest), channelState => channelState != null);
97+
9898
_tempChannelsCidsToDelete.Add(channelState.Channel.Cid);
9999
return channelState;
100100
}
@@ -110,19 +110,21 @@ protected static async Task<T> Try<T>(Func<Task<T>> task, Predicate<T> successCo
110110
{
111111
var response = default(T);
112112

113-
var attemptsLeft = maxAttempts;
114-
while (attemptsLeft > 0)
113+
var attempt = 1;
114+
while (attempt <= maxAttempts)
115115
{
116+
attempt++;
117+
116118
response = await task();
117119

118120
if (successCondition(response))
119121
{
120122
return response;
121123
}
122124

123-
var delay = initTimeoutMs * Math.Pow(2, (maxAttempts - attemptsLeft));
125+
var power = Math.Max(attempt, 5);
126+
var delay = initTimeoutMs * Math.Pow(2, power);
124127
await Task.Delay((int)delay);
125-
attemptsLeft--;
126128
}
127129

128130
return response;

Assets/Plugins/StreamChat/Tests/LowLevelClient/Integration/ModerationApiIntegrationTests.cs

Lines changed: 28 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections;
44
using System.Collections.Generic;
55
using System.Linq;
6+
using System.Threading.Tasks;
67
using NUnit.Framework;
78
using StreamChat.Core.LowLevelClient.Models;
89
using StreamChat.Core.LowLevelClient.Requests;
@@ -231,12 +232,14 @@ public IEnumerator When_message_flagged_expect_response_target_message_id_match(
231232
public IEnumerator When_messages_flagged_expect_query_flagged_messages_return_them()
232233
{
233234
yield return LowLevelClient.WaitForClientToConnect();
235+
yield return When_messages_flagged_expect_query_flagged_messages_return_them_Async().RunAsIEnumerator();
236+
}
234237

238+
private async Task When_messages_flagged_expect_query_flagged_messages_return_them_Async()
239+
{
235240
const string channelType = "messaging";
236241

237-
ChannelState channelState = null;
238-
yield return CreateTempUniqueChannel(channelType, new ChannelGetOrCreateRequest(),
239-
state => channelState = state);
242+
var channelState = await CreateTempUniqueChannelAsync(channelType, new ChannelGetOrCreateRequest());
240243

241244
//Send messages
242245

@@ -248,41 +251,29 @@ public IEnumerator When_messages_flagged_expect_query_flagged_messages_return_th
248251
}
249252
};
250253

251-
var messageResponseTask =
254+
var messageResponse = await
252255
LowLevelClient.MessageApi.SendNewMessageAsync(channelType, channelState.Channel.Id, sendMessageRequest);
253256

254-
MessageResponse messageResponse = null;
255-
yield return messageResponseTask.RunAsIEnumerator(response => { messageResponse = response; });
256-
257257
var sendMessageRequest2 = new SendMessageRequest
258258
{
259259
Message = new MessageRequest
260260
{
261-
Text = "message content"
261+
Text = "message content 2"
262262
}
263263
};
264264

265-
var messageResponseTask2 =
265+
var messageResponse2 = await
266266
LowLevelClient.MessageApi.SendNewMessageAsync(channelType, channelState.Channel.Id, sendMessageRequest2);
267267

268-
MessageResponse messageResponse2 = null;
269-
yield return messageResponseTask2.RunAsIEnumerator(response => { messageResponse2 = response; });
270-
271268
//Flag messages
272269

273-
var flagMessageTask = LowLevelClient.ModerationApi.FlagMessageAsync(messageResponse.Message.Id);
270+
var flagResponse = await LowLevelClient.ModerationApi.FlagMessageAsync(messageResponse.Message.Id);
274271

275-
yield return flagMessageTask.RunAsIEnumerator(response =>
276-
{
277-
Assert.AreEqual(messageResponse.Message.Id, response.Flag.TargetMessageId);
278-
});
272+
Assert.AreEqual(messageResponse.Message.Id, flagResponse.Flag.TargetMessageId);
279273

280-
var flagMessageTask2 = LowLevelClient.ModerationApi.FlagMessageAsync(messageResponse2.Message.Id);
274+
var flagResponse2 = await LowLevelClient.ModerationApi.FlagMessageAsync(messageResponse2.Message.Id);
281275

282-
yield return flagMessageTask2.RunAsIEnumerator(response =>
283-
{
284-
Assert.AreEqual(messageResponse2.Message.Id, response.Flag.TargetMessageId);
285-
});
276+
Assert.AreEqual(messageResponse2.Message.Id, flagResponse2.Flag.TargetMessageId);
286277

287278
//Query message flags
288279
var queryMessageFlagsRequest = new QueryMessageFlagsRequest
@@ -298,37 +289,31 @@ public IEnumerator When_messages_flagged_expect_query_flagged_messages_return_th
298289
}
299290
};
300291

301-
var queryMessageFlagsTask = LowLevelClient.ModerationApi.QueryMessageFlagsAsync(queryMessageFlagsRequest);
292+
var flagsQueryResponse = await LowLevelClient.ModerationApi.QueryMessageFlagsAsync(queryMessageFlagsRequest);
302293

303-
yield return queryMessageFlagsTask.RunAsIEnumerator(response =>
304-
{
305-
var message1 = response.Flags.FirstOrDefault(_ => _.Message.Id == messageResponse.Message.Id);
306-
var message2 = response.Flags.FirstOrDefault(_ => _.Message.Id == messageResponse2.Message.Id);
294+
var message1 = flagsQueryResponse.Flags.FirstOrDefault(_ => _.Message.Id == messageResponse.Message.Id);
295+
var message2 = flagsQueryResponse.Flags.FirstOrDefault(_ => _.Message.Id == messageResponse2.Message.Id);
307296

308-
Assert.AreEqual(2, response.Flags.Count);
309-
Assert.NotNull(message1);
310-
Assert.NotNull(message2);
311-
});
297+
Assert.AreEqual(2, flagsQueryResponse.Flags.Count);
298+
Assert.NotNull(message1);
299+
Assert.NotNull(message2);
312300
}
313301

314302
[UnityTest]
315303
public IEnumerator When_user_flagged_expect_response_target_user_id_match()
316304
{
317305
yield return LowLevelClient.WaitForClientToConnect();
306+
yield return When_user_flagged_expect_response_target_user_id_match_Async().RunAsIEnumerator();
307+
}
318308

309+
private async Task When_user_flagged_expect_response_target_user_id_match_Async()
310+
{
319311
const string channelType = "messaging";
320-
321-
ChannelState channelState = null;
322-
yield return CreateTempUniqueChannel(channelType, new ChannelGetOrCreateRequest(),
323-
state => channelState = state);
324-
325-
var flagMessageTask = LowLevelClient.ModerationApi.FlagUserAsync(OtherUserId);
326-
327-
yield return flagMessageTask.RunAsIEnumerator(response =>
328-
{
329-
Assert.AreEqual(OtherUserId, response.Flag.TargetUser.Id);
330-
});
331-
}
312+
var channelState = await CreateTempUniqueChannelAsync(channelType, new ChannelGetOrCreateRequest());
313+
314+
var response = await LowLevelClient.ModerationApi.FlagUserAsync(OtherUserId);
315+
Assert.AreEqual(OtherUserId, response.Flag.TargetUser.Id);
316+
}
332317
}
333318
}
334319
#endif

0 commit comments

Comments
 (0)