From 576bb6c2432a15f5138771c06019b55fd2244e15 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 12 Apr 2026 22:42:33 -0500 Subject: feat: add ticket label management and bulk actions Implements: https://todo.sr.ht/~ccleberg/hutch/45 Implements: https://todo.sr.ht/~ccleberg/hutch/46 --- HutchTests/TicketListViewModelTests.swift | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'HutchTests/TicketListViewModelTests.swift') diff --git a/HutchTests/TicketListViewModelTests.swift b/HutchTests/TicketListViewModelTests.swift index 0f42bf8..a237071 100644 --- a/HutchTests/TicketListViewModelTests.swift +++ b/HutchTests/TicketListViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct TicketListViewModelTests { @Test @@ -81,6 +82,43 @@ struct TicketListViewModelTests { #expect(filtered.map(\.id) == [2]) } + @Test + func synchronizeTicketsReplacesEditedLabelsAndRemovesDeletedOnes() { + let existing = [ + makeTicket( + id: 7, + title: "Triage me", + status: .reported, + submitter: "~owner", + labels: [ + makeLabel(id: 1, name: "bug"), + makeLabel(id: 2, name: "stale") + ] + ) + ] + + let updated = TicketListViewModel.synchronizeTickets( + existing, + with: [makeLabel(id: 1, name: "bugfix")] + ) + + #expect(updated.first?.labels.map(\.id) == [1]) + #expect(updated.first?.labels.first?.name == "bugfix") + } + + @Test + func reconciledSelectedLabelIDsRemovesUnknownIDs() { + let reconciled = TicketListViewModel.reconciledSelectedLabelIDs( + [1, 2, 5], + availableLabels: [ + makeLabel(id: 2, name: "triage"), + makeLabel(id: 3, name: "qa") + ] + ) + + #expect(reconciled == [2]) + } + @Test @MainActor func resolveTicketInputHasCorrectStatusAndDefaultResolution() { -- cgit v1.2.3