Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ruigoncalo
Last active September 16, 2017 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ruigoncalo/64f2de5fde7a977d90826ffa2b3b14ef to your computer and use it in GitHub Desktop.
Save ruigoncalo/64f2de5fde7a977d90826ffa2b3b14ef to your computer and use it in GitHub Desktop.
Spek with Subjects - Spec
@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