Skip to content

Instantly share code, notes, and snippets.

@stoichoandreev
Created April 28, 2021 13:33
Show Gist options
  • Save stoichoandreev/231748fc26cd526da9b7c8de9415f1f0 to your computer and use it in GitHub Desktop.
Save stoichoandreev/231748fc26cd526da9b7c8de9415f1f0 to your computer and use it in GitHub Desktop.
import com.sniper.bdd.robo.BaseRobot
import com.sniper.bdd.robo.LoginPresenter
import com.sniper.bdd.robo.LoginValidator
import com.sniper.bdd.robo.data.DataFactory
import com.sniper.bdd.robo.dsl.GIVEN
import com.sniper.bdd.robo.dsl.RUN_UNIT_TEST
import com.sniper.bdd.robo.dsl.THEN
import com.sniper.bdd.robo.dsl.WHEN
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.RelaxedMockK
import io.mockk.verify
import org.junit.Before
import org.junit.Test
class LoginPresenterTest {
private val robot = Robot()
@Before
fun setup() {
robot.setup()
}
@Test
fun `shouldClearErrorsOnLogin`() {
RUN_UNIT_TEST(robot) {
WHEN { loginSubmit() }
THEN { checkViewClearErrors() }
}
}
@Test
fun `shouldDisplaySuccessfulLogin`() {
RUN_UNIT_TEST(robot) {
GIVEN { stubValidEmail() }
GIVEN { stubValidPassword() }
WHEN { loginSubmit() }
THEN { checkViewDisplaySuccessfulLogin() }
}
}
private class Robot: BaseRobot() {
@RelaxedMockK
private lateinit var view: LoginPresenter.View
@RelaxedMockK
private lateinit var validator: LoginValidator
private lateinit var tested: LoginPresenter
override fun setup() {
MockKAnnotations.init(this)
tested = LoginPresenter(view, validator)
}
fun stubValidEmail() {
every { validator.isEmailValid(any()) }.returns(true)
}
fun stubValidPassword() {
every { validator.isPasswordValid(any()) }.returns(true)
}
fun loginSubmit() {
tested.onLoginSubmit(DataFactory.EMAIL, DataFactory.VALID_PASSWORD)
}
fun checkViewClearErrors() {
verify { view.clearErrors() }
}
fun checkViewDisplaySuccessfulLogin() {
verify { view.displaySuccessfulLogin() }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment