TSK-1937: test-api now initializes service providers properly

when multiple WithServiceProvider annotations are defined
This commit is contained in:
Mustapha Zorgati 2022-08-10 02:22:17 +02:00
parent f7b668835c
commit 82400aecb1
2 changed files with 56 additions and 0 deletions

View File

@ -38,6 +38,7 @@ import pro.taskana.testapi.CleanTaskanaContext;
import pro.taskana.testapi.TaskanaEngineConfigurationModifier;
import pro.taskana.testapi.TaskanaEngineProxy;
import pro.taskana.testapi.WithServiceProvider;
import pro.taskana.testapi.WithServiceProvider.WithServiceProviders;
import pro.taskana.testapi.util.ServiceProviderExtractor;
import pro.taskana.workbasket.api.WorkbasketService;
import pro.taskana.workbasket.internal.WorkbasketServiceImpl;
@ -53,6 +54,7 @@ public class TaskanaInitializationExtension implements TestInstancePostProcessor
if (isTopLevelClass(testClass)
|| isAnnotated(testClass, CleanTaskanaContext.class)
|| isAnnotated(testClass, WithServiceProvider.class)
|| isAnnotated(testClass, WithServiceProviders.class)
|| testInstance instanceof TaskanaEngineConfigurationModifier) {
Store store = getClassLevelStore(context);
TaskanaEngineConfiguration taskanaEngineConfiguration =

View File

@ -9,7 +9,9 @@ import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.spi.priority.api.PriorityServiceProvider;
import pro.taskana.spi.priority.internal.PriorityServiceManager;
@TaskanaIntegrationTest
class TaskanaInitializationExtensionTest {
@ -86,6 +88,15 @@ class TaskanaInitializationExtensionTest {
class NestedTestClassWithServiceProvider {
@TaskanaInject TaskanaEngineConfiguration taskanaEngineConfiguration;
@TaskanaInject TaskanaEngine taskanaEngine;
@Test
void should_LoadServiceProviders() throws Exception {
PriorityServiceManager priorityServiceManager =
new TaskanaEngineProxy(taskanaEngine).getEngine().getPriorityServiceManager();
assertThat(priorityServiceManager.isEnabled()).isTrue();
}
@Test
void should_createNewTaskanaInstance_For_NestedTestClassAnnotatedWithCleanTaskanaContext() {
@ -99,4 +110,47 @@ class TaskanaInitializationExtensionTest {
.containsExactlyInAnyOrder("DOMAIN_A", "DOMAIN_B");
}
}
@WithServiceProvider(
serviceProviderInterface = PriorityServiceProvider.class,
serviceProviders =
NestedTestClassWithMultipleServiceProviders.DummyPriorityServiceProvider.class)
@WithServiceProvider(
serviceProviderInterface = PriorityServiceProvider.class,
serviceProviders =
NestedTestClassWithMultipleServiceProviders.DummyPriorityServiceProvider.class)
@Nested
@TestInstance(Lifecycle.PER_CLASS)
class NestedTestClassWithMultipleServiceProviders {
@TaskanaInject TaskanaEngineConfiguration taskanaEngineConfiguration;
@TaskanaInject TaskanaEngine taskanaEngine;
@Test
void should_LoadServiceProviders() throws Exception {
PriorityServiceManager priorityServiceManager =
new TaskanaEngineProxy(taskanaEngine).getEngine().getPriorityServiceManager();
assertThat(priorityServiceManager.isEnabled()).isTrue();
}
@Test
void should_createNewTaskanaInstance_For_NestedTestClassAnnotatedWithCleanTaskanaContext() {
assertThat(taskanaEngineConfiguration)
.isNotSameAs(TaskanaInitializationExtensionTest.this.taskanaEngineConfiguration);
}
@Test
void should_UseDefaultTaskanaEngine_When_NestedClassDoesNotImplementModifier() {
assertThat(taskanaEngineConfiguration.getDomains())
.containsExactlyInAnyOrder("DOMAIN_A", "DOMAIN_B");
}
class DummyPriorityServiceProvider implements PriorityServiceProvider {
@Override
public OptionalInt calculatePriority(TaskSummary taskSummary) {
// implementation not important for the tests
return OptionalInt.empty();
}
}
}
}