Skip to content

Commit

Permalink
Refactorings for test base + add task api tests for c7 remote & embedded
Browse files Browse the repository at this point in the history
  • Loading branch information
p-wunderlich committed Apr 30, 2024
1 parent e0bcfdf commit 6aecc60
Show file tree
Hide file tree
Showing 28 changed files with 690 additions and 299 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,9 @@ class InMemSubscriptionRepository : SubscriptionRepository {
}.keys.toList()
}

fun deleteAllTaskSubscriptions() {
subscriptions.clear()
activeSubscribedHandler.clear()
}

}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<relativePath>../../pom.xml</relativePath>
</parent>

<artifactId>process-engine-api-adapter-test</artifactId>
<artifactId>process-engine-api-adapter-testing</artifactId>

<properties>
<h2.version>2.2.224</h2.version>
Expand All @@ -19,14 +19,42 @@
<jgiven.version>1.3.1</jgiven.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<!-- For JGiven Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency>
<groupId>com.tngtech.jgiven</groupId>
<artifactId>jgiven-spring-junit5</artifactId>
<version>${jgiven.version}</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>dev.bpm-crafters.process-engine-api</groupId>
<artifactId>process-engine-api</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.mockk</groupId>
<artifactId>mockk-jvm</artifactId>
Expand All @@ -48,6 +76,12 @@
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package dev.bpmcrafters.processengineapi.test

import com.tngtech.jgiven.Stage
import com.tngtech.jgiven.annotation.ExpectedScenarioState
import com.tngtech.jgiven.annotation.ProvidedScenarioState
import dev.bpmcrafters.processengineapi.process.StartProcessByDefinitionCmd
import dev.bpmcrafters.processengineapi.process.StartProcessByMessageCmd
import dev.bpmcrafters.processengineapi.task.*
import io.mockk.mockk
import io.toolisticon.testing.jgiven.JGivenKotlinStage
import io.toolisticon.testing.jgiven.step
import org.assertj.core.api.Assertions.assertThat

@JGivenKotlinStage
class BaseGivenWhenStage : Stage<BaseGivenWhenStage>() {

@ExpectedScenarioState
lateinit var processTestHelper: ProcessTestHelper

@ProvidedScenarioState
lateinit var instanceId: String

@ProvidedScenarioState
var userTaskId: String? = null

@ProvidedScenarioState
var externalTaskId: String? = null

@ProvidedScenarioState
lateinit var taskSubscription: TaskSubscription

fun `start process by definition`(definitionKey: String) = step {
instanceId = processTestHelper.getStartProcessApi().startProcess(
StartProcessByDefinitionCmd(
definitionKey = definitionKey,
payloadSupplier = { emptyMap() }
)
).get().instanceId
}

fun `start process by definition with payload`(definitionKey: String, singlePayload: Pair<String, Any>) = step {
instanceId = processTestHelper.getStartProcessApi().startProcess(
StartProcessByDefinitionCmd(
definitionKey = definitionKey,
payloadSupplier = { mapOf(singlePayload) }
)
).get().instanceId
}

fun `start process by message`(messageName: String) = step {
instanceId = processTestHelper.getStartProcessApi().startProcess(
StartProcessByMessageCmd(
messageName = messageName,
payloadSupplier = { emptyMap() }
)
).get().instanceId
}

fun `start process by message with payload`(messageName: String, singlePayload: Pair<String, Any>) = step {
instanceId = processTestHelper.getStartProcessApi().startProcess(
StartProcessByMessageCmd(
messageName = messageName,
payloadSupplier = { mapOf(singlePayload) }
)
).get().instanceId
}

fun `a active user task subscription`(taskDescriptionKey: String) = step {
taskSubscription = subscribeTask(TaskType.USER, taskDescriptionKey) { taskInformation, _ -> userTaskId = taskInformation.taskId }
}

fun `a active external task subscription`(taskDescriptionKey: String) = step {
taskSubscription = subscribeTask(TaskType.EXTERNAL, taskDescriptionKey) { taskInformation, _ -> externalTaskId = taskInformation.taskId }
}

fun `complete the user task`() = step {
assertThat(userTaskId).isNotEmpty()

processTestHelper.getUserTaskCompletionApi().completeTask(
CompleteTaskCmd(
taskId = userTaskId!!,
payloadSupplier = { emptyMap() }
)
)
}

fun `complete the external task`() = step {
assertThat(externalTaskId).isNotEmpty()

processTestHelper.getExternalTaskCompletionApi().completeTask(
CompleteTaskCmd(
taskId = externalTaskId!!,
payloadSupplier = { emptyMap() }
)
)
}

fun `unsubscribe user task subscription`() = step { unsubscribeTask() }

fun `unsubscribe external task subscription`() = step { unsubscribeTask() }

private fun subscribeTask(taskType: TaskType, taskDescriptionKey: String, taskHandler: TaskHandler) = processTestHelper.getTaskSubscriptionApi().subscribeForTask(
SubscribeForTaskCmd(
restrictions = emptyMap(),
taskType = taskType,
taskDescriptionKey = taskDescriptionKey,
action = taskHandler,
termination = {} // nothing to do
)
).get()

private fun unsubscribeTask() = processTestHelper.getTaskSubscriptionApi().unsubscribe(
UnsubscribeFromTaskCmd(
taskSubscription
)
)

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package dev.bpmcrafters.processengineapi.test

import com.tngtech.jgiven.Stage
import com.tngtech.jgiven.annotation.ExpectedScenarioState
import io.toolisticon.testing.jgiven.JGivenKotlinStage
import io.toolisticon.testing.jgiven.step
import org.assertj.core.api.Assertions.assertThat
import org.awaitility.Awaitility.await

@JGivenKotlinStage
class BaseThenStage : Stage<BaseThenStage>() {

@ExpectedScenarioState
lateinit var instanceId: String

@ExpectedScenarioState
var userTaskId: String? = null

@ExpectedScenarioState
var externalTaskId: String? = null

@ExpectedScenarioState
lateinit var processTestHelper: ProcessTestHelper

fun `we should have a running process`() = step {
val process = processTestHelper.getProcessInformation(instanceId)
assertThat(process).isNotNull()
}

fun `we should get notified about a new user task`() = step {
processTestHelper.triggerUserTaskDeliveryManually()

await().untilAsserted { assertThat(userTaskId).isNotEmpty() }
}

fun `we should get notified about a new external task`() = step {
processTestHelper.triggerExternalTaskDeliveryManually()

await().untilAsserted { assertThat(externalTaskId).isNotEmpty() }
}

fun `we should not get notified about a new user task`() = step {
processTestHelper.triggerUserTaskDeliveryManually()

await().untilAsserted { assertThat(userTaskId).isNull() }
}

fun `we should not get notified about a new external task`() = step {
processTestHelper.triggerExternalTaskDeliveryManually()

await().untilAsserted { assertThat(externalTaskId).isNull() }
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package dev.bpmcrafters.processengineapi.test

import com.tngtech.jgiven.annotation.ProvidedScenarioState
import com.tngtech.jgiven.junit5.ScenarioTest

abstract class JGivenBaseIntegrationTest(
@ProvidedScenarioState open val processTestHelper: ProcessTestHelper
) : ScenarioTest<BaseGivenWhenStage, BaseGivenWhenStage, BaseThenStage>()
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.bpmcrafters.processengineapi.test

import com.tngtech.jgiven.annotation.ProvidedScenarioState
import com.tngtech.jgiven.integration.spring.junit5.SpringScenarioTest
import com.tngtech.jgiven.junit5.ScenarioTest

abstract class JGivenSpringBaseIntegrationTest(
@ProvidedScenarioState open val processTestHelper: ProcessTestHelper
) : SpringScenarioTest<BaseGivenWhenStage, BaseGivenWhenStage, BaseThenStage>()
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package dev.bpmcrafters.processengineapi.test

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

interface ProcessTestHelper {

fun getStartProcessApi(): StartProcessApi

fun getTaskSubscriptionApi(): TaskSubscriptionApi

fun getUserTaskCompletionApi(): UserTaskCompletionApi

fun getExternalTaskCompletionApi(): ExternalTaskCompletionApi

fun triggerUserTaskDeliveryManually()

fun triggerExternalTaskDeliveryManually()

fun getProcessInformation(instanceId: String): ProcessInformation

fun clearAllSubscriptions()

}
Loading

0 comments on commit 6aecc60

Please sign in to comment.