AlertMuterTests.swift 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import Foundation
  2. import Testing
  3. @testable import Trio
  4. @Suite("Trio Alerts: AlertMuter") struct AlertMuterTests {
  5. @Test("Default state is unmuted") func defaultUnmuted() {
  6. let muter = AlertMuter()
  7. #expect(!muter.shouldMute(at: Date()))
  8. #expect(muter.endsAt == nil)
  9. }
  10. @Test("mute(for:) covers the start through end-exclusive boundary") func muteWindowMath() {
  11. let muter = AlertMuter()
  12. let start = Date(timeIntervalSince1970: 1_700_000_000)
  13. muter.mute(for: 600, from: start)
  14. #expect(muter.shouldMute(at: start)) // inclusive start
  15. #expect(muter.shouldMute(at: start.addingTimeInterval(1)))
  16. #expect(muter.shouldMute(at: start.addingTimeInterval(599)))
  17. #expect(!muter.shouldMute(at: start.addingTimeInterval(600))) // exclusive end
  18. #expect(!muter.shouldMute(at: start.addingTimeInterval(601)))
  19. #expect(!muter.shouldMute(at: start.addingTimeInterval(-1)))
  20. #expect(muter.endsAt == start.addingTimeInterval(600))
  21. }
  22. @Test("unmute() clears the window") func unmuteClears() {
  23. let muter = AlertMuter()
  24. let start = Date()
  25. muter.mute(for: 3600, from: start)
  26. #expect(muter.shouldMute(at: start.addingTimeInterval(60)))
  27. muter.unmute()
  28. #expect(!muter.shouldMute(at: start.addingTimeInterval(60)))
  29. #expect(muter.endsAt == nil)
  30. }
  31. @Test("mute(for: 0) creates a zero-length window — never mutes") func zeroDurationNoOp() {
  32. let muter = AlertMuter()
  33. let start = Date()
  34. muter.mute(for: 0, from: start)
  35. #expect(!muter.shouldMute(at: start))
  36. #expect(!muter.shouldMute(at: start.addingTimeInterval(1)))
  37. }
  38. @Test("Re-muting replaces the previous window rather than stacking") func reMuteReplaces() {
  39. let muter = AlertMuter()
  40. let first = Date(timeIntervalSince1970: 1_700_000_000)
  41. muter.mute(for: 600, from: first)
  42. let second = first.addingTimeInterval(120)
  43. muter.mute(for: 60, from: second)
  44. // Second window ends at first+180, not first+600.
  45. #expect(muter.shouldMute(at: second.addingTimeInterval(30)))
  46. #expect(!muter.shouldMute(at: second.addingTimeInterval(60)))
  47. #expect(!muter.shouldMute(at: first.addingTimeInterval(300)))
  48. #expect(muter.endsAt == second.addingTimeInterval(60))
  49. }
  50. }