Compare commits
2 Commits
master
...
feature/pu
| Author | SHA1 | Date |
|---|---|---|
|
|
02b7fd6599 | |
|
|
b15ea97aac |
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package ru.touchin.push.message.provider.dto.request
|
||||
|
||||
data class PushTokenCheck(
|
||||
val pushToken: String
|
||||
)
|
||||
|
|
@ -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
|
||||
)
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
}
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue