diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 00e3d35..5625349 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -16,7 +16,7 @@ jobs: dotnet-version: '10.x' - name: Run focused tests - run: dotnet test src/HuaJiBot.NET.UnitTest --filter 'FullyQualifiedName~DailySummaryTest|FullyQualifiedName~AsciiArtToolsTest|FullyQualifiedName~WebDataServiceTest|FullyQualifiedName~VisionInputTest|FullyQualifiedName~FlueBridgeTest|FullyQualifiedName~ClubAffairsReminderTest|FullyQualifiedName~CalendarOutputTest' + run: dotnet test src/HuaJiBot.NET.UnitTest --filter 'FullyQualifiedName~DailySummaryTest|FullyQualifiedName~AsciiArtToolsTest|FullyQualifiedName~WebDataServiceTest|FullyQualifiedName~VisionInputTest|FullyQualifiedName~FlueBridgeTest|FullyQualifiedName~ClubAffairsReminderTest|FullyQualifiedName~CalendarOutputTest|FullyQualifiedName~TicketReminderTest' format-check: runs-on: ubuntu-latest diff --git a/src/HuaJiBot.NET.Plugin.RepairTeam/PluginMain.cs b/src/HuaJiBot.NET.Plugin.RepairTeam/PluginMain.cs index 324768a..1e66e81 100644 --- a/src/HuaJiBot.NET.Plugin.RepairTeam/PluginMain.cs +++ b/src/HuaJiBot.NET.Plugin.RepairTeam/PluginMain.cs @@ -38,7 +38,7 @@ protected override void Initialize() _reminder = new TicketReminder( Service, Config, - _saturday.GetActiveTicketsAsync, + since => _saturday.GetActiveTicketsAsync(since), Path.Combine(Service.GetPluginDataPath(), "ticket_reminder.json") ); _reminder.Start(); @@ -182,15 +182,10 @@ private async Task TicketsCommandAsync(GroupMessageEventArgs e) { if (!Config.RemindGroups.Contains(e.GroupId) || _saturday is null) return; - if (Config.RemindSince is not { } since) - { - await e.Reply("未配置 RemindSince,工单查询未启用"); - return; - } List tickets; try { - tickets = await _saturday.GetActiveTicketsAsync(since); + tickets = await _saturday.GetActiveTicketsAsync(); } catch (Exception ex) { diff --git a/src/HuaJiBot.NET.Plugin.RepairTeam/SaturdayClient.cs b/src/HuaJiBot.NET.Plugin.RepairTeam/SaturdayClient.cs index 37619b5..505edf6 100644 --- a/src/HuaJiBot.NET.Plugin.RepairTeam/SaturdayClient.cs +++ b/src/HuaJiBot.NET.Plugin.RepairTeam/SaturdayClient.cs @@ -53,8 +53,8 @@ private class LogDto public DateTimeOffset GmtCreate { get; set; } } - /// Tickets in progress that were created at or after . - public async Task> GetActiveTicketsAsync(DateTimeOffset since) + /// Tickets in progress, limited to those created at or after when given. + public async Task> GetActiveTicketsAsync(DateTimeOffset? since = null) { var tickets = new List(); foreach (var status in ActiveStatuses) @@ -64,7 +64,7 @@ public async Task> GetActiveTicketsAsync(DateTimeOffset since) var page = await GetAsync>( $"events?status={status}&order=DESC&limit={PageSize}&offset={offset}" ); - var recent = page.TakeWhile(e => e.GmtCreate >= since).ToList(); + var recent = page.TakeWhile(e => since is null || e.GmtCreate >= since).ToList(); foreach (var summary in recent) { try diff --git a/src/HuaJiBot.NET.UnitTest/TicketReminderTest.cs b/src/HuaJiBot.NET.UnitTest/TicketReminderTest.cs index 607dc6b..74c6ed1 100644 --- a/src/HuaJiBot.NET.UnitTest/TicketReminderTest.cs +++ b/src/HuaJiBot.NET.UnitTest/TicketReminderTest.cs @@ -227,6 +227,29 @@ _ when path.StartsWith("/events?") => (HttpStatusCode.OK, "[]"), Assert.That(errors, Has.Count.EqualTo(1).And.Some.Contains("#21")); } + [Test] + public async Task Client_WithoutSince_ReturnsOldTicketsToo() + { + var handler = new StubHandler(path => + path switch + { + _ when path.StartsWith("/events?status=accepted&order=DESC&limit=50&offset=0") => ( + HttpStatusCode.OK, + $"[{Summary(711, "2026-05-15T14:00:10+08:00")},{Summary(508, "2025-06-06T16:25:04+08:00")}]" + ), + _ when path.StartsWith("/events?") => (HttpStatusCode.OK, "[]"), + "/events/711" => (HttpStatusCode.OK, Detail(711, "accepted", "2026-05-15T14:00:10+08:00")), + "/events/508" => (HttpStatusCode.OK, Detail(508, "accepted", "2025-06-06T16:25:04+08:00")), + _ => (HttpStatusCode.NotFound, ""), + } + ); + var client = new SaturdayClient(new HttpClient(handler), "https://api.test", (_, _) => { }); + + var tickets = await client.GetActiveTicketsAsync(); + + Assert.That(tickets.Select(x => x.Id), Is.EqualTo(new long[] { 711, 508 })); + } + [Test] public async Task Client_PagesUntilAPageEndsBeforeSince() {