Skip to content

Instantly share code, notes, and snippets.

@pablodeafsapps
Created August 19, 2020 17:14
Show Gist options
  • Save pablodeafsapps/1201b43f5ea952b4a76fa9f26bbbe349 to your computer and use it in GitHub Desktop.
Save pablodeafsapps/1201b43f5ea952b4a76fa9f26bbbe349 to your computer and use it in GitHub Desktop.
A test sample on a use-case which returns an Arrow Either value
private const val DEFAULT_INTEGER_VALUE = -1
private const val DEFAULT_STRING_VALUE = "none"
@ExperimentalCoroutinesApi
class FetchNumberFactUcTest {
private lateinit var usecase: DomainlayerContract.Presentation.UseCase<NumberFactRequest, NumberFactResponse>
private lateinit var mockRepository: DomainlayerContract.Data.DataRepository<NumberFactResponse>
@Before
fun setUp() {
mockRepository = mock()
usecase = FetchNumberFactUc(numberDataRepository = mockRepository)
}
@After
fun tearDown() {
}
@Test
fun `Given null parameters, when usecase is invoked -- 'InputParamsError' is returned`() = runBlockingTest {
// given
val nullParams = null
// when
val response = usecase.run(params = nullParams)
// then
Assert.assertTrue(response.isLeft() && (response as? Either.Left<Failure>)?.a is Failure.InputParamsError)
}
// TODO: this test fails because the 'repository' instance is not accessible, i.e. cannot be mocked/stubbed
@Test
fun `Given right parameters, when usecase is invoked -- 'NumberFactResponse' data is returned`() = runBlockingTest {
// given
val rightParams = NumberFactRequest(number = DEFAULT_INTEGER_VALUE)
whenever(mockRepository.fetchNumberFact(request = rightParams)).doReturn(getDummyNumberFactResponse().right())
// when
val response = usecase.run(params = rightParams)
// then
Assert.assertTrue(response.isRight() && (response as? Either.Right<NumberFactResponse>) != null)
}
private fun getDummyNumberFactResponse() = NumberFactResponse(fact = DEFAULT_STRING_VALUE)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment