MobiusTest/Source/InitSpec.swift (23 lines of code) (raw):
// Copyright Spotify AB.
// SPDX-License-Identifier: Apache-2.0
import MobiusCore
public typealias AssertFirst<Model, Effect> = (First<Model, Effect>) -> Void
public final class InitSpec<Model, Effect> {
let initiate: Initiate<Model, Effect>
public init(_ initiate: @escaping Initiate<Model, Effect>) {
self.initiate = initiate
}
public func when(_ model: Model) -> Then {
return Then(model, initiate: initiate)
}
public struct Then {
let model: Model
let initiate: Initiate<Model, Effect>
init(_ model: Model, initiate: @escaping Initiate<Model, Effect>) {
self.model = model
self.initiate = initiate
}
public func then(_ assertion: AssertFirst<Model, Effect>) {
let first = initiate(model)
assertion(first)
}
}
}