Files
ClaudeDo/tests/ClaudeDo.Worker.Tests/Tickets/TicketStatusMapTests.cs
T
mika kuns 30d0611b8e fix(worker): fix Bandel ticket sync and reactivate the integration
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.
2026-09-02 09:59:06 +02:00

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));
}