| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // LoopFollow
- // InfoColoringTests.swift
- @testable import LoopFollow
- import SwiftUI
- import Testing
- struct InfoColoringTests {
- @Test("disabled coloring returns nil regardless of value")
- func disabledReturnsNil() {
- let coloring = InfoColoring(enabled: false, warning: 30, urgent: 15)
- #expect(coloring.color(for: 5, direction: .below) == nil)
- }
- @Test("below: battery warn 30 / urgent 15, in-range is green")
- func belowDirection() {
- let coloring = InfoColoring(enabled: true, warning: 30, urgent: 15)
- #expect(coloring.color(for: 40, direction: .below) == .green)
- #expect(coloring.color(for: 30, direction: .below) == .yellow)
- #expect(coloring.color(for: 25, direction: .below) == .yellow)
- #expect(coloring.color(for: 15, direction: .below) == .red)
- #expect(coloring.color(for: 10, direction: .below) == .red)
- }
- @Test("above: SAGE warn 8 / urgent 9.5, in-range is green")
- func aboveDirection() {
- let coloring = InfoColoring(enabled: true, warning: 8, urgent: 9.5)
- #expect(coloring.color(for: 6, direction: .above) == .green)
- #expect(coloring.color(for: 8, direction: .above) == .yellow)
- #expect(coloring.color(for: 8.5, direction: .above) == .yellow)
- #expect(coloring.color(for: 9.5, direction: .above) == .red)
- #expect(coloring.color(for: 12, direction: .above) == .red)
- }
- @Test("nil thresholds are green when enabled")
- func nilThresholds() {
- let coloring = InfoColoring(enabled: true, warning: nil, urgent: nil)
- #expect(coloring.color(for: 999, direction: .above) == .green)
- }
- @Test("only urgent set still colors red, otherwise green")
- func onlyUrgent() {
- let coloring = InfoColoring(enabled: true, warning: nil, urgent: 15)
- #expect(coloring.color(for: 20, direction: .below) == .green)
- #expect(coloring.color(for: 15, direction: .below) == .red)
- }
- @Test("pump reservoir colors on the way down, and a capped 50+ reads green")
- func pumpReservoir() throws {
- let config = try #require(InfoType.pump.colorConfig)
- let coloring = InfoColoring(enabled: true, warning: config.defaultWarning, urgent: config.defaultUrgent)
- #expect(coloring.color(for: 50, direction: config.direction) == .green)
- #expect(coloring.color(for: 20, direction: config.direction) == .yellow)
- #expect(coloring.color(for: 10, direction: config.direction) == .red)
- }
- @Test("thresholds that need decimals get a fractional step")
- func fractionalSteps() {
- #expect(InfoType.recBolus.colorConfig?.step == 0.1)
- #expect(InfoType.iob.colorConfig?.step == 0.5)
- #expect(InfoType.sage.colorConfig?.fractionDigits == 1)
- #expect(InfoType.cob.colorConfig?.fractionDigits == 0)
- }
- @Test("non-numeric rows are not colorable")
- func notColorable() {
- #expect(InfoType.basal.isColorable == false)
- #expect(InfoType.minMax.isColorable == false)
- #expect(InfoType.pump.isColorable)
- }
- }
|