The status PATCH needs statusName alongside statusId or the API 400s, so every write-back had been silently failing. The board's flat assigneeName is null on every live ticket; the real assignee list is ticketAssignees[]. Import now also picks up In Bearbeitung tickets, not just Offen ones. Both issues are live-verified against the real API, so the feature flag flips back on.
68 lines
2.3 KiB
C#
68 lines
2.3 KiB
C#
using ClaudeDo.Worker.Tickets;
|
|
using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
|
|
|
|
namespace ClaudeDo.Worker.Tests.Tickets;
|
|
|
|
public sealed class TicketStatusMapTests
|
|
{
|
|
[Theory]
|
|
[InlineData(TaskStatus.Running, 2)]
|
|
[InlineData(TaskStatus.WaitingForReview, 2)]
|
|
[InlineData(TaskStatus.Done, 3)]
|
|
public void Maps_the_three_states_we_report(TaskStatus status, int expected)
|
|
=> Assert.Equal(expected, TicketStatusMap.ToTicketStatus(status));
|
|
|
|
[Theory]
|
|
[InlineData(TaskStatus.Idle)]
|
|
[InlineData(TaskStatus.Queued)]
|
|
[InlineData(TaskStatus.WaitingForChildren)]
|
|
[InlineData(TaskStatus.Failed)]
|
|
[InlineData(TaskStatus.Cancelled)]
|
|
public void Everything_else_writes_nothing(TaskStatus status)
|
|
=> Assert.Null(TicketStatusMap.ToTicketStatus(status));
|
|
|
|
[Fact]
|
|
public void Never_writes_Offen()
|
|
{
|
|
foreach (var status in Enum.GetValues<TaskStatus>())
|
|
Assert.NotEqual(1, TicketStatusMap.ToTicketStatus(status));
|
|
}
|
|
|
|
// Der PATCH-Body braucht statusName; ein leerer Name wäre ein 400 der API.
|
|
[Fact]
|
|
public void NameOf_is_never_empty_for_any_status_we_write()
|
|
{
|
|
foreach (var status in Enum.GetValues<TaskStatus>())
|
|
{
|
|
if (TicketStatusMap.ToTicketStatus(status) is not int id) continue;
|
|
Assert.False(string.IsNullOrWhiteSpace(TicketStatusMap.NameOf(id)));
|
|
}
|
|
|
|
Assert.False(string.IsNullOrWhiteSpace(TicketStatusMap.NameOf(99)));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(1, "Offen")]
|
|
[InlineData(2, "InBearbeitung")]
|
|
[InlineData(3, "Fertig")]
|
|
[InlineData(4, "Archiviert")]
|
|
public void NameOf_matches_the_api_status_list(int id, string expected)
|
|
=> Assert.Equal(expected, TicketStatusMap.NameOf(id));
|
|
|
|
[Theory]
|
|
[InlineData("bandel:1234", 1234)]
|
|
[InlineData("BANDEL:7", 7)]
|
|
public void Parses_a_bandel_ref(string reference, int expected)
|
|
=> Assert.Equal(expected, TicketStatusMap.ParseBandelTicketId(reference));
|
|
|
|
[Theory]
|
|
[InlineData(null)]
|
|
[InlineData("")]
|
|
[InlineData("1234")]
|
|
[InlineData("jira:ABC-1")]
|
|
[InlineData("bandel:")]
|
|
[InlineData("bandel:abc")]
|
|
public void Rejects_anything_else(string? reference)
|
|
=> Assert.Null(TicketStatusMap.ParseBandelTicketId(reference));
|
|
}
|