func test_nestedStepsDoNotRepeat()

in RIBsTests/Workflow/WorkflowTests.swift [23:78]


    func test_nestedStepsDoNotRepeat() {
        var outerStep1RunCount = 0
        var outerStep2RunCount = 0
        var outerStep3RunCount = 0

        var innerStep1RunCount = 0
        var innerStep2RunCount = 0
        var innerStep3RunCount = 0

        let emptyObservable = Observable.just(((), ()))

        let workflow = Workflow<String>()
        _ = workflow
            .onStep { (mock) -> Observable<((), ())> in
                outerStep1RunCount += 1

                return emptyObservable
            }
            .onStep { (_, _) -> Observable<((), ())> in
                outerStep2RunCount += 1

                return emptyObservable
            }
            .onStep { (_, _) -> Observable<((), ())> in
                outerStep3RunCount += 1

                let innerStep: Step<String, (), ()>? = emptyObservable.fork(workflow)

                innerStep?
                    .onStep({ (_, _) -> Observable<((), ())> in
                        innerStep1RunCount += 1
                        return emptyObservable
                    })
                    .onStep({ (_, _) -> Observable<((), ())> in
                        innerStep2RunCount += 1
                        return emptyObservable
                    })
                    .onStep({ (_, _) -> Observable<((), ())> in
                        innerStep3RunCount += 1
                        return emptyObservable
                    })
                    .commit()

                return emptyObservable
            }
            .commit()
            .subscribe("Test Actionable Item")

        XCTAssertEqual(outerStep1RunCount, 1, "Outer step 1 should not have been run more than once")
        XCTAssertEqual(outerStep2RunCount, 1, "Outer step 2 should not have been run more than once")
        XCTAssertEqual(outerStep3RunCount, 1, "Outer step 3 should not have been run more than once")

        XCTAssertEqual(innerStep1RunCount, 1, "Inner step 1 should not have been run more than once")
        XCTAssertEqual(innerStep2RunCount, 1, "Inner step 2 should not have been run more than once")
        XCTAssertEqual(innerStep3RunCount, 1, "Inner step 3 should not have been run more than once")
    }