Compare commits

...

2 Commits

Author SHA1 Message Date
Artyom 02b7fd6599 Implement PushmessageProviderService method in FCM service 2022-08-16 14:32:36 +03:00
Artyom b15ea97aac Add method to PushMessageProviderService interface 2022-08-16 13:35:29 +03:00
8 changed files with 96 additions and 2 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
)
}
}

View File

@ -0,0 +1,5 @@
package ru.touchin.push.message.provider.dto.request
data class PushTokenCheck(
val pushToken: String
)

View File

@ -0,0 +1,7 @@
package ru.touchin.push.message.provider.dto.result
import ru.touchin.push.message.provider.enums.PushTokenStatus
data class CheckPushTokenResult(
val status: PushTokenStatus
)

View File

@ -0,0 +1,14 @@
package ru.touchin.push.message.provider.enums
enum class PushTokenStatus {
/** Passes [PushMessageProviderType] validation. */
VALID,
/** Not passes [PushMessageProviderType] validation: not registered or has incorrect format. */
INVALID,
/** Could not validate. */
UNKNOWN
}

View File

@ -1,6 +1,8 @@
package ru.touchin.push.message.provider.services
import ru.touchin.push.message.provider.dto.request.PushTokenCheck
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
@ -10,4 +12,6 @@ interface PushMessageProviderService {
fun send(request: SendPushRequest): SendPushResult
fun check(request: PushTokenCheck): CheckPushTokenResult
}

View File

@ -4,8 +4,9 @@ import org.junit.Assert
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import ru.touchin.common.exceptions.CommonException
import ru.touchin.push.message.provider.dto.request.PushTokenCheck
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.PlatformType
import ru.touchin.push.message.provider.enums.PushMessageProviderType
@ -19,6 +20,9 @@ class PushMessageProviderServiceFactoryImplTest {
override val type: PushMessageProviderType = PushMessageProviderType.FCM
override fun send(request: SendPushRequest): SendPushResult = throw NotImplementedError()
override fun check(request: PushTokenCheck): CheckPushTokenResult = throw NotImplementedError()
}
@Test
@ -73,6 +77,9 @@ class PushMessageProviderServiceFactoryImplTest {
override val type: PushMessageProviderType = PushMessageProviderType.FCM
override fun send(request: SendPushRequest): SendPushResult = throw NotImplementedError()
override fun check(request: PushTokenCheck): CheckPushTokenResult = throw NotImplementedError()
}
)
)