diff --git a/common/kadai-common-test/src/main/java/io/kadai/common/test/security/JaasExtension.java b/common/kadai-common-test/src/main/java/io/kadai/common/test/security/JaasExtension.java index e63793a2d..bacd1cad2 100644 --- a/common/kadai-common-test/src/main/java/io/kadai/common/test/security/JaasExtension.java +++ b/common/kadai-common-test/src/main/java/io/kadai/common/test/security/JaasExtension.java @@ -287,12 +287,16 @@ public Stream provideTestTemplateInvocationContex List accessIds = AnnotationSupport.findRepeatableAnnotations(context.getElement(), WithAccessId.class); Store store = getMethodLevelStore(context); - return accessIds.stream() - .map( - a -> { - store.put(ACCESS_IDS_STORE_KEY, a); - return new JaasExtensionInvocationContext(a); - }); + + // Partial and only temporary workaround for kadai-io/kadai/#555 + if (accessIds.size() > 1) { + return accessIds.stream() + .peek(a -> store.put(ACCESS_IDS_STORE_KEY, a)) + .map(JaasExtensionInvocationContext::new); + } else { + accessIds.forEach(a -> store.put(ACCESS_IDS_STORE_KEY, a)); + return Stream.empty(); + } } private ExtensionContext getParentMethodExtensionContent(ExtensionContext extensionContext) { diff --git a/common/kadai-common-test/src/test/java/io/kadai/common/test/security/JaasExtensionTest.java b/common/kadai-common-test/src/test/java/io/kadai/common/test/security/JaasExtensionTest.java index 1ead171e9..9b48cf734 100644 --- a/common/kadai-common-test/src/test/java/io/kadai/common/test/security/JaasExtensionTest.java +++ b/common/kadai-common-test/src/test/java/io/kadai/common/test/security/JaasExtensionTest.java @@ -26,6 +26,7 @@ import io.kadai.common.internal.security.CurrentUserContextImpl; import io.kadai.common.test.security.JaasExtensionTestExtensions.ShouldThrowJunitException; import io.kadai.common.test.security.JaasExtensionTestExtensions.ShouldThrowParameterResolutionException; +import java.time.DayOfWeek; import java.util.Iterator; import java.util.List; import java.util.function.Supplier; @@ -34,6 +35,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DynamicContainer; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Nested; @@ -43,6 +45,8 @@ import org.junit.jupiter.api.TestInstance.Lifecycle; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; @ExtendWith(JaasExtension.class) class JaasExtensionTest { @@ -217,8 +221,19 @@ List should_SetJaasSubject_When_AnnotationExists_On_TestFactory() { // region JaasExtension#interceptTestTemplateMethod + @ParameterizedTest + @EnumSource(DayOfWeek.class) + @WithAccessId(user = "testtemplate") + void should_SetSaasSubject_When_SingleAnnotationExistsOnParameterizedTest(DayOfWeek dayOfWeek) { + assertThat(dayOfWeek).isNotNull(); + assertThat(CURRENT_USER_CONTEXT.getUserid()).isEqualTo("testtemplate"); + } + @WithAccessId(user = "testtemplate") @TestTemplate + @Disabled("Disabled because of kadai-io/kadai/#555 and it's temporary partial fix which now " + + "does not provide a TestTemplateInvocationContext anymore when exactly one @WithAccessId " + + "is provided, while still setting the CURRENT_USER_CONTEXT.") void should_SetJaasSubject_When_AnnotationExists_On_TestTemplate() { assertThat(CURRENT_USER_CONTEXT.getUserid()).isEqualTo("testtemplate"); } @@ -234,6 +249,9 @@ void should_SetMultipleJaasSubjects_When_MultipleAnnotationsExist_On_TestTemplat @WithAccessId(user = "testtemplate1", groups = "abc", permissions = "perm") @TestTemplate + @Disabled("Disabled because of kadai-io/kadai/#555 and it's temporary partial fix which now " + + "does not provide a TestTemplateInvocationContext anymore when exactly one @WithAccessId " + + "is provided, while still setting the CURRENT_USER_CONTEXT.") void should_InjectCorrectAccessId_When_AnnotationExists_On_TestTemplate(WithAccessId accessId) { assertThat(accessId.user()).isEqualTo("testtemplate1"); assertThat(accessId.groups()).containsExactly("abc"); diff --git a/lib/kadai-test-api/src/main/java/io/kadai/testapi/security/JaasExtension.java b/lib/kadai-test-api/src/main/java/io/kadai/testapi/security/JaasExtension.java index 9bd46875b..ae346ddf9 100644 --- a/lib/kadai-test-api/src/main/java/io/kadai/testapi/security/JaasExtension.java +++ b/lib/kadai-test-api/src/main/java/io/kadai/testapi/security/JaasExtension.java @@ -284,9 +284,16 @@ public Stream provideTestTemplateInvocationContex List accessIds = AnnotationSupport.findRepeatableAnnotations(context.getElement(), WithAccessId.class); Store store = getMethodLevelStore(context); - return accessIds.stream() - .peek(a -> store.put(ACCESS_IDS_STORE_KEY, a)) - .map(JaasExtensionInvocationContext::new); + + // Partial and only temporary workaround for kadai-io/kadai/#555 + if (accessIds.size() > 1) { + return accessIds.stream() + .peek(a -> store.put(ACCESS_IDS_STORE_KEY, a)) + .map(JaasExtensionInvocationContext::new); + } else { + accessIds.forEach(a -> store.put(ACCESS_IDS_STORE_KEY, a)); + return Stream.empty(); + } } private ExtensionContext getParentMethodExtensionContent(ExtensionContext extensionContext) { diff --git a/lib/kadai-test-api/src/test/java/io/kadai/testapi/security/JaasExtensionTest.java b/lib/kadai-test-api/src/test/java/io/kadai/testapi/security/JaasExtensionTest.java index 37402833f..7531d3def 100644 --- a/lib/kadai-test-api/src/test/java/io/kadai/testapi/security/JaasExtensionTest.java +++ b/lib/kadai-test-api/src/test/java/io/kadai/testapi/security/JaasExtensionTest.java @@ -26,6 +26,7 @@ import io.kadai.common.internal.security.CurrentUserContextImpl; import io.kadai.testapi.security.JaasExtensionTestExtensions.ShouldThrowJunitException; import io.kadai.testapi.security.JaasExtensionTestExtensions.ShouldThrowParameterResolutionException; +import java.time.DayOfWeek; import java.util.Iterator; import java.util.List; import java.util.function.Supplier; @@ -34,6 +35,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DynamicContainer; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Nested; @@ -43,6 +45,8 @@ import org.junit.jupiter.api.TestInstance.Lifecycle; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; @ExtendWith(JaasExtension.class) class JaasExtensionTest { @@ -217,8 +221,19 @@ List should_SetJaasSubject_When_AnnotationExists_On_TestFactory() { // region JaasExtension#interceptTestTemplateMethod + @ParameterizedTest + @EnumSource(DayOfWeek.class) + @WithAccessId(user = "testtemplate") + void should_SetSaasSubject_When_SingleAnnotationExistsOnParameterizedTest(DayOfWeek dayOfWeek) { + assertThat(dayOfWeek).isNotNull(); + assertThat(CURRENT_USER_CONTEXT.getUserid()).isEqualTo("testtemplate"); + } + @WithAccessId(user = "testtemplate") @TestTemplate + @Disabled("Disabled because of kadai-io/kadai/#555 and it's temporary partial fix which now " + + "does not provide a TestTemplateInvocationContext anymore when exactly one @WithAccessId " + + "is provided, while still setting the CURRENT_USER_CONTEXT.") void should_SetJaasSubject_When_AnnotationExists_On_TestTemplate() { assertThat(CURRENT_USER_CONTEXT.getUserid()).isEqualTo("testtemplate"); } @@ -232,11 +247,15 @@ void should_SetMultipleJaasSubjects_When_MultipleAnnotationsExist_On_TestTemplat assertThat(CURRENT_USER_CONTEXT.getUserid()).isEqualTo(accessId.user()); } - @WithAccessId(user = "testtemplate1", groups = "abc") + @WithAccessId(user = "testtemplate1", groups = "abc", permissions = "perm") @TestTemplate + @Disabled("Disabled because of kadai-io/kadai/#555 and it's temporary partial fix which now " + + "does not provide a TestTemplateInvocationContext anymore when exactly one @WithAccessId " + + "is provided, while still setting the CURRENT_USER_CONTEXT.") void should_InjectCorrectAccessId_When_AnnotationExists_On_TestTemplate(WithAccessId accessId) { assertThat(accessId.user()).isEqualTo("testtemplate1"); assertThat(accessId.groups()).containsExactly("abc"); + assertThat(accessId.permissions()).containsExactly("perm"); } // endregion