| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import SwiftUICore
- import Testing
- @testable import Trio_Watch_App
- import XCTest
- @Suite("Watch App Tests") final class TrioWatchAppTests {
- var watchState = WatchState()
- // MARK: - Color Conversion Tests
- @Test("Hex string to color conversion") func testHexStringToColor() throws {
- // Given
- let whiteHex = "#FFFFFF"
- let blackHex = "#000000"
- let redHex = "#FF0000"
- let invalidHex = "invalid"
- // Then
- #expect(whiteHex.toColor() == Color.white)
- #expect(blackHex.toColor() == Color.black)
- #expect(redHex.toColor() == Color(red: 1, green: 0, blue: 0))
- #expect(invalidHex.toColor() == Color.black)
- }
- // MARK: - WatchState Tests
- @Test("WatchState initialization with default values") func testWatchStateInitialization() throws {
- #expect(watchState.currentGlucose == "--")
- #expect(watchState.currentGlucoseColorString == "#ffffff")
- #expect(watchState.glucoseValues.isEmpty)
- #expect(watchState.iob == "--")
- #expect(watchState.cob == "--")
- #expect(watchState.lastLoopTime == "--")
- }
- @Test("Bolus limits have correct default values") func testBolusLimits() throws {
- #expect(watchState.maxBolus == Decimal(10))
- #expect(watchState.bolusIncrement == Decimal(0.05))
- }
- @Test("Carb limits have correct default values") func testCarbLimits() throws {
- #expect(watchState.maxCarbs == Decimal(250))
- #expect(watchState.maxCOB == Decimal(120))
- }
- @Test("Bolus cancellation resets all related values") func testBolusCancellation() throws {
- // Given
- watchState.bolusProgress = 0.5
- watchState.activeBolusAmount = 5.0
- watchState.isBolusCanceled = false
- // When
- watchState.sendCancelBolusRequest()
- // Then
- #expect(watchState.isBolusCanceled)
- #expect(watchState.bolusProgress == 0)
- #expect(watchState.activeBolusAmount == 0)
- }
- @Test("Meal bolus combo state transitions work correctly") func testMealBolusComboState() throws {
- // Given - Initial state
- #expect(!watchState.isMealBolusCombo)
- #expect(watchState.mealBolusStep == .savingCarbs)
- // When - Setup meal bolus combo
- watchState.carbsAmount = 30
- watchState.bolusAmount = 3.0
- // Then - Test state transitions
- watchState.handleAcknowledgment(success: true, message: "Saving carbs...", isFinal: false)
- #expect(watchState.isMealBolusCombo)
- #expect(watchState.mealBolusStep == .savingCarbs)
- watchState.handleAcknowledgment(success: true, message: "Enacting bolus...", isFinal: false)
- #expect(watchState.isMealBolusCombo)
- #expect(watchState.mealBolusStep == .enactingBolus)
- watchState.handleAcknowledgment(success: true, message: "Carbs and bolus logged successfully", isFinal: true)
- #expect(!watchState.isMealBolusCombo)
- }
- @Test("Acknowledgment states transition correctly") func testAcknowledgmentStates() throws {
- // Given - Initial state
- #expect(watchState.acknowledgementStatus == .pending)
- #expect(!watchState.showAcknowledgmentBanner)
- // When/Then - Success acknowledgment
- watchState.handleAcknowledgment(success: true, message: "Success")
- #expect(watchState.acknowledgementStatus == .success)
- #expect(watchState.showAcknowledgmentBanner)
- #expect(watchState.acknowledgmentMessage == "Success")
- // When/Then - Failure acknowledgment
- watchState.handleAcknowledgment(success: false, message: "Error")
- #expect(watchState.acknowledgementStatus == .failure)
- #expect(watchState.showAcknowledgmentBanner)
- #expect(watchState.acknowledgmentMessage == "Error")
- }
- }
|