Skip to content

Instantly share code, notes, and snippets.

View rozkminiacz's full-sized avatar

Jarosław Michalik rozkminiacz

View GitHub Profile
given("no people in repository"){
val view: PeopleListContract.View = mock()
val repository : Repository<Person> = mock {
on { getAll() } doReturn Single.error(Error("no data"))
}
val presenter = PeopleListPresenter(repository)
on("presenter attach"){
presenter.attach(view)
presenterAttachStandardFlow(view, presenter){
it("should not add anything to view"){
on("presenter attach") {
presenter.attach(view)
presenterAttachStandardFlow(view, presenter) {
it("should add people to view") {
verify(view).addPeople(peopleList)
}
it("should never show error") {
verify(view, never()).showError(anyOrNull())
}
}
fun ActionBody.presenterAttachStandardFlow(
view: PeopleListContract.View,
presenter: PeopleListPresenter,
additionalTestBlock: () -> Unit) {
it("should attach view") {
Assert.assertNotNull(presenter.view)
}
it("should start loading") {
verify(view).showLoading()
}
class PeopleListPresenter(private val repository: Repository<Person>) : PeopleListContract.Presenter {
var view: PeopleListContract.View? = null
override fun attach(view: PeopleListContract.View) {
this.view = view
loadPeople()
}
private fun loadPeople() {
val presenter = PeopleListPresenter(repository)
on("presenter attach"){
presenter.attach(view)
it("should attach view"){
assertNotNull(presenter.view)
}
it("should start loading") {
verify(view).showLoading()
}
val peopleList : List<Person> = listOf(
Person(id = "1", firstName = "Mark", surname = "Train"),
Person(id = "2", firstName = "George", secondName = "Edward", surname = "Bicycle")
)
val repository : Repository<Person> = mock{
on { getAll() } doReturn Single.just(peopleList)
}
class PeopleListPresenter(val repository: Repository<Person>) : PeopleListContract.Presenter {
var view: PeopleListContract.View? = null
override fun attach(view: PeopleListContract.View) {
this.view = view
}
override fun detach() {
this.view = null
interface Repository<in T>{
fun getAll() : Single<List<T>>
fun getOne(id : String) : Single<T>
fun create(t : T)
}
on("presenter attach") {
presenter.attach(view)
it("should attach view") {
assertNotNull(presenter.view)
}
it("should start loading") {
verify(view).showLoading()
}
it("should load list into view") {
verify(view).addPeople(peopleList)
import org.jetbrains.spek.api.Spek
import org.jetbrains.spek.api.dsl.*
import org.junit.platform.runner.JUnitPlatform
import com.nhaarman.mockito_kotlin.*
import org.junit.runner.RunWith
@RunWith(JUnitPlatform::class)
object PeopleListTest : Spek({
given("people exists in repository"){
val view: PeopleListContract.View = mock()