Skip to content

Commit 25af59b

Browse files
committed
Add tests for execution count
1 parent 12f07f2 commit 25af59b

File tree

1 file changed

+70
-36
lines changed

1 file changed

+70
-36
lines changed

Tests/ActionTests/ActionTests.swift

Lines changed: 70 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ class ActionTests: QuickSpec {
2121
var errors: TestableObserver<ActionError>!
2222
var enabled: TestableObserver<Bool>!
2323
var executing: TestableObserver<Bool>!
24+
var executionObservables: TestableObserver<Observable<String>>!
2425

2526
beforeEach {
2627
inputs = scheduler.createObserver(String.self)
2728
elements = scheduler.createObserver(String.self)
2829
errors = scheduler.createObserver(ActionError.self)
2930
enabled = scheduler.createObserver(Bool.self)
3031
executing = scheduler.createObserver(Bool.self)
32+
executionObservables = scheduler.createObserver(Observable<String>.self)
3133
}
3234

3335
func bindAction(action: Action<String, String>) {
@@ -50,6 +52,18 @@ class ActionTests: QuickSpec {
5052
action.executing
5153
.bindTo(executing)
5254
.addDisposableTo(disposeBag)
55+
56+
action.executionObservables
57+
.bindTo(executionObservables)
58+
.addDisposableTo(disposeBag)
59+
60+
// Dummy subscription for multiple subcription tests
61+
action.inputs.subscribe().addDisposableTo(disposeBag)
62+
action.elements.subscribe().addDisposableTo(disposeBag)
63+
action.errors.subscribe().addDisposableTo(disposeBag)
64+
action.enabled.subscribe().addDisposableTo(disposeBag)
65+
action.executing.subscribe().addDisposableTo(disposeBag)
66+
action.executionObservables.subscribe().addDisposableTo(disposeBag)
5367
}
5468

5569
describe("single element action") {
@@ -91,6 +105,10 @@ class ActionTests: QuickSpec {
91105
next(20, false),
92106
])
93107
}
108+
109+
it("executes twice") {
110+
XCTAssertEqual(executionObservables.events.count, 2)
111+
}
94112
}
95113

96114
var action: Action<String, String>!
@@ -164,6 +182,10 @@ class ActionTests: QuickSpec {
164182
next(20, false),
165183
])
166184
}
185+
186+
it("executes twice") {
187+
XCTAssertEqual(executionObservables.events.count, 2)
188+
}
167189
}
168190

169191
var action: Action<String, String>!
@@ -242,6 +264,10 @@ class ActionTests: QuickSpec {
242264
next(20, false),
243265
])
244266
}
267+
268+
it("executes twice") {
269+
XCTAssertEqual(executionObservables.events.count, 2)
270+
}
245271
}
246272

247273
var action: Action<String, String>!
@@ -303,6 +329,10 @@ class ActionTests: QuickSpec {
303329
next(0, false),
304330
])
305331
}
332+
333+
it("never executes") {
334+
XCTAssertEqual(executionObservables.events.count, 0)
335+
}
306336
}
307337

308338
var action: Action<String, String>!
@@ -337,19 +367,31 @@ class ActionTests: QuickSpec {
337367
describe("execute function return value") {
338368
var action: Action<String, String>!
339369
var element: TestableObserver<String>!
370+
var executionObservables: TestableObserver<Observable<String>>!
371+
372+
beforeEach {
373+
element = scheduler.createObserver(String.self)
374+
executionObservables = scheduler.createObserver(Observable<String>.self)
375+
}
376+
377+
func bindAndExecute(action: Action<String, String>) {
378+
action.executionObservables
379+
.bindTo(executionObservables)
380+
.addDisposableTo(disposeBag)
381+
382+
scheduler.scheduleAt(10) {
383+
action.execute("a")
384+
.bindTo(element)
385+
.addDisposableTo(disposeBag)
386+
}
387+
388+
scheduler.start()
389+
}
340390

341391
context("single element action") {
342392
beforeEach {
343393
action = Action { Observable.just($0) }
344-
element = scheduler.createObserver(String.self)
345-
346-
scheduler.scheduleAt(10) {
347-
action.execute("a")
348-
.bindTo(element)
349-
.addDisposableTo(disposeBag)
350-
}
351-
352-
scheduler.start()
394+
bindAndExecute(action: action)
353395
}
354396

355397
it("element receives single value") {
@@ -358,20 +400,16 @@ class ActionTests: QuickSpec {
358400
completed(10),
359401
])
360402
}
403+
404+
it("executes once") {
405+
XCTAssertEqual(executionObservables.events.count, 1)
406+
}
361407
}
362408

363409
context("multiple element action") {
364410
beforeEach {
365411
action = Action { Observable.of($0, $0, $0) }
366-
element = scheduler.createObserver(String.self)
367-
368-
scheduler.scheduleAt(10) {
369-
action.execute("a")
370-
.bindTo(element)
371-
.addDisposableTo(disposeBag)
372-
}
373-
374-
scheduler.start()
412+
bindAndExecute(action: action)
375413
}
376414

377415
it("element receives mutiple values") {
@@ -382,48 +420,44 @@ class ActionTests: QuickSpec {
382420
completed(10),
383421
])
384422
}
423+
424+
it("executes once") {
425+
XCTAssertEqual(executionObservables.events.count, 1)
426+
}
385427
}
386428

387429
context("error action") {
388430
beforeEach {
389431
action = Action { _ in Observable.error(TestError) }
390-
element = scheduler.createObserver(String.self)
391-
392-
scheduler.scheduleAt(10) {
393-
action.execute("a")
394-
.bindTo(element)
395-
.addDisposableTo(disposeBag)
396-
}
397-
398-
scheduler.start()
432+
bindAndExecute(action: action)
399433
}
400434

401435
it("element fails with underlyingError") {
402436
XCTAssertEqual(element.events, [
403437
error(10, ActionError.underlyingError(TestError))
404438
])
405439
}
440+
441+
it("executes once") {
442+
XCTAssertEqual(executionObservables.events.count, 1)
443+
}
406444
}
407445

408446
context("disabled") {
409447
beforeEach {
410448
action = Action(enabledIf: Observable.just(false)) { Observable.just($0) }
411-
element = scheduler.createObserver(String.self)
412-
413-
scheduler.scheduleAt(10) {
414-
action.execute("a")
415-
.bindTo(element)
416-
.addDisposableTo(disposeBag)
417-
}
418-
419-
scheduler.start()
449+
bindAndExecute(action: action)
420450
}
421451

422452
it("element fails with notEnabled") {
423453
XCTAssertEqual(element.events, [
424454
error(10, ActionError.notEnabled)
425455
])
426456
}
457+
458+
it("never executes") {
459+
XCTAssertEqual(executionObservables.events.count, 0)
460+
}
427461
}
428462
}
429463

0 commit comments

Comments
 (0)