summaryrefslogtreecommitdiff
path: root/HutchTests
diff options
context:
space:
mode:
Diffstat (limited to 'HutchTests')
-rw-r--r--HutchTests/TicketDetailViewModelTests.swift69
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)
+ }
}