using System.Net.Http.Json; using System.Text.Json; namespace ClaudeMailbox.Tests; public sealed class RaceTests { [Fact] public async Task Parallel_CheckInbox_Delivers_Each_Message_Exactly_Once() { await using var host = await TestHost.StartAsync(); using var sender = host.NewClientFor("sender"); using var recipient = host.NewClientFor("recipient"); const int messageCount = 50; for (var i = 0; i < messageCount; i++) { var res = await sender.PostAsJsonAsync("/v1/send", new { to = "recipient", body = $"msg-{i}" }); res.EnsureSuccessStatusCode(); } // Fire multiple concurrent checks. Each message must appear in exactly one result set. var tasks = Enumerable.Range(0, 8).Select(async _ => { var res = await recipient.PostAsync("/v1/check-inbox?name=recipient", null); res.EnsureSuccessStatusCode(); return await res.Content.ReadFromJsonAsync(); }); var results = await Task.WhenAll(tasks); var ids = new List(); foreach (var arr in results) foreach (var m in arr.EnumerateArray()) ids.Add(m.GetProperty("id").GetInt64()); Assert.Equal(messageCount, ids.Count); Assert.Equal(messageCount, ids.Distinct().Count()); } }