diff --git a/docker/db/docker/dynamodb/shared-local-instance.db b/docker/db/docker/dynamodb/shared-local-instance.db new file mode 100644 index 0000000000000000000000000000000000000000..d26d270ffd2ecfc6d03c96bea43216035c52cac1 Binary files /dev/null and b/docker/db/docker/dynamodb/shared-local-instance.db differ diff --git a/src/main/kotlin/Application.kt b/src/main/kotlin/Application.kt index cca5f445e2e2230e918f5278c039653890e1c809..024521d5c28f2bb85e1ec1f9f1bcc72669c7ae6c 100644 --- a/src/main/kotlin/Application.kt +++ b/src/main/kotlin/Application.kt @@ -1,6 +1,5 @@ package betclic.test -import betclic.test.configuration.configureHTTP import betclic.test.configuration.configureKoin import betclic.test.configuration.configureRouting import betclic.test.configuration.configureSerialization @@ -18,7 +17,6 @@ fun Application.module() { } fun Application.configuration() { - configureHTTP() configureKoin() configureSerialization() configureRouting() diff --git a/src/main/kotlin/configuration/ApiDocumentationConfiguration.kt b/src/main/kotlin/configuration/ApiDocumentationConfiguration.kt deleted file mode 100644 index ed88a96295cf8183dc966eccda3cbfe17fd74636..0000000000000000000000000000000000000000 --- a/src/main/kotlin/configuration/ApiDocumentationConfiguration.kt +++ /dev/null @@ -1,11 +0,0 @@ -package betclic.test.configuration - -import io.ktor.server.application.* -import io.ktor.server.plugins.openapi.* -import io.ktor.server.routing.* - -fun Application.configureHTTP() { - routing { - openAPI(path = "openapi") - } -} diff --git a/src/main/kotlin/configuration/DynamoDbConfiguration.kt b/src/main/kotlin/configuration/DynamoDbConfiguration.kt index 59107e39056b385b36b9d69fd56982b48834e33c..2ebb6fbdda4c98e4aee823d3627e52bc2ac0afd5 100644 --- a/src/main/kotlin/configuration/DynamoDbConfiguration.kt +++ b/src/main/kotlin/configuration/DynamoDbConfiguration.kt @@ -4,12 +4,21 @@ import org.slf4j.LoggerFactory import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient import java.net.URI +import software.amazon.awssdk.regions.Region +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider class DynamoDbConfiguration { private val logger = LoggerFactory.getLogger(DynamoDbConfiguration::class.java) fun createDynamoDbClient(): DynamoDbAsyncClient { - return DynamoDbAsyncClient.builder().endpointOverride(URI("http://localhost:8000")).build() + return DynamoDbAsyncClient.builder() + .endpointOverride(URI("http://localhost:8000")) + .region(Region.US_EAST_1) + .credentialsProvider( + StaticCredentialsProvider.create(AwsBasicCredentials.create("dummy", "dummy")) + ) + .build() } fun createDataSource(dynamoDbAsyncClient: DynamoDbAsyncClient): DynamoDbEnhancedAsyncClient { diff --git a/src/main/resources/openapi/documentation.yaml b/src/main/resources/openapi/documentation.yaml deleted file mode 100644 index 6f48d7b423e6b4e3f5e6075098f1c9280fab739c..0000000000000000000000000000000000000000 --- a/src/main/resources/openapi/documentation.yaml +++ /dev/null @@ -1,23 +0,0 @@ -openapi: "3.0.3" -info: - title: "Application API" - description: "Application API" - version: "1.0.0" -servers: - - url: "http://0.0.0.0:8080" -paths: - /: - get: - description: "Hello World!" - responses: - "200": - description: "OK" - content: - text/plain: - schema: - type: "string" - examples: - Example#1: - value: "Hello World!" -components: - schemas: { } \ No newline at end of file diff --git a/src/test/kotlin/BaseIntegrationTest.kt b/src/test/kotlin/BaseIntegrationTest.kt index 693ffe014a67441cf44c2e4bf1da88fe628d26a1..da696fa9d29b6ff712bd2414c81f7b967bbfb12c 100644 --- a/src/test/kotlin/BaseIntegrationTest.kt +++ b/src/test/kotlin/BaseIntegrationTest.kt @@ -1,29 +1,12 @@ -import betclic.test.configuration.testDatabaseModule -import betclic.test.initialize -import betclic.test.module +import io.ktor.server.config.* import io.ktor.server.testing.* -import org.koin.core.context.loadKoinModules import org.koin.test.KoinTest -import kotlin.test.AfterTest -import kotlin.test.BeforeTest abstract class BaseIntegrationTest : KoinTest { - - protected val application = TestApplication { - application { - module() - // override Database module with testContainers - loadKoinModules(testDatabaseModule) - initialize() + fun iTest(test: suspend ApplicationTestBuilder.() -> Unit) = testApplication { + environment { + config = ApplicationConfig("application-test.yaml") } + test() } - - @BeforeTest - fun setup() { - } - - @AfterTest - fun tearDown() { - TestDynamoDbConfiguration.localStack.stop() - } -} +} \ No newline at end of file diff --git a/src/test/kotlin/TestApplication.kt b/src/test/kotlin/TestApplication.kt new file mode 100644 index 0000000000000000000000000000000000000000..038050713d41b338e8a716e6d92354de2832cb62 --- /dev/null +++ b/src/test/kotlin/TestApplication.kt @@ -0,0 +1,19 @@ +import betclic.test.configuration +import betclic.test.configuration.DynamoDbMigrationService +import betclic.test.initialize +import io.ktor.server.application.* +import org.koin.core.context.loadKoinModules +import org.koin.dsl.module + +fun Application.module() { + configuration() + // override Database module with testContainers + loadKoinModules(testDatabaseModule) + initialize() +} + +val testDatabaseModule = module { + single { TestDynamoDbConfiguration.createDynamoDbClient() } + single { TestDynamoDbConfiguration.createDataSource(get()) } + single { DynamoDbMigrationService() } +} \ No newline at end of file diff --git a/src/test/kotlin/TestInjectionConfiguration.kt b/src/test/kotlin/TestInjectionConfiguration.kt deleted file mode 100644 index 94015583afb05a5cf74fae6a84e8d3569a7269bc..0000000000000000000000000000000000000000 --- a/src/test/kotlin/TestInjectionConfiguration.kt +++ /dev/null @@ -1,10 +0,0 @@ -package betclic.test.configuration - -import TestDynamoDbConfiguration -import org.koin.dsl.module - -val testDatabaseModule = module { - single { TestDynamoDbConfiguration.createDynamoDbClient() } - single { TestDynamoDbConfiguration.createDataSource(get()) } - single { DynamoDbMigrationService() } -} \ No newline at end of file diff --git a/src/test/kotlin/player/PlayerIntegrationTest.kt b/src/test/kotlin/player/PlayerIntegrationTest.kt index 1fa6f2ab2231ac93d41dfb1be97fb7f7e0e253a8..ea7d9bb744ab68501fcf43beefcf40838b417159 100644 --- a/src/test/kotlin/player/PlayerIntegrationTest.kt +++ b/src/test/kotlin/player/PlayerIntegrationTest.kt @@ -4,7 +4,6 @@ import BaseIntegrationTest import betclic.test.player.PlayerRepository import io.ktor.client.request.* import io.ktor.http.* -import io.ktor.server.testing.* import org.assertj.core.api.Assertions.assertThat import org.junit.Test import org.koin.test.inject @@ -15,16 +14,16 @@ private const val PLAYER_NAME = "Clement" class PlayerIntegrationTest : BaseIntegrationTest() { - private val playerRepository: PlayerRepository by inject() - @Test - fun `When calling player creation, a player should be saved in DB`() = testApplication { - val response = application.client.post("/players") { + fun `When calling player creation, a player should be saved in DB`() = iTest { + val response = client.post("/players") { header(HttpHeaders.ContentType, ContentType.Text.Plain) setBody(PLAYER_NAME) } assertEquals(HttpStatusCode.Created, response.status) + + val playerRepository: PlayerRepository by inject() val players = playerRepository.findAll() assertThat(players).hasSize(1) assertThat(players.first()).extracting("pseudo", "pointsNumber") diff --git a/src/test/resources/application-test.yaml b/src/test/resources/application-test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2e745a4a2053187e0d989767ef16b3b8c977433a --- /dev/null +++ b/src/test/resources/application-test.yaml @@ -0,0 +1,8 @@ +ktor: + application: + modules: + - betclic.test.TestApplicationKt.module + deployment: + port: 8081 + database: + dynamodbUrl: "dynamic-test-url" \ No newline at end of file