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 d76ec2a27ec0e54b508840948893cce9c0b60222..c1e330c6feaed0963b7de6ccc22cd5a4adc7b4b0 100644 --- a/src/main/kotlin/Application.kt +++ b/src/main/kotlin/Application.kt @@ -8,13 +8,12 @@ fun main(args: Array<String>) { io.ktor.server.netty.EngineMain.main(args) } -fun Application.configureApplication() { - module() +fun Application.module() { + configure() initialize() } -fun Application.module() { - configureHTTP() +fun Application.configure() { 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/application.yaml b/src/main/resources/application.yaml index 90d8e3614bc25df51d35e8de12d8c23e0644a6e5..bd3c34ff7cc46fa7aa2c4666beaf425766210b20 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -1,7 +1,7 @@ ktor: application: - configureApplication: - - betclic.test.ApplicationKt.configureApplication + modules: + - betclic.test.ApplicationKt.module deployment: port: 8080 database: 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 2f7218d8fda66a31de7fd33ce26c2be677cf804b..da696fa9d29b6ff712bd2414c81f7b967bbfb12c 100644 --- a/src/test/kotlin/BaseIntegrationTest.kt +++ b/src/test/kotlin/BaseIntegrationTest.kt @@ -1,28 +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 testApplication = 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..1c5e8e707a814422a8a3dfbff5bbf0904d908b6d --- /dev/null +++ b/src/test/kotlin/TestApplication.kt @@ -0,0 +1,21 @@ +package betclic.test + +import TestDynamoDbConfiguration +import betclic.test.configuration.DynamoDbMigration +import io.ktor.server.application.* +import org.koin.core.context.loadKoinModules + +import org.koin.dsl.module + +fun Application.module() { + configure() + // override Database module with testContainers + loadKoinModules(testDatabaseModule) + initialize() +} + +val testDatabaseModule = module { + single { TestDynamoDbConfiguration.createDynamoDbClient() } + single { TestDynamoDbConfiguration.createDataSource(get()) } + single { DynamoDbMigration() } +} \ 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 1cdb89b9a6c3f4ff00e9edb95f87e6e5a58f505c..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 { DynamoDbMigration() } -} \ No newline at end of file diff --git a/src/test/kotlin/player/PlayerIntegrationTest.kt b/src/test/kotlin/player/PlayerIntegrationTest.kt index 6c224a0106cad53b3af2b26950f6d836d7eb682d..76f34ec59552a22977799763c66686f8b8e009fa 100644 --- a/src/test/kotlin/player/PlayerIntegrationTest.kt +++ b/src/test/kotlin/player/PlayerIntegrationTest.kt @@ -3,7 +3,6 @@ package betclic.test.player import BaseIntegrationTest 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 @@ -13,16 +12,17 @@ import kotlin.test.assertEquals 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 = testApplication.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