Implement PushmessageProviderService method in FCM service

This commit is contained in:
Artyom 2022-08-16 14:32:25 +03:00
parent b15ea97aac
commit 02b7fd6599
3 changed files with 58 additions and 1 deletions

View File

@ -3,9 +3,11 @@ package ru.touchin.push.message.provider.fcm.clients
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.FirebaseMessagingException
import org.springframework.stereotype.Component
import ru.touchin.push.message.provider.dto.request.PushTokenCheck
import ru.touchin.push.message.provider.dto.request.PushTokenMessage
import ru.touchin.push.message.provider.dto.result.SendPushResult
import ru.touchin.push.message.provider.dto.result.SendPushTokenMessageResult
import ru.touchin.push.message.provider.enums.PushTokenStatus
import ru.touchin.push.message.provider.exceptions.InvalidPushTokenException
import ru.touchin.push.message.provider.exceptions.PushMessageProviderException
import ru.touchin.push.message.provider.fcm.converters.FirebaseMessagingExceptionConverter
@ -24,10 +26,33 @@ class FcmClient(
@Throws(PushMessageProviderException::class, InvalidPushTokenException::class)
fun sendPushTokenMessage(request: PushTokenMessage): SendPushResult {
return sendToPushToken(request, dryRun = false)
}
fun check(request: PushTokenCheck): PushTokenStatus {
val validationRequest = PushTokenMessage(
token = request.pushToken,
notification = null,
data = emptyMap()
)
return try {
sendToPushToken(validationRequest, dryRun = true)
PushTokenStatus.VALID
} catch (ipte: InvalidPushTokenException) {
PushTokenStatus.INVALID
} catch (pmpe: PushMessageProviderException) {
PushTokenStatus.UNKNOWN
}
}
@Throws(PushMessageProviderException::class, InvalidPushTokenException::class)
private fun sendToPushToken(request: PushTokenMessage, dryRun: Boolean): SendPushResult {
val message = pushTokenMessageConverter(request)
return try {
val messageId = firebaseMessaging.send(message)
val messageId = firebaseMessaging.send(message, dryRun)
SendPushTokenMessageResult(messageId)
} catch (e: FirebaseMessagingException) {

View File

@ -1,8 +1,10 @@
package ru.touchin.push.message.provider.fcm.services
import org.springframework.stereotype.Service
import ru.touchin.push.message.provider.dto.request.PushTokenCheck
import ru.touchin.push.message.provider.dto.request.PushTokenMessage
import ru.touchin.push.message.provider.dto.request.SendPushRequest
import ru.touchin.push.message.provider.dto.result.CheckPushTokenResult
import ru.touchin.push.message.provider.dto.result.SendPushResult
import ru.touchin.push.message.provider.enums.PushMessageProviderType
import ru.touchin.push.message.provider.exceptions.InvalidPushTokenException
@ -24,4 +26,10 @@ class PushMessageProviderFcmService(
}
}
override fun check(request: PushTokenCheck): CheckPushTokenResult {
val status = fcmClient.check(request)
return CheckPushTokenResult(status)
}
}

View File

@ -7,8 +7,11 @@ import org.mockito.Mockito
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.mock.mockito.MockBean
import ru.touchin.push.message.provider.dto.request.PushTokenCheck
import ru.touchin.push.message.provider.dto.request.PushTokenMessage
import ru.touchin.push.message.provider.dto.result.CheckPushTokenResult
import ru.touchin.push.message.provider.dto.result.SendPushTokenMessageResult
import ru.touchin.push.message.provider.enums.PushTokenStatus
import ru.touchin.push.message.provider.fcm.clients.FcmClient
import ru.touchin.push.message.provider.services.PushMessageProviderService
@ -47,4 +50,25 @@ class PushMessageProviderFcmServiceTest {
)
}
@Test
@DisplayName("Обработка запроса на валидацию пуш-токена происходит корректно")
fun isValid_basic() {
val expectedClientResult = PushTokenStatus.VALID
Mockito.`when`(
fcmClient.check(PushTokenCheck("testToken"))
).thenReturn(
expectedClientResult
)
val expectedResult = CheckPushTokenResult(expectedClientResult)
val realResult = pushMessageProviderService.check(PushTokenCheck("testToken"))
Assert.assertEquals(
"Обработка запроса на валидацию пуш-токена происходит корректно",
expectedResult,
realResult
)
}
}