feat: More tests

This commit is contained in:
2024-07-08 11:57:12 -04:00
parent 2786fd2c79
commit 03d6a2d7f0
5 changed files with 225 additions and 5 deletions

View File

@@ -0,0 +1,138 @@
import ComposableArchitecture
@testable import PressureEstimationsFeature
import SharedModels
import Testing
import XCTest
struct EquipmentMeasurementFormStateTests {
@Test(
"Validatons",
.tags(.equipmentMeasurementForm)
)
func validations() async throws {
var state = EquipmentMeasurementForm.State(
sharedSettings: Shared(SharedPressureEstimationState())
)
#expect(state.isValid == false)
state.measurements.airflow = 1200
state.measurements.returnPlenumPressure = 0.2
state.measurements.supplyPlenumPressure = 0.3
#expect(state.isValid == true)
state.equipmentType = .furnaceAndCoil
#expect(state.isValid == false)
state.measurements.postFilterPressure = 0.5
state.measurements.coilPressure = 0.3
#expect(state.isValid == true)
}
@Test(
"Measurement initialization with EquipmentMeasurement",
.tags(.equipmentMeasurementForm),
arguments: [
EquipmentMeasurement.mock(type: .airHandler),
EquipmentMeasurement.mock(type: .furnaceAndCoil),
]
)
func measurementConversions(equipmentMeasurement: EquipmentMeasurement) {
let measurement = EquipmentMeasurementForm.State.Measurements(
equipmentMeasurement: equipmentMeasurement
)
#expect(measurement.equipmentMeasurement(type: equipmentMeasurement.equipmentType) == equipmentMeasurement)
}
@Test(
"Measurement to EquipmentMeasurement",
.tags(.equipmentMeasurementForm)
)
func measurementToEquipmentMeasurement() {
let measurement = EquipmentMeasurementForm.State.Measurements()
var equipmentMeasurement = EquipmentMeasurement.airHandler(
EquipmentMeasurement.AirHandler(
airflow: 0,
manufacturersIncludedFilterPressureDrop: 0.1,
returnPlenumPressure: 0,
postFilterPressure: 0,
postCoilPressure: 0,
supplyPlenumPressure: 0
)
)
#expect(measurement.equipmentMeasurement(type: .airHandler) == equipmentMeasurement)
equipmentMeasurement = .furnaceAndCoil(
EquipmentMeasurement.FurnaceAndCoil(
airflow: 0.0,
manufacturersIncludedFilterPressureDrop: 0,
returnPlenumPressure: 0,
postFilterPressure: 0,
preCoilPressure: 0,
supplyPlenumPressure: 0
)
)
#expect(measurement.equipmentMeasurement(type: .furnaceAndCoil) == equipmentMeasurement)
}
// @Test()
// func promptAndLabel() {
// let store = Store(
// initialState: EquipmentMeasurementForm.State(
// sharedSettings: Shared(SharedPressureEstimationState())
// ),
// reducer: EquipmentMeasurementForm.init
// )
//
// }
}
final class EquipmentMeasurementFormReducerTests: XCTestCase {
@MainActor
func testReducer() async throws {
let store = TestStore(
initialState: EquipmentMeasurementForm.State(
sharedSettings: Shared(SharedPressureEstimationState(
equipmentMeasurement: .mock(type: .airHandler)
))
),
reducer: EquipmentMeasurementForm.init
)
await store.send(.view(.onAppear)) {
$0.measurements = .init(equipmentMeasurement: .mock(type: .airHandler))
}
await store.send(.binding(.set(\.focusedField, .airflow))) {
$0.focusedField = .airflow
}
await store.send(.view(.nextButtonTapped)) {
$0.destination = .flaggedMeasurementsList(.init(
sharedSettings: Shared(SharedPressureEstimationState(
equipmentMeasurement: .mock(type: .airHandler)
))
))
}
await store.send(.destination(.dismiss)) {
$0.destination = nil
}
await store.send(.view(.resetButtonTapped)) {
$0.measurements = .init()
}
store.exhaustivity = .off
await store.send(.view(.infoButtonTapped))
await store.finish()
}
}
extension Tag {
@Tag static var equipmentMeasurementForm: Self
}

View File

@@ -27,11 +27,86 @@ struct EquipmentSettingsFormStateTests {
#expect(sharedSettings.equipmentMetadata.ratedStaticPressures.rated == 0)
}
}
struct ValidationContainer {
let state: EquipmentSettingsForm.State
let expectsValid: Bool
}
@Test(
"Validations",
.tags(.equipmentSettingsForm),
arguments: [
ValidationContainer(
state: .init(sharedSettings: Shared(SharedPressureEstimationState())),
expectsValid: true
),
ValidationContainer(
state: .init(
equipmentType: .furnaceAndCoil,
sharedSettings: Shared(SharedPressureEstimationState())
),
expectsValid: false
)
]
)
func validation(container: ValidationContainer) {
#expect(container.state.isValid == container.expectsValid)
}
}
final class EquipmentSettingsFormTests: XCTestCase {
@MainActor
func testStaticPressureBindings() async throws {
let store = TestStore(
initialState: EquipmentSettingsForm.State(sharedSettings: Shared(SharedPressureEstimationState()))
) {
EquipmentSettingsForm()
}
await store.send(.binding(.set(\.maxStaticPressure, nil))) {
$0.maxStaticPressure = nil
$0.sharedSettings.ratedStaticPressures.maximum = 0
}
await store.send(.binding(.set(\.minStaticPressure, nil))) {
$0.minStaticPressure = nil
$0.sharedSettings.ratedStaticPressures.minimum = 0
}
await store.send(.binding(.set(\.ratedStaticPressure, nil))) {
$0.ratedStaticPressure = nil
$0.sharedSettings.ratedStaticPressures.rated = 0
}
}
@MainActor
func testViewActions() async throws {
let store = TestStore(
initialState: EquipmentSettingsForm.State(
equipmentType: .furnaceAndCoil,
sharedSettings: Shared(SharedPressureEstimationState(heatingCapacity: 20_000))
)
) {
EquipmentSettingsForm()
}
await store.send(.view(.resetButtonTapped)) {
$0.sharedSettings.heatingCapacity = nil
}
await store.send(.view(.submitField))
for infoView in EquipmentSettingsForm.InfoView.allCases {
await store.send(.view(.infoButtonTapped(infoView))) {
$0.destination = .infoView(.init(view: infoView))
}
await store.send(.destination(.dismiss)) {
$0.destination = nil
}
}
}
}
extension Tag {