diff options
Diffstat (limited to 'HutchTests/TicketDetailViewModelTests.swift')
| -rw-r--r-- | HutchTests/TicketDetailViewModelTests.swift | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/HutchTests/TicketDetailViewModelTests.swift b/HutchTests/TicketDetailViewModelTests.swift index bf0bc60..ba4a476 100644 --- a/HutchTests/TicketDetailViewModelTests.swift +++ b/HutchTests/TicketDetailViewModelTests.swift @@ -27,4 +27,73 @@ struct TicketDetailViewModelTests { #expect(input["status"] as? String == TicketStatus.resolved.rawValue) #expect(input["resolution"] as? String == TicketResolution.fixed.rawValue) } + + @Test + @MainActor + func ticketUpdateInputOmitsUnchangedFields() { + let input = TicketDetailViewModel.ticketUpdateInput( + subject: "Same subject", + body: "Same body", + currentSubject: "Same subject", + currentBody: "Same body" + ) + + #expect(input.isEmpty) + } + + @Test + @MainActor + func ticketUpdateInputCarriesOnlyTheChangedField() { + let input = TicketDetailViewModel.ticketUpdateInput( + subject: "New subject", + body: "Same body", + currentSubject: "Old subject", + currentBody: "Same body" + ) + + #expect(input["subject"] as? String == "New subject") + #expect(!input.keys.contains("body")) + } + + @Test + @MainActor + func ticketUpdateInputTrimsWhitespaceBeforeComparing() { + let input = TicketDetailViewModel.ticketUpdateInput( + subject: " Same subject ", + body: "\n Same body \n", + currentSubject: "Same subject", + currentBody: "Same body" + ) + + #expect(input.isEmpty) + } + + @Test + @MainActor + func ticketUpdateInputUsesNilToClearBody() { + let input = TicketDetailViewModel.ticketUpdateInput( + subject: "Same subject", + body: " ", + currentSubject: "Same subject", + currentBody: "Existing body" + ) + + // The key must survive with a nil value so it encodes as a JSON null and + // actually clears the body, rather than being dropped from the mutation. + #expect(input.keys.contains("body")) + #expect(input["body"] as? String == nil) + } + + @Test + @MainActor + func ticketUpdateInputTreatsNilBodyAsEmpty() { + let input = TicketDetailViewModel.ticketUpdateInput( + subject: "Same subject", + body: "", + currentSubject: "Same subject", + currentBody: nil + ) + + #expect(input.isEmpty) + } } |
