Skip to content

Commit

Permalink
Add tests for execution count
Browse files Browse the repository at this point in the history
  • Loading branch information
ishkawa committed Nov 28, 2016
1 parent 12f07f2 commit 25af59b
Showing 1 changed file with 70 additions and 36 deletions.
106 changes: 70 additions & 36 deletions Tests/ActionTests/ActionTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@ class ActionTests: QuickSpec {
var errors: TestableObserver<ActionError>!
var enabled: TestableObserver<Bool>!
var executing: TestableObserver<Bool>!
var executionObservables: TestableObserver<Observable<String>>!

beforeEach {
inputs = scheduler.createObserver(String.self)
elements = scheduler.createObserver(String.self)
errors = scheduler.createObserver(ActionError.self)
enabled = scheduler.createObserver(Bool.self)
executing = scheduler.createObserver(Bool.self)
executionObservables = scheduler.createObserver(Observable<String>.self)
}

func bindAction(action: Action<String, String>) {
Expand All @@ -50,6 +52,18 @@ class ActionTests: QuickSpec {
action.executing
.bindTo(executing)
.addDisposableTo(disposeBag)

action.executionObservables
.bindTo(executionObservables)
.addDisposableTo(disposeBag)

// Dummy subscription for multiple subcription tests
action.inputs.subscribe().addDisposableTo(disposeBag)
action.elements.subscribe().addDisposableTo(disposeBag)
action.errors.subscribe().addDisposableTo(disposeBag)
action.enabled.subscribe().addDisposableTo(disposeBag)
action.executing.subscribe().addDisposableTo(disposeBag)
action.executionObservables.subscribe().addDisposableTo(disposeBag)
}

describe("single element action") {
Expand Down Expand Up @@ -91,6 +105,10 @@ class ActionTests: QuickSpec {
next(20, false),
])
}

it("executes twice") {
XCTAssertEqual(executionObservables.events.count, 2)
}
}

var action: Action<String, String>!
Expand Down Expand Up @@ -164,6 +182,10 @@ class ActionTests: QuickSpec {
next(20, false),
])
}

it("executes twice") {
XCTAssertEqual(executionObservables.events.count, 2)
}
}

var action: Action<String, String>!
Expand Down Expand Up @@ -242,6 +264,10 @@ class ActionTests: QuickSpec {
next(20, false),
])
}

it("executes twice") {
XCTAssertEqual(executionObservables.events.count, 2)
}
}

var action: Action<String, String>!
Expand Down Expand Up @@ -303,6 +329,10 @@ class ActionTests: QuickSpec {
next(0, false),
])
}

it("never executes") {
XCTAssertEqual(executionObservables.events.count, 0)
}
}

var action: Action<String, String>!
Expand Down Expand Up @@ -337,19 +367,31 @@ class ActionTests: QuickSpec {
describe("execute function return value") {
var action: Action<String, String>!
var element: TestableObserver<String>!
var executionObservables: TestableObserver<Observable<String>>!

beforeEach {
element = scheduler.createObserver(String.self)
executionObservables = scheduler.createObserver(Observable<String>.self)
}

func bindAndExecute(action: Action<String, String>) {
action.executionObservables
.bindTo(executionObservables)
.addDisposableTo(disposeBag)

scheduler.scheduleAt(10) {
action.execute("a")
.bindTo(element)
.addDisposableTo(disposeBag)
}

scheduler.start()
}

context("single element action") {
beforeEach {
action = Action { Observable.just($0) }
element = scheduler.createObserver(String.self)

scheduler.scheduleAt(10) {
action.execute("a")
.bindTo(element)
.addDisposableTo(disposeBag)
}

scheduler.start()
bindAndExecute(action: action)
}

it("element receives single value") {
Expand All @@ -358,20 +400,16 @@ class ActionTests: QuickSpec {
completed(10),
])
}

it("executes once") {
XCTAssertEqual(executionObservables.events.count, 1)
}
}

context("multiple element action") {
beforeEach {
action = Action { Observable.of($0, $0, $0) }
element = scheduler.createObserver(String.self)

scheduler.scheduleAt(10) {
action.execute("a")
.bindTo(element)
.addDisposableTo(disposeBag)
}

scheduler.start()
bindAndExecute(action: action)
}

it("element receives mutiple values") {
Expand All @@ -382,48 +420,44 @@ class ActionTests: QuickSpec {
completed(10),
])
}

it("executes once") {
XCTAssertEqual(executionObservables.events.count, 1)
}
}

context("error action") {
beforeEach {
action = Action { _ in Observable.error(TestError) }
element = scheduler.createObserver(String.self)

scheduler.scheduleAt(10) {
action.execute("a")
.bindTo(element)
.addDisposableTo(disposeBag)
}

scheduler.start()
bindAndExecute(action: action)
}

it("element fails with underlyingError") {
XCTAssertEqual(element.events, [
error(10, ActionError.underlyingError(TestError))
])
}

it("executes once") {
XCTAssertEqual(executionObservables.events.count, 1)
}
}

context("disabled") {
beforeEach {
action = Action(enabledIf: Observable.just(false)) { Observable.just($0) }
element = scheduler.createObserver(String.self)

scheduler.scheduleAt(10) {
action.execute("a")
.bindTo(element)
.addDisposableTo(disposeBag)
}

scheduler.start()
bindAndExecute(action: action)
}

it("element fails with notEnabled") {
XCTAssertEqual(element.events, [
error(10, ActionError.notEnabled)
])
}

it("never executes") {
XCTAssertEqual(executionObservables.events.count, 0)
}
}
}

Expand Down

0 comments on commit 25af59b

Please sign in to comment.