diff --git a/server/QMax.Api/Controllers/ChatsController.cs b/server/QMax.Api/Controllers/ChatsController.cs index 1291861..fab3d3f 100644 --- a/server/QMax.Api/Controllers/ChatsController.cs +++ b/server/QMax.Api/Controllers/ChatsController.cs @@ -30,7 +30,6 @@ public sealed class ChatsController( .OrderByDescending(x => x.IsPinned) .ThenByDescending(x => x.UnreadCount > 0) .ThenByDescending(x => x.LastMessageAt ?? x.UpdatedAt) - .Take(200) .ToArray(); return chats.Select(projection.ToDto).ToArray(); diff --git a/tests/QMax.Tests/ApiSmokeTests.cs b/tests/QMax.Tests/ApiSmokeTests.cs index 879023b..4999117 100644 --- a/tests/QMax.Tests/ApiSmokeTests.cs +++ b/tests/QMax.Tests/ApiSmokeTests.cs @@ -110,6 +110,48 @@ public sealed class ApiSmokeTests : IDisposable }); } + [Fact] + public async Task ChatListReturnsAllChatsBeyondLegacyLimit() + { + using var factory = _factory.WithWebHostBuilder(builder => + { + builder.ConfigureTestServices(services => + { + services.RemoveAll(); + }); + }); + using var client = factory.CreateClient(); + await LoginAsync(client); + + using (var scope = factory.Services.CreateScope()) + { + var db = scope.ServiceProvider.GetRequiredService(); + for (var index = 0; index < 221; index++) + { + db.Chats.Add(new Chat + { + ExternalId = $"bulk-chat-{index:D3}", + Title = index switch + { + 219 => "\u0421\u0430\u0438\u0434", + 220 => "\u0410\u043d\u044e\u0442\u0430", + _ => $"Bulk Chat {index:D3}" + }, + Kind = ChatKind.MaxDialog, + LastMessageAt = DateTimeOffset.UtcNow.AddMinutes(-index) + }); + } + + await db.SaveChangesAsync(); + } + + var chats = await client.GetFromJsonAsync("/api/chats", JsonOptions); + Assert.NotNull(chats); + Assert.Equal(221, chats!.Count(x => x.ExternalId?.StartsWith("bulk-chat-", StringComparison.Ordinal) == true)); + Assert.Contains(chats, x => x.Title == "\u0421\u0430\u0438\u0434"); + Assert.Contains(chats, x => x.Title == "\u0410\u043d\u044e\u0442\u0430"); + } + [Fact] public async Task SyncMergesLateDiscoveredAttachmentsIntoExistingMessage() {