From cc05a93f0958cc2e56c5b54ad4f6bdec905aba9d Mon Sep 17 00:00:00 2001 From: Korna <17145209+Korna@users.noreply.github.com> Date: Mon, 7 Nov 2022 20:01:03 +0300 Subject: [PATCH] Update error handling and add extra tests --- .../hpk/clients/hms/enums/HmsResponseCode.kt | 2 +- .../hpk/services/HmsHpkClientServiceImpl.kt | 2 +- .../clients/hms_hpk/HmsHpkWebClientTest.kt | 52 +++++++------- .../hms_oauth/HmsOauthWebClientTest.kt | 1 + .../hpk/services/HmsHpkClientServiceTest.kt | 69 ++++++++++++++++++- 5 files changed, 99 insertions(+), 27 deletions(-) diff --git a/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms/enums/HmsResponseCode.kt b/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms/enums/HmsResponseCode.kt index b92620e..796f7fc 100644 --- a/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms/enums/HmsResponseCode.kt +++ b/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms/enums/HmsResponseCode.kt @@ -8,7 +8,7 @@ internal enum class HmsResponseCode( ) : ValueableSerializableEnum { UNKNOWN(-1, "Unknown"), - INVALID_CLIENT_SECRET(1101, "Invalid client_secret"), + INVALID_CLIENT_SECRET(1101, "Invalid client_secret: app or server has mismatching credentials"), SUCCESS(80000000, "Success"), SOME_TOKENS_ARE_INVALID(80100000, "Some tokens are right, the others are illegal"), PARAMETERS_ARE_INVALID(80100001, "Parameters check error"), diff --git a/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceImpl.kt b/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceImpl.kt index c6a8af8..002f0f8 100644 --- a/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceImpl.kt +++ b/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceImpl.kt @@ -61,7 +61,7 @@ class HmsHpkClientServiceImpl( } HmsResponseCode.INVALID_TOKEN, - HmsResponseCode.PERMISSION_DENIED -> { + HmsResponseCode.INVALID_CLIENT_SECRET -> { throw InvalidPushTokenException() } diff --git a/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClientTest.kt b/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClientTest.kt index a46d86f..4e1cd2d 100644 --- a/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClientTest.kt +++ b/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClientTest.kt @@ -22,31 +22,11 @@ class HmsHpkWebClientTest { lateinit var hmsHpkWebClient: HmsHpkWebClient @Test - fun messagesSend_pushTokenNotSpecified() { + fun messagesSend_permissionDeniedOnIncorrectAccessToken() { val result = hmsHpkWebClient.messagesSend( HmsHpkMessagesSendRequest( - hmsHpkMessagesSendBody = HmsHpkMessagesSendBody( - validateOnly = true, - message = Message.builder() - .addToken("pushTokenWithLongLength") - .setNotification( - Notification.builder() - .setTitle("title") - .setBody("body") - .setImage("https://avatars.githubusercontent.com/u/1435794?s=200&v=4") - .build() - ) - .setAndroidConfig( - AndroidConfig.builder() - .setUrgency(AndroidUrgency.HIGH) - .setAndroidNotificationConfig( - AndroidNotificationConfig.builder() - .setDefaultSound(true) - .build(AndroidClickAction.builder().build(AndroidClickActionType.OPEN_APP)) - ) - .build() - ) - .build() + hmsHpkMessagesSendBody = buildHmsHpkMessagesSendBody( + token = "pushTokenWithLongLength" ), accessToken = "testAccessToken" ) @@ -58,4 +38,30 @@ class HmsHpkWebClientTest { ) } + private fun buildHmsHpkMessagesSendBody(token: String): HmsHpkMessagesSendBody { + return HmsHpkMessagesSendBody( + validateOnly = true, + message = Message.builder() + .addToken(token) + .setNotification( + Notification.builder() + .setTitle("title") + .setBody("body") + .setImage("https://avatars.githubusercontent.com/u/1435794?s=200&v=4") + .build() + ) + .setAndroidConfig( + AndroidConfig.builder() + .setUrgency(AndroidUrgency.HIGH) + .setAndroidNotificationConfig( + AndroidNotificationConfig.builder() + .setDefaultSound(true) + .build(AndroidClickAction.builder().build(AndroidClickActionType.OPEN_APP)) + ) + .build() + ) + .build() + ) + } + } diff --git a/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_oauth/HmsOauthWebClientTest.kt b/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_oauth/HmsOauthWebClientTest.kt index f03fa1b..8bc44a2 100644 --- a/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_oauth/HmsOauthWebClientTest.kt +++ b/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_oauth/HmsOauthWebClientTest.kt @@ -23,4 +23,5 @@ class HmsOauthWebClientTest { HmsResponseCode.INVALID_CLIENT_SECRET.value ) } + } diff --git a/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceTest.kt b/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceTest.kt index 9881992..9067f84 100644 --- a/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceTest.kt +++ b/push-message-provider-hpk/src/test/kotlin/ru/touchin/push/message/provider/hpk/services/HmsHpkClientServiceTest.kt @@ -10,6 +10,7 @@ import org.springframework.boot.test.mock.mockito.MockBean import ru.touchin.push.message.provider.dto.PushMessageNotification import ru.touchin.push.message.provider.dto.request.PushTokenMessage import ru.touchin.push.message.provider.exceptions.InvalidPushTokenException +import ru.touchin.push.message.provider.exceptions.PushMessageProviderException import ru.touchin.push.message.provider.hpk.clients.hms_hpk.HmsHpkWebClient import ru.touchin.push.message.provider.hpk.clients.hms.enums.HmsResponseCode import ru.touchin.push.message.provider.hpk.clients.hms_hpk.responses.HmsHpkResponse @@ -27,8 +28,10 @@ class HmsHpkClientServiceTest { lateinit var hmsHpkClientService: HmsHpkClientService @Test - fun getAccessToken_throwsInvalidPushTokenExceptionForKnownErrors() { - Mockito.`when`(hmsOauthClientService.getAccessToken()).then { "accessToken" } + fun send_throwsInvalidPushTokenExceptionForKnownErrors() { + Mockito.`when`( + hmsOauthClientService.getAccessToken() + ).then { "accessToken" } Mockito.`when`( hmsHpkWebClient.messagesSend(any()) @@ -55,4 +58,66 @@ class HmsHpkClientServiceTest { ) { hmsHpkClientService.send(pushTokenMessage) } } + @Test + fun send_throwsPushMessageProviderExceptionOnOtherExceptions() { + Mockito.`when`( + hmsOauthClientService.getAccessToken() + ).then { "accessToken" } + + Mockito.`when`( + hmsHpkWebClient.messagesSend(any()) + ).then { + HmsHpkResponse( + code = HmsResponseCode.OAUTH_TOKEN_EXPIRED.value.toString(), + msg = "0", + requestId = "requestId" + ) + } + + val pushTokenMessage = PushTokenMessage( + token = "token", + pushMessageNotification = PushMessageNotification( + title = "title", + description = "description", + imageUrl = null + ), + data = emptyMap() + ) + + Assertions.assertThrows( + PushMessageProviderException::class.java + ) { hmsHpkClientService.send(pushTokenMessage) } + } + + @Test + fun send_passesSuccess() { + Mockito.`when`( + hmsOauthClientService.getAccessToken() + ).then { "accessToken" } + + Mockito.`when`( + hmsHpkWebClient.messagesSend(any()) + ).then { + HmsHpkResponse( + code = HmsResponseCode.SUCCESS.value.toString(), + msg = "0", + requestId = "requestId" + ) + } + + val pushTokenMessage = PushTokenMessage( + token = "token", + pushMessageNotification = PushMessageNotification( + title = "title", + description = "description", + imageUrl = null + ), + data = emptyMap() + ) + + Assertions.assertDoesNotThrow { + hmsHpkClientService.send(pushTokenMessage) + } + } + }