mirror of
https://github.com/pointfreeco/swift-composable-architecture.git
synced 2025-12-24 12:14:25 +01:00
* Failing test * Drive Test Store using Store * Update TestStore.swift * format * Track state after send * Use proper snapshot * Fix? * fix
65 lines
1.4 KiB
Swift
65 lines
1.4 KiB
Swift
import Combine
|
|
import ComposableArchitecture
|
|
import XCTest
|
|
|
|
class TestStoreTests: XCTestCase {
|
|
func testEffectConcatenation() {
|
|
struct State: Equatable {}
|
|
|
|
enum Action: Equatable {
|
|
case a, b1, b2, b3, c1, c2, c3, d
|
|
}
|
|
|
|
let testScheduler = DispatchQueue.testScheduler
|
|
|
|
let reducer = Reducer<State, Action, AnySchedulerOf<DispatchQueue>> { _, action, scheduler in
|
|
switch action {
|
|
case .a:
|
|
return .merge(
|
|
Effect.concatenate(.init(value: .b1), .init(value: .c1))
|
|
.delay(for: 1, scheduler: scheduler)
|
|
.eraseToEffect(),
|
|
Empty(completeImmediately: false)
|
|
.eraseToEffect()
|
|
.cancellable(id: 1)
|
|
)
|
|
case .b1:
|
|
return
|
|
Effect
|
|
.concatenate(.init(value: .b2), .init(value: .b3))
|
|
case .c1:
|
|
return
|
|
Effect
|
|
.concatenate(.init(value: .c2), .init(value: .c3))
|
|
case .b2, .b3, .c2, .c3:
|
|
return .none
|
|
|
|
case .d:
|
|
return .cancel(id: 1)
|
|
}
|
|
}
|
|
|
|
let store = TestStore(
|
|
initialState: State(),
|
|
reducer: reducer,
|
|
environment: testScheduler.eraseToAnyScheduler()
|
|
)
|
|
|
|
store.assert(
|
|
.send(.a),
|
|
|
|
.do { testScheduler.advance(by: 1) },
|
|
|
|
.receive(.b1),
|
|
.receive(.b2),
|
|
.receive(.b3),
|
|
|
|
.receive(.c1),
|
|
.receive(.c2),
|
|
.receive(.c3),
|
|
|
|
.send(.d)
|
|
)
|
|
}
|
|
}
|