Commit 24d9882997

24d9882997bb69cc74a719f3e721c479595d2637

parent: bdc1800126

Unsigned

cmc <hello@cleberg.net> · 2026-03-19 01:07 UTC

Omit resolution when reopening resolved tickets

Layout: unified · split

Hutch/Views/Tickets/TicketDetailView.swift +1 −4
@@ -71,10 +71,7 @@ struct TicketDetailView: View {
7171 if ticket.status == .resolved {
7272 Button {
7373 Task {
74 await viewModel.updateStatus(
75 status: .reported,
76 resolution: .unresolved
77 )
74 await viewModel.updateStatus(status: .reported)
7875 }
7976 } label: {
8077 SwiftUI.Label("Reopen", systemImage: "arrow.uturn.backward")
Hutch/Views/Tickets/TicketDetailViewModel.swift +15 −5
@@ -130,6 +130,19 @@ final class TicketDetailViewModel {
130130 return lhs.created < rhs.created
131131 }
132132
133 static func statusUpdateInput(
134 status: TicketStatus,
135 resolution: TicketResolution?
136 ) -> [String: any Sendable] {
137 var input: [String: any Sendable] = [
138 "status": status.rawValue
139 ]
140 if status == .resolved, let resolution {
141 input["resolution"] = resolution.rawValue
142 }
143 return input
144 }
145
133146 init(ownerUsername: String, trackerName: String, trackerId: Int, trackerRid: String, ticketId: Int, client: SRHTClient) {
134147 self.ownerUsername = ownerUsername
135148 self.trackerName = trackerName
@@ -360,16 +373,13 @@ final class TicketDetailViewModel {
360373
361374 // MARK: - Ticket Actions
362375
363 func updateStatus(status: TicketStatus, resolution: TicketResolution) async {
376 func updateStatus(status: TicketStatus, resolution: TicketResolution? = nil) async {
364377 guard !isPerformingAction else { return }
365378 isPerformingAction = true
366379 error = nil
367380
368381 do {
369 let input: [String: any Sendable] = [
370 "status": status.rawValue,
371 "resolution": resolution.rawValue
372 ]
382 let input = Self.statusUpdateInput(status: status, resolution: resolution)
373383 _ = try await client.execute(
374384 service: .todo,
375385 query: Self.updateStatusMutation,
HutchTests/TicketDetailViewModelTests.swift added +30
@@ -0,0 +1,30 @@
1import Foundation
2import Testing
3@testable import Hutch
4
5struct TicketDetailViewModelTests {
6
7 @Test
8 @MainActor
9 func reopenStatusInputOmitsResolution() {
10 let input = TicketDetailViewModel.statusUpdateInput(
11 status: .reported,
12 resolution: .unresolved
13 )
14
15 #expect(input["status"] as? String == TicketStatus.reported.rawValue)
16 #expect(input["resolution"] == nil)
17 }
18
19 @Test
20 @MainActor
21 func resolveStatusInputIncludesResolution() {
22 let input = TicketDetailViewModel.statusUpdateInput(
23 status: .resolved,
24 resolution: .fixed
25 )
26
27 #expect(input["status"] as? String == TicketStatus.resolved.rawValue)
28 #expect(input["resolution"] as? String == TicketResolution.fixed.rawValue)
29 }
30}