Last active
September 16, 2017 13:55
-
-
Save ruigoncalo/64f2de5fde7a977d90826ffa2b3b14ef to your computer and use it in GitHub Desktop.
Spek with Subjects - Spec
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@RunWith(JUnitPlatform::class) | |
class DistancesPresenterSpec : Spek({ | |
rxGroup("DistancePresenter") { | |
val view: DistancesPresenter.View = mock() | |
val roundInteractor: RoundInteractor = mock() | |
val tested = DistancesPresenter(roundInteractor) | |
var holeSubject: PublishSubject<Hole> = PublishSubject.create() | |
var distancesSubject: PublishSubject<List<MetricRoundDistances>> = PublishSubject.create() | |
var distanceUnitSubject: PublishSubject<DistanceUnit> = PublishSubject.create() | |
val distances = listOf( | |
MetricRoundDistances(150, 125, 100), | |
MetricRoundDistances(250, 240, 230)) | |
val hole1 = Hole().apply { sequence = 1 } | |
val hole2 = Hole().apply { sequence = 2 } | |
beforeEachTest { | |
reset(view) | |
reset(roundInteractor) | |
holeSubject = PublishSubject.create() | |
distancesSubject = PublishSubject.create() | |
distanceUnitSubject = PublishSubject.create() | |
whenever(roundInteractor.changeHoleEvents()).thenReturn(holeSubject) | |
whenever(roundInteractor.distancesEvents()).thenReturn(distancesSubject) | |
whenever(roundInteractor.distanceUnitEvents()).thenReturn(distanceUnitSubject) | |
tested.attachView(view) | |
} | |
afterEachTest { | |
tested.stop() | |
} | |
given("distances in meters for hole 1") { | |
beforeEachTest { | |
tested.start() | |
holeSubject.onNext(hole1) | |
distancesSubject.onNext(distances) | |
distanceUnitSubject.onNext(DistanceUnit.METRIC) | |
} | |
it("should display distances for hole 1") { | |
verify(view).displayDistancesToGreen("150", "125", "100") | |
} | |
it("should display distance units in meters") { | |
verify(view).displayDistanceUnit(true) | |
} | |
on("change to hole 2") { | |
holeSubject.onNext(hole2) | |
it("should display distances for hole 2") { | |
verify(view).displayDistancesToGreen("250", "240", "230") | |
} | |
} | |
on("distances update") { | |
val distancesUpdate = listOf( | |
MetricRoundDistances(30, 10, 4), | |
MetricRoundDistances(350, 325, 300)) | |
distancesSubject.onNext(distancesUpdate) | |
it("should display updated distances for hole 1") { | |
verify(view).displayDistancesToGreen("30", "10", "4") | |
} | |
} | |
on("change to imperial system") { | |
distanceUnitSubject.onNext(DistanceUnit.IMPERIAL) | |
it("should display distances in yards for hole 1") { | |
verify(view).displayDistancesToGreen("164", "137", "109") | |
} | |
it("should display distance units in yards") { | |
verify(view).displayDistanceUnit(false) | |
} | |
} | |
on("wrong distance update") { | |
distancesSubject.onError(Throwable()) | |
it("should display error") { | |
verify(view).displayError() | |
} | |
} | |
} | |
} | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment