From 6f1e4cf9e2308e14dba7f3b4e54ea2767d63a1b7 Mon Sep 17 00:00:00 2001 From: Patrick Schalk Date: Thu, 2 May 2024 16:53:58 +0200 Subject: [PATCH] Add Basic C8 (spring) ITests --- .../springboot/AbstractC7RemoteApiITest.kt | 2 +- .../pom.xml | 41 ++++++- .../adapter/c8/AbstractC8ApiITest.kt | 65 +++++++++++ .../adapter/c8/C8ProcessTestHelper.kt | 40 +++++++ .../adapter/c8/C8StartProcessApiITest.kt | 29 +++++ .../adapter/c8/C8TestApplication.kt | 42 +++++++ .../src/test/resources/application-itest.yml | 17 +++ .../test/resources/bpmn/simple-process.bpmn | 106 ++++++++++++++++++ 8 files changed, 338 insertions(+), 4 deletions(-) create mode 100644 engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/AbstractC8ApiITest.kt create mode 100644 engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8ProcessTestHelper.kt create mode 100644 engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8StartProcessApiITest.kt create mode 100644 engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8TestApplication.kt create mode 100644 engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/application-itest.yml create mode 100644 engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/bpmn/simple-process.bpmn diff --git a/engine-adapter/camunda-platform-7-remote-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c7/remote/springboot/AbstractC7RemoteApiITest.kt b/engine-adapter/camunda-platform-7-remote-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c7/remote/springboot/AbstractC7RemoteApiITest.kt index 165602c..4a2c654 100644 --- a/engine-adapter/camunda-platform-7-remote-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c7/remote/springboot/AbstractC7RemoteApiITest.kt +++ b/engine-adapter/camunda-platform-7-remote-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c7/remote/springboot/AbstractC7RemoteApiITest.kt @@ -40,7 +40,7 @@ abstract class AbstractC7RemoteApiITest(processTestHelperImpl: ProcessTestHelper fun setUp() { repositoryService.createDeployment() .name("Simple Process") - .addClasspathResource("bpmn/simple-process.bpmn") + .addClasspathResource(BPMN) .deploy() } diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/pom.xml b/engine-adapter/camunda-platform-8-spring-boot-starter/pom.xml index 3fa23d4..79dc679 100644 --- a/engine-adapter/camunda-platform-8-spring-boot-starter/pom.xml +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/pom.xml @@ -12,9 +12,11 @@ process-engine-api-adapter-camunda-platform-c8-spring-boot-starter 3.1.8 - 8.4.4 + 8.4.1 8.4.0.3 8.4.1 + 8.4.1 + 8.4.1 @@ -51,7 +53,7 @@ io.camunda.spring spring-boot-starter-camunda - 8.4.1 + ${spring-zeebe.version} provided @@ -78,7 +80,40 @@ provided - + + + io.camunda.spring + java-common + 8.4.1 + test + + + io.camunda + spring-zeebe-test-testcontainer + ${spring-zeebe.version} + test + + + dev.bpm-crafters.process-engine-api + process-engine-api-adapter-testing + ${project.version} + test + + + org.springframework.boot + spring-boot-starter-test + + + org.testcontainers + junit-jupiter + test + + + com.tngtech.jgiven + jgiven-spring-junit5 + 1.3.1 + test + diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/AbstractC8ApiITest.kt b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/AbstractC8ApiITest.kt new file mode 100644 index 0000000..0f948a4 --- /dev/null +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/AbstractC8ApiITest.kt @@ -0,0 +1,65 @@ +package dev.bpmcrafters.processengineapi.adapter.c8 + +import dev.bpmcrafters.processengineapi.test.JGivenSpringBaseIntegrationTest +import dev.bpmcrafters.processengineapi.test.ProcessTestHelper +import io.camunda.tasklist.CamundaTaskListClient +import io.camunda.zeebe.client.ZeebeClient +import io.camunda.zeebe.client.api.response.DeploymentEvent +import io.camunda.zeebe.process.test.assertions.BpmnAssert.assertThat +import io.camunda.zeebe.spring.test.ZeebeSpringTest +import io.mockk.mockk +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.mock.mockito.MockBean +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Primary +import org.springframework.test.annotation.DirtiesContext +import org.springframework.test.context.ActiveProfiles +import org.testcontainers.junit.jupiter.Testcontainers + + +@SpringBootTest( + classes = [C8TestApplication::class], + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT +) +@ZeebeSpringTest +@ActiveProfiles("itest") +@DirtiesContext +@Testcontainers +abstract class AbstractC8ApiITest(processTestHelperImpl: ProcessTestHelper) : JGivenSpringBaseIntegrationTest(processTestHelperImpl) { + + companion object { + const val KEY = "simple-process" + const val START_MESSAGE = "startMessage" + const val BPMN = "bpmn/$KEY.bpmn" + + const val USER_TASK = "user-perform-task" + const val EXTERNAL_TASK = "execute-action-external" + } + + @Autowired + lateinit var zeebe: ZeebeClient + + /** + * In tests we have no task list so also no need for the real client + */ + @MockBean + lateinit var camundaTaskListClient: CamundaTaskListClient + + @BeforeEach + fun setUp() { + val event: DeploymentEvent = zeebe.newDeployResourceCommand() + .addResourceFromClasspath(BPMN) + .send() + .join() + + assertThat(event) + } + + @AfterEach + fun tearDown() { + processTestHelper.clearAllSubscriptions() + } +} diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8ProcessTestHelper.kt b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8ProcessTestHelper.kt new file mode 100644 index 0000000..dc4db51 --- /dev/null +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8ProcessTestHelper.kt @@ -0,0 +1,40 @@ +package dev.bpmcrafters.processengineapi.adapter.c8 + +import dev.bpmcrafters.processengineapi.adapter.c8.task.delivery.PullUserTaskDelivery +import dev.bpmcrafters.processengineapi.adapter.c8.task.delivery.SubscribingRefreshingUserTaskDelivery +import dev.bpmcrafters.processengineapi.adapter.c8.task.delivery.SubscribingServiceTaskDelivery +import dev.bpmcrafters.processengineapi.adapter.commons.task.InMemSubscriptionRepository +import dev.bpmcrafters.processengineapi.adapter.commons.task.SubscriptionRepository +import dev.bpmcrafters.processengineapi.process.ProcessInformation +import dev.bpmcrafters.processengineapi.process.StartProcessApi +import dev.bpmcrafters.processengineapi.task.ExternalTaskCompletionApi +import dev.bpmcrafters.processengineapi.task.TaskSubscriptionApi +import dev.bpmcrafters.processengineapi.task.UserTaskCompletionApi +import dev.bpmcrafters.processengineapi.test.ProcessTestHelper + +class C8ProcessTestHelper( + private val startProcessApi: StartProcessApi, + private val userTaskDelivery: SubscribingRefreshingUserTaskDelivery, + private val subscribingServiceTaskDelivery: SubscribingServiceTaskDelivery, + private val taskSubscriptionApi: TaskSubscriptionApi, + private val userTaskCompletionApi: UserTaskCompletionApi, + private val externalTaskCompletionApi: ExternalTaskCompletionApi, + private val subscriptionRepository: SubscriptionRepository +) : ProcessTestHelper { + + override fun getStartProcessApi(): StartProcessApi = startProcessApi + override fun getTaskSubscriptionApi(): TaskSubscriptionApi = taskSubscriptionApi + override fun getUserTaskCompletionApi(): UserTaskCompletionApi = userTaskCompletionApi + override fun getExternalTaskCompletionApi(): ExternalTaskCompletionApi = externalTaskCompletionApi + + override fun triggerUserTaskDeliveryManually() = userTaskDelivery.refresh() + override fun triggerExternalTaskDeliveryManually() = subscribingServiceTaskDelivery.subscribe() + + override fun getProcessInformation(instanceId: String): ProcessInformation = ProcessInformation( + instanceId = "fixme", + meta = emptyMap() + ) + + override fun clearAllSubscriptions() = (subscriptionRepository as InMemSubscriptionRepository).deleteAllTaskSubscriptions() + +} diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8StartProcessApiITest.kt b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8StartProcessApiITest.kt new file mode 100644 index 0000000..a94bd34 --- /dev/null +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8StartProcessApiITest.kt @@ -0,0 +1,29 @@ +package dev.bpmcrafters.processengineapi.adapter.c8 + +import dev.bpmcrafters.processengineapi.test.ProcessTestHelper +import io.toolisticon.testing.jgiven.THEN +import io.toolisticon.testing.jgiven.WHEN +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired + +class C8StartProcessApiITest(@Autowired processTestHelperImpl: ProcessTestHelper) : AbstractC8ApiITest(processTestHelperImpl) { + + @Test + fun `should start process by definition without payload`() { + WHEN + .`start process by definition`(KEY) + + THEN + .`we should have a running process`() + } + + @Test + fun `should start process by definition with payload`() { + WHEN + .`start process by definition with payload`(KEY, "key" to "value") + + THEN + .`we should have a running process`() + } + +} diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8TestApplication.kt b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8TestApplication.kt new file mode 100644 index 0000000..33f3fbe --- /dev/null +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/kotlin/dev/bpmcrafters/processengineapi/adapter/c8/C8TestApplication.kt @@ -0,0 +1,42 @@ +package dev.bpmcrafters.processengineapi.adapter.c8 + +import com.tngtech.jgiven.integration.spring.EnableJGiven +import dev.bpmcrafters.processengineapi.adapter.c8.task.delivery.SubscribingRefreshingUserTaskDelivery +import dev.bpmcrafters.processengineapi.adapter.c8.task.delivery.SubscribingServiceTaskDelivery +import dev.bpmcrafters.processengineapi.adapter.commons.task.SubscriptionRepository +import dev.bpmcrafters.processengineapi.process.StartProcessApi +import dev.bpmcrafters.processengineapi.task.ExternalTaskCompletionApi +import dev.bpmcrafters.processengineapi.task.TaskSubscriptionApi +import dev.bpmcrafters.processengineapi.task.UserTaskCompletionApi +import dev.bpmcrafters.processengineapi.test.ProcessTestHelper +import io.camunda.tasklist.CamundaTaskListClient +import io.mockk.mockk +import org.springframework.boot.autoconfigure.SpringBootApplication +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Primary + + +@EnableJGiven +@SpringBootApplication +class C8TestApplication { + + @Bean + fun processTestHelper( + startProcessApi: StartProcessApi, + taskSubscriptionApi: TaskSubscriptionApi, + userTaskDelivery: SubscribingRefreshingUserTaskDelivery, + subscribingServiceTaskDelivery: SubscribingServiceTaskDelivery, + userTaskCompletionApi: UserTaskCompletionApi, + externalTaskCompletionApi: ExternalTaskCompletionApi, + subscriptionRepository: SubscriptionRepository, + ): ProcessTestHelper = C8ProcessTestHelper( + startProcessApi = startProcessApi, + taskSubscriptionApi = taskSubscriptionApi, + userTaskDelivery = userTaskDelivery, + subscribingServiceTaskDelivery = subscribingServiceTaskDelivery, + userTaskCompletionApi = userTaskCompletionApi, + externalTaskCompletionApi = externalTaskCompletionApi, + subscriptionRepository = subscriptionRepository + ) + +} diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/application-itest.yml b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/application-itest.yml new file mode 100644 index 0000000..cf9d64a --- /dev/null +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/application-itest.yml @@ -0,0 +1,17 @@ +spring: + application: + name: ITest + +dev: + bpm-crafters: + process-api: + adapter: + c8: + user-tasks: + delivery-strategy: subscription_refreshing + fixed-rate-schedule-rate: 5000 # every 5 seconds + tasklist-url: localhost + fixed-rate-refresh-rate: 5000 # every 5 seconds + service-tasks: + delivery-strategy: subscription + worker-id: execute-action-external diff --git a/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/bpmn/simple-process.bpmn b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/bpmn/simple-process.bpmn new file mode 100644 index 0000000..290bac3 --- /dev/null +++ b/engine-adapter/camunda-platform-8-spring-boot-starter/src/test/resources/bpmn/simple-process.bpmn @@ -0,0 +1,106 @@ + + + + + Flow_14ng1om + + + + + + + Flow_0zaxz2a + Flow_1cwg293 + + + + + + + Flow_0kv6x7n + Flow_08tjrzz + + + + Flow_0ljvt4k + + + + Flow_14ng1om + Flow_0zaxz2a + Flow_0kv6x7n + + + + + Flow_1cwg293 + Flow_08tjrzz + Flow_0ljvt4k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +