Create FcmClient class to make integration implementation closed
This commit is contained in:
parent
37fb9443ea
commit
ad61be705b
|
|
@ -0,0 +1,38 @@
|
|||
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.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.exceptions.InvalidPushTokenException
|
||||
import ru.touchin.push.message.provider.exceptions.PushMessageProviderException
|
||||
import ru.touchin.push.message.provider.fcm.converters.FirebaseMessagingExceptionConverter
|
||||
import ru.touchin.push.message.provider.fcm.converters.PushTokenMessageConverter
|
||||
|
||||
/**
|
||||
* Service that provides integration with FCM.
|
||||
* @see <a href="https://firebase.google.com/docs/cloud-messaging">FCM documentation</a>
|
||||
*/
|
||||
@Component
|
||||
class FcmClient(
|
||||
private val firebaseMessaging: FirebaseMessaging,
|
||||
private val pushTokenMessageConverter: PushTokenMessageConverter,
|
||||
private val firebaseMessagingExceptionConverter: FirebaseMessagingExceptionConverter
|
||||
) {
|
||||
|
||||
@Throws(PushMessageProviderException::class, InvalidPushTokenException::class)
|
||||
fun sendPushTokenMessage(request: PushTokenMessage): SendPushResult {
|
||||
val message = pushTokenMessageConverter(request)
|
||||
|
||||
return try {
|
||||
val messageId = firebaseMessaging.send(message)
|
||||
|
||||
SendPushTokenMessageResult(messageId)
|
||||
} catch (e: FirebaseMessagingException) {
|
||||
throw firebaseMessagingExceptionConverter(e)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,28 +1,18 @@
|
|||
package ru.touchin.push.message.provider.fcm.services
|
||||
|
||||
import com.google.firebase.messaging.FirebaseMessaging
|
||||
import com.google.firebase.messaging.FirebaseMessagingException
|
||||
import org.springframework.stereotype.Service
|
||||
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.SendPushResult
|
||||
import ru.touchin.push.message.provider.dto.result.SendPushTokenMessageResult
|
||||
import ru.touchin.push.message.provider.enums.PushMessageProviderType
|
||||
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
|
||||
import ru.touchin.push.message.provider.fcm.converters.PushTokenMessageConverter
|
||||
import ru.touchin.push.message.provider.fcm.clients.FcmClient
|
||||
import ru.touchin.push.message.provider.services.PushMessageProviderService
|
||||
|
||||
/**
|
||||
* Service that provides integration with FCM.
|
||||
* @see <a href="https://firebase.google.com/docs/cloud-messaging">FCM documentation</a>
|
||||
*/
|
||||
@Service
|
||||
class PushMessageProviderFcmService(
|
||||
private val firebaseMessaging: FirebaseMessaging,
|
||||
private val pushTokenMessageConverter: PushTokenMessageConverter,
|
||||
private val firebaseMessagingExceptionConverter: FirebaseMessagingExceptionConverter
|
||||
private val fcmClient: FcmClient
|
||||
) : PushMessageProviderService {
|
||||
|
||||
override val type: PushMessageProviderType = PushMessageProviderType.FCM
|
||||
|
|
@ -30,19 +20,7 @@ class PushMessageProviderFcmService(
|
|||
@Throws(PushMessageProviderException::class, InvalidPushTokenException::class)
|
||||
override fun send(request: SendPushRequest): SendPushResult {
|
||||
return when (request) {
|
||||
is PushTokenMessage -> sendPushTokenMessage(request)
|
||||
}
|
||||
}
|
||||
|
||||
private fun sendPushTokenMessage(request: PushTokenMessage): SendPushResult {
|
||||
val message = pushTokenMessageConverter(request)
|
||||
|
||||
return try {
|
||||
val messageId = firebaseMessaging.send(message)
|
||||
|
||||
SendPushTokenMessageResult(messageId)
|
||||
} catch (e: FirebaseMessagingException) {
|
||||
throw firebaseMessagingExceptionConverter(e)
|
||||
is PushTokenMessage -> fcmClient.sendPushTokenMessage(request)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
package ru.touchin.push.message.provider.fcm.services
|
||||
|
||||
import org.junit.Assert
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
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.PushTokenMessage
|
||||
import ru.touchin.push.message.provider.dto.result.SendPushTokenMessageResult
|
||||
import ru.touchin.push.message.provider.fcm.clients.FcmClient
|
||||
import ru.touchin.push.message.provider.services.PushMessageProviderService
|
||||
|
||||
@SpringBootTest
|
||||
class PushMessageProviderFcmServiceTest {
|
||||
|
||||
@MockBean
|
||||
lateinit var fcmClient: FcmClient
|
||||
|
||||
@Autowired
|
||||
lateinit var pushMessageProviderService: PushMessageProviderService
|
||||
|
||||
@Test
|
||||
@DisplayName("Обработка запроса на отправку единичного сообщения происходит корректно")
|
||||
fun send_basic() {
|
||||
val request = PushTokenMessage(
|
||||
token = "testToken",
|
||||
notification = null,
|
||||
data = emptyMap()
|
||||
)
|
||||
|
||||
val expectedResult = SendPushTokenMessageResult("testMessageId")
|
||||
|
||||
Mockito.`when`(
|
||||
fcmClient.sendPushTokenMessage(request)
|
||||
).thenReturn(
|
||||
expectedResult
|
||||
)
|
||||
|
||||
val realResult = pushMessageProviderService.send(request)
|
||||
|
||||
Assert.assertEquals(
|
||||
"Обработка запроса на отправку единичного сообщения происходит некорректно",
|
||||
expectedResult,
|
||||
realResult
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue