Issue#30 Add named arguments everywhere where mockserver is used in network module

This commit is contained in:
Gergely Hegedus 2022-01-24 19:45:24 +02:00
parent 4b985bec25
commit 9e0867b3aa
4 changed files with 39 additions and 38 deletions

View file

@ -30,8 +30,7 @@ class LoginRemoteSourceRefreshActionImplTest : KoinTest {
@RegisterExtension @RegisterExtension
@JvmField @JvmField
val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions() val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions()
private val mockServerScenarioSetup private val mockServerScenarioSetup get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
@BeforeEach @BeforeEach
fun setUp() { fun setUp() {
@ -56,7 +55,7 @@ class LoginRemoteSourceRefreshActionImplTest : KoinTest {
@DisplayName("GIVEN successful response WHEN refresh request is fired THEN session is returned") @DisplayName("GIVEN successful response WHEN refresh request is fired THEN session is returned")
@Test @Test
fun successResponseResultsInSession() = runBlocking { fun successResponseResultsInSession() = runBlocking {
mockServerScenarioSetup.setScenario(RefreshTokenScenario.Success) mockServerScenarioSetup.setScenario(RefreshTokenScenario.Success, validateArguments = false)
val expected = ContentData.refreshSuccessResponse val expected = ContentData.refreshSuccessResponse
val actual = sut.refresh(ContentData.refreshSuccessResponse.refreshToken) val actual = sut.refresh(ContentData.refreshSuccessResponse.refreshToken)
@ -67,7 +66,7 @@ class LoginRemoteSourceRefreshActionImplTest : KoinTest {
@DisplayName("GIVEN successful response WHEN refresh request is fired THEN the request is setup properly") @DisplayName("GIVEN successful response WHEN refresh request is fired THEN the request is setup properly")
@Test @Test
fun refreshRequestIsSetupProperly() = runBlocking { fun refreshRequestIsSetupProperly() = runBlocking {
mockServerScenarioSetup.setScenario(RefreshTokenScenario.Success, false) mockServerScenarioSetup.setScenario(RefreshTokenScenario.Success, validateArguments = false)
sut.refresh(ContentData.refreshSuccessResponse.refreshToken) sut.refresh(ContentData.refreshSuccessResponse.refreshToken)
val request = mockServerScenarioSetup.takeRequest() val request = mockServerScenarioSetup.takeRequest()
@ -82,7 +81,7 @@ class LoginRemoteSourceRefreshActionImplTest : KoinTest {
@DisplayName("GIVEN internal error response WHEN refresh request is fired THEN network exception is thrown") @DisplayName("GIVEN internal error response WHEN refresh request is fired THEN network exception is thrown")
@Test @Test
fun generalErrorResponseResultsInNetworkException() { fun generalErrorResponseResultsInNetworkException() {
mockServerScenarioSetup.setScenario(RefreshTokenScenario.Error) mockServerScenarioSetup.setScenario(RefreshTokenScenario.Error, validateArguments = false)
Assertions.assertThrows(NetworkException::class.java) { Assertions.assertThrows(NetworkException::class.java) {
runBlocking { sut.refresh(ContentData.refreshSuccessResponse.refreshToken) } runBlocking { sut.refresh(ContentData.refreshSuccessResponse.refreshToken) }
@ -92,7 +91,7 @@ class LoginRemoteSourceRefreshActionImplTest : KoinTest {
@DisplayName("GIVEN invalid json response WHEN refresh request is fired THEN network exception is thrown") @DisplayName("GIVEN invalid json response WHEN refresh request is fired THEN network exception is thrown")
@Test @Test
fun jsonErrorResponseResultsInParsingException() { fun jsonErrorResponseResultsInParsingException() {
mockServerScenarioSetup.setScenario(RefreshTokenScenario.UnexpectedJsonAsSuccessResponse) mockServerScenarioSetup.setScenario(RefreshTokenScenario.UnexpectedJsonAsSuccessResponse, validateArguments = false)
Assertions.assertThrows(ParsingException::class.java) { Assertions.assertThrows(ParsingException::class.java) {
runBlocking { sut.refresh(ContentData.loginSuccessResponse.refreshToken) } runBlocking { sut.refresh(ContentData.loginSuccessResponse.refreshToken) }
@ -102,7 +101,7 @@ class LoginRemoteSourceRefreshActionImplTest : KoinTest {
@DisplayName("GIVEN malformed json response WHEN refresh request is fired THEN parsing exception is thrown") @DisplayName("GIVEN malformed json response WHEN refresh request is fired THEN parsing exception is thrown")
@Test @Test
fun malformedJsonErrorResponseResultsInParsingException() { fun malformedJsonErrorResponseResultsInParsingException() {
mockServerScenarioSetup.setScenario(RefreshTokenScenario.MalformedJson) mockServerScenarioSetup.setScenario(RefreshTokenScenario.MalformedJson, validateArguments = false)
Assertions.assertThrows(ParsingException::class.java) { Assertions.assertThrows(ParsingException::class.java) {
runBlocking { sut.refresh(ContentData.loginSuccessResponse.refreshToken) } runBlocking { sut.refresh(ContentData.loginSuccessResponse.refreshToken) }

View file

@ -34,8 +34,7 @@ class LoginRemoteSourceTest : KoinTest {
@RegisterExtension @RegisterExtension
@JvmField @JvmField
val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions() val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions()
private val mockServerScenarioSetup private val mockServerScenarioSetup get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
@BeforeEach @BeforeEach
fun setUp() { fun setUp() {
@ -60,10 +59,10 @@ class LoginRemoteSourceTest : KoinTest {
@DisplayName("GIVEN successful response WHEN request is fired THEN login status success is returned") @DisplayName("GIVEN successful response WHEN request is fired THEN login status success is returned")
@Test @Test
fun successResponseIsParsedProperly() = runBlocking { fun successResponseIsParsedProperly() = runBlocking {
mockServerScenarioSetup.setScenario(AuthScenario.Success("a", "b")) mockServerScenarioSetup.setScenario(AuthScenario.Success(username = "a", password = "b"), validateArguments = false)
val expected = LoginStatusResponses.Success(ContentData.loginSuccessResponse) val expected = LoginStatusResponses.Success(ContentData.loginSuccessResponse)
val actual = sut.login(LoginCredentials("a", "b")) val actual = sut.login(LoginCredentials(username = "a", password = "b"))
Assertions.assertEquals(expected, actual) Assertions.assertEquals(expected, actual)
} }
@ -71,16 +70,16 @@ class LoginRemoteSourceTest : KoinTest {
@DisplayName("GIVEN successful response WHEN request is fired THEN the request is setup properly") @DisplayName("GIVEN successful response WHEN request is fired THEN the request is setup properly")
@Test @Test
fun requestProperlySetup() = runBlocking { fun requestProperlySetup() = runBlocking {
mockServerScenarioSetup.setScenario(AuthScenario.Success("a", "b"), false) mockServerScenarioSetup.setScenario(AuthScenario.Success(username = "a", password = "b"), validateArguments = false)
sut.login(LoginCredentials("a", "b")) sut.login(LoginCredentials(username = "a", password = "b"))
val request = mockServerScenarioSetup.takeRequest() val request = mockServerScenarioSetup.takeRequest()
Assertions.assertEquals("POST", request.method) Assertions.assertEquals("POST", request.method)
Assertions.assertEquals("Android", request.getHeader("Platform")) Assertions.assertEquals("Android", request.getHeader("Platform"))
Assertions.assertEquals(null, request.getHeader("Authorization")) Assertions.assertEquals(null, request.getHeader("Authorization"))
Assertions.assertEquals("/login", request.path) Assertions.assertEquals("/login", request.path)
val loginRequest = createExpectedLoginRequestJson("a", "b") val loginRequest = createExpectedLoginRequestJson(username = "a", password = "b")
JSONAssert.assertEquals( JSONAssert.assertEquals(
loginRequest, loginRequest,
request.body.readUtf8(), request.body.readUtf8(),
@ -91,10 +90,10 @@ class LoginRemoteSourceTest : KoinTest {
@DisplayName("GIVEN bad request response WHEN request is fired THEN login status invalid credentials is returned") @DisplayName("GIVEN bad request response WHEN request is fired THEN login status invalid credentials is returned")
@Test @Test
fun badRequestMeansInvalidCredentials() = runBlocking { fun badRequestMeansInvalidCredentials() = runBlocking {
mockServerScenarioSetup.setScenario(AuthScenario.InvalidCredentials("a", "b")) mockServerScenarioSetup.setScenario(AuthScenario.InvalidCredentials(username = "a", password = "b"), validateArguments = false)
val expected = LoginStatusResponses.InvalidCredentials val expected = LoginStatusResponses.InvalidCredentials
val actual = sut.login(LoginCredentials("a", "b")) val actual = sut.login(LoginCredentials(username = "a", password = "b"))
Assertions.assertEquals(expected, actual) Assertions.assertEquals(expected, actual)
} }
@ -102,30 +101,32 @@ class LoginRemoteSourceTest : KoinTest {
@DisplayName("GIVEN internal error response WHEN request is fired THEN network exception is thrown") @DisplayName("GIVEN internal error response WHEN request is fired THEN network exception is thrown")
@Test @Test
fun genericErrorMeansNetworkError() { fun genericErrorMeansNetworkError() {
mockServerScenarioSetup.setScenario(AuthScenario.GenericError("a", "b")) mockServerScenarioSetup.setScenario(AuthScenario.GenericError(username = "a", password = "b"), validateArguments = false)
Assertions.assertThrows(NetworkException::class.java) { Assertions.assertThrows(NetworkException::class.java) {
runBlocking { sut.login(LoginCredentials("a", "b")) } runBlocking { sut.login(LoginCredentials(username = "a", password = "b")) }
} }
} }
@DisplayName("GIVEN invalid json response WHEN request is fired THEN network exception is thrown") @DisplayName("GIVEN invalid json response WHEN request is fired THEN network exception is thrown")
@Test @Test
fun invalidJsonMeansParsingException() { fun invalidJsonMeansParsingException() {
mockServerScenarioSetup.setScenario(AuthScenario.UnexpectedJsonAsSuccessResponse("a", "b")) val response = AuthScenario.UnexpectedJsonAsSuccessResponse(username = "a", password = "b")
mockServerScenarioSetup.setScenario(response, validateArguments = false)
Assertions.assertThrows(ParsingException::class.java) { Assertions.assertThrows(ParsingException::class.java) {
runBlocking { sut.login(LoginCredentials("a", "b")) } runBlocking { sut.login(LoginCredentials(username = "a", password = "b")) }
} }
} }
@DisplayName("GIVEN malformed json response WHEN request is fired THEN network exception is thrown") @DisplayName("GIVEN malformed json response WHEN request is fired THEN network exception is thrown")
@Test @Test
fun malformedJsonMeansParsingException() { fun malformedJsonMeansParsingException() {
mockServerScenarioSetup.setScenario(AuthScenario.MalformedJsonAsSuccessResponse("a", "b")) val response = AuthScenario.MalformedJsonAsSuccessResponse(username = "a", "b")
mockServerScenarioSetup.setScenario(response, validateArguments = false)
Assertions.assertThrows(ParsingException::class.java) { Assertions.assertThrows(ParsingException::class.java) {
runBlocking { sut.login(LoginCredentials("a", "b")) } runBlocking { sut.login(LoginCredentials(username = "a", "b")) }
} }
} }
} }

View file

@ -32,8 +32,7 @@ class ContentRemoteSourceImplTest : KoinTest {
@JvmField @JvmField
val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions() val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions()
private lateinit var mockNetworkSessionLocalStorage: NetworkSessionLocalStorage private lateinit var mockNetworkSessionLocalStorage: NetworkSessionLocalStorage
private val mockServerScenarioSetup private val mockServerScenarioSetup get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
@BeforeEach @BeforeEach
fun setUp() { fun setUp() {
@ -59,7 +58,7 @@ class ContentRemoteSourceImplTest : KoinTest {
@Test @Test
fun successResponseParsing() = runBlocking { fun successResponseParsing() = runBlocking {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.Success(false)) mockServerScenarioSetup.setScenario(ContentScenario.Success(usingRefreshedToken = false), validateArguments = false)
val expected = ContentData.contentSuccess val expected = ContentData.contentSuccess
val actual = sut.get() val actual = sut.get()
@ -71,7 +70,7 @@ class ContentRemoteSourceImplTest : KoinTest {
@Test @Test
fun successResponseRequestIsCorrect() = runBlocking { fun successResponseRequestIsCorrect() = runBlocking {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.Success(false), false) mockServerScenarioSetup.setScenario(ContentScenario.Success(usingRefreshedToken = false), validateArguments = false)
sut.get() sut.get()
val request = mockServerScenarioSetup.takeRequest() val request = mockServerScenarioSetup.takeRequest()
@ -87,7 +86,8 @@ class ContentRemoteSourceImplTest : KoinTest {
@Test @Test
fun dataMissingFieldIsIgnored() = runBlocking { fun dataMissingFieldIsIgnored() = runBlocking {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.SuccessWithMissingFields(false)) val response = ContentScenario.SuccessWithMissingFields(usingRefreshedToken = false)
mockServerScenarioSetup.setScenario(response, validateArguments = false)
val expected = ContentData.contentSuccessWithMissingFields val expected = ContentData.contentSuccessWithMissingFields
@ -100,7 +100,7 @@ class ContentRemoteSourceImplTest : KoinTest {
@Test @Test
fun errorResponseResultsInNetworkException() { fun errorResponseResultsInNetworkException() {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.Error(false)) mockServerScenarioSetup.setScenario(ContentScenario.Error(usingRefreshedToken = false), validateArguments = false)
Assertions.assertThrows(NetworkException::class.java) { Assertions.assertThrows(NetworkException::class.java) {
runBlocking { sut.get() } runBlocking { sut.get() }
@ -111,7 +111,8 @@ class ContentRemoteSourceImplTest : KoinTest {
@Test @Test
fun unexpectedJSONResultsInParsingException() { fun unexpectedJSONResultsInParsingException() {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.UnexpectedJsonAsSuccessResponse(false)) val response = ContentScenario.UnexpectedJsonAsSuccessResponse(usingRefreshedToken = false)
mockServerScenarioSetup.setScenario(response, validateArguments = false)
Assertions.assertThrows(ParsingException::class.java) { Assertions.assertThrows(ParsingException::class.java) {
runBlocking { sut.get() } runBlocking { sut.get() }
@ -122,7 +123,8 @@ class ContentRemoteSourceImplTest : KoinTest {
@Test @Test
fun malformedJSONResultsInParsingException() { fun malformedJSONResultsInParsingException() {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.MalformedJsonAsSuccessResponse(false)) val response = ContentScenario.MalformedJsonAsSuccessResponse(usingRefreshedToken = false)
mockServerScenarioSetup.setScenario(response, validateArguments = false)
Assertions.assertThrows(ParsingException::class.java) { Assertions.assertThrows(ParsingException::class.java) {
runBlocking { sut.get() } runBlocking { sut.get() }

View file

@ -39,8 +39,7 @@ class SessionExpirationTest : KoinTest {
@RegisterExtension @RegisterExtension
@JvmField @JvmField
val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions() val mockServerScenarioSetupExtensions = MockServerScenarioSetupExtensions()
private val mockServerScenarioSetup private val mockServerScenarioSetup get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
get() = mockServerScenarioSetupExtensions.mockServerScenarioSetup
private lateinit var mockNetworkSessionLocalStorage: NetworkSessionLocalStorage private lateinit var mockNetworkSessionLocalStorage: NetworkSessionLocalStorage
private lateinit var mockNetworkSessionExpirationListener: NetworkSessionExpirationListener private lateinit var mockNetworkSessionExpirationListener: NetworkSessionExpirationListener
@ -70,11 +69,11 @@ class SessionExpirationTest : KoinTest {
fun successRefreshResultsInRequestRetry() = runBlocking { fun successRefreshResultsInRequestRetry() = runBlocking {
var sessionToReturnByMock: Session? = ContentData.loginSuccessResponse var sessionToReturnByMock: Session? = ContentData.loginSuccessResponse
mockServerScenarioSetup.setScenario( mockServerScenarioSetup.setScenario(
ContentScenario.Unauthorized(false) ContentScenario.Unauthorized(usingRefreshedToken = false)
.then(ContentScenario.Success(true)), .then(ContentScenario.Success(usingRefreshedToken = true)),
false validateArguments = false
) )
mockServerScenarioSetup.setScenario(RefreshTokenScenario.Success, false) mockServerScenarioSetup.setScenario(RefreshTokenScenario.Success, validateArguments = false)
whenever(mockNetworkSessionLocalStorage.session).doAnswer { sessionToReturnByMock } whenever(mockNetworkSessionLocalStorage.session).doAnswer { sessionToReturnByMock }
doAnswer { sessionToReturnByMock = it.arguments[0] as Session? } doAnswer { sessionToReturnByMock = it.arguments[0] as Session? }
.whenever(mockNetworkSessionLocalStorage).session = anyOrNull() .whenever(mockNetworkSessionLocalStorage).session = anyOrNull()
@ -106,8 +105,8 @@ class SessionExpirationTest : KoinTest {
@Test @Test
fun failingRefreshResultsInSessionExpiration() = runBlocking { fun failingRefreshResultsInSessionExpiration() = runBlocking {
whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse) whenever(mockNetworkSessionLocalStorage.session).doReturn(ContentData.loginSuccessResponse)
mockServerScenarioSetup.setScenario(ContentScenario.Unauthorized(false)) mockServerScenarioSetup.setScenario(ContentScenario.Unauthorized(usingRefreshedToken = false), validateArguments = false)
mockServerScenarioSetup.setScenario(RefreshTokenScenario.Error) mockServerScenarioSetup.setScenario(RefreshTokenScenario.Error, validateArguments = false)
Assertions.assertThrows(NetworkException::class.java) { Assertions.assertThrows(NetworkException::class.java) {
runBlocking { sut.get() } runBlocking { sut.get() }