diff options
| author | Christian Cleberg <[email protected]> | 2026-04-12 22:42:33 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-12 22:42:33 -0500 |
| commit | 576bb6c2432a15f5138771c06019b55fd2244e15 (patch) | |
| tree | 167b4704658c11ea6b9e7170390098e13c89b94b /HutchTests/TicketListViewModelTests.swift | |
| parent | 54d037548261c1546555a89a6a803b542a769880 (diff) | |
| download | hutch-576bb6c2432a15f5138771c06019b55fd2244e15.tar.gz hutch-576bb6c2432a15f5138771c06019b55fd2244e15.tar.bz2 hutch-576bb6c2432a15f5138771c06019b55fd2244e15.zip | |
feat: add ticket label management and bulk actions
Implements: https://todo.sr.ht/~ccleberg/hutch/45
Implements: https://todo.sr.ht/~ccleberg/hutch/46
Diffstat (limited to 'HutchTests/TicketListViewModelTests.swift')
| -rw-r--r-- | HutchTests/TicketListViewModelTests.swift | 38 |
1 files changed, 38 insertions, 0 deletions
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 @@ -82,6 +83,43 @@ struct TicketListViewModelTests { } @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() { let input: [String: any Sendable] = [ |
