Add push message provider mock

This commit is contained in:
Vasili Karaev 2022-11-03 18:12:27 +03:00
parent 723e5a4178
commit 748da05be8
6 changed files with 98 additions and 0 deletions

View File

@ -0,0 +1,13 @@
plugins {
id("kotlin")
id("kotlin-spring")
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.springframework.boot:spring-boot-autoconfigure")
implementation(project(":logger"))
implementation(project(":push-message-provider"))
}

View File

@ -0,0 +1,8 @@
@file:Suppress("unused")
package ru.touchin.push.message.provider.mock
import org.springframework.context.annotation.Import
import ru.touchin.push.message.provider.mock.configurations.PushMessageProviderMockConfiguration
@Import(value = [PushMessageProviderMockConfiguration::class])
annotation class EnablePushMessageProviderMock

View File

@ -0,0 +1,8 @@
package ru.touchin.push.message.provider.mock.configurations
import org.springframework.boot.context.properties.ConfigurationPropertiesScan
import org.springframework.context.annotation.ComponentScan
@ComponentScan("ru.touchin.push.message.provider.mock")
@ConfigurationPropertiesScan(basePackages = ["ru.touchin.push.message.provider.mock.properties"])
class PushMessageProviderMockConfiguration

View File

@ -0,0 +1,57 @@
package ru.touchin.push.message.provider.mock.factories
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.context.annotation.Primary
import org.springframework.stereotype.Service
import ru.touchin.logger.dto.LogData
import ru.touchin.logger.factory.LogBuilderFactory
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.dto.result.SendPushTokenMessageResult
import ru.touchin.push.message.provider.enums.PlatformType
import ru.touchin.push.message.provider.enums.PushMessageProviderType
import ru.touchin.push.message.provider.factories.PushMessageProviderServiceFactory
import ru.touchin.push.message.provider.mock.properties.PushMessageProviderMockProperties
import ru.touchin.push.message.provider.services.PushMessageProviderService
import java.util.*
@Primary
@Service
@ConditionalOnProperty(prefix = "push-message-provider", name = ["mock.enabled"], havingValue = "true")
class PushMessageProviderMockServiceFactoryImpl(
private val logBuilderFactory: LogBuilderFactory<LogData>,
private val pushMessageProviderMockProperties: PushMessageProviderMockProperties,
) : PushMessageProviderServiceFactory {
override fun get(platformType: PlatformType): PushMessageProviderService {
return object : PushMessageProviderService {
override val type: PushMessageProviderType
get() = PushMessageProviderType.FCM
override fun send(request: SendPushRequest): SendPushResult {
val millis = pushMessageProviderMockProperties.sleepFor.toMillis()
logBuilderFactory.create(this::class.java)
.addTags("MOCK_PUSH_SEND")
.setMethod("send")
.addData("sleepForMs" to millis)
.build()
.log()
Thread.sleep(millis)
return SendPushTokenMessageResult(
messageId = UUID.randomUUID().toString(),
)
}
override fun check(request: PushTokenCheck): CheckPushTokenResult {
throw NotImplementedError()
}
}
}
}

View File

@ -0,0 +1,11 @@
package ru.touchin.push.message.provider.mock.properties
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.ConstructorBinding
import java.time.Duration
@ConstructorBinding
@ConfigurationProperties(prefix = "push-message-provider.mock")
data class PushMessageProviderMockProperties(
val sleepFor: Duration,
)

View File

@ -45,6 +45,7 @@ include("validation-spring")
include("version-spring-web")
include("push-message-provider")
include("push-message-provider-fcm")
include("push-message-provider-mock")
include("response-wrapper-spring-web")
include("settings-spring-jpa")
include("security-authorization-server-core")