From e19f74f6d67e48089e0baf2bddd00e9775c33674 Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Fri, 10 May 2024 11:18:59 +0200 Subject: [PATCH 1/2] chore: upgrade to spring boot 2.6.X --- pom.xml | 77 +++++++-- .../controller/CustomSwaggerUIController.java | 18 --- .../config/KeycloakConfig.java | 7 + .../config/SecurityConfig.java | 22 ++- .../config/SpringFoxConfig.java | 136 ---------------- .../filter/StatelessCsrfFilter.java | 4 +- .../resources/application-testing.properties | 9 +- src/main/resources/application.properties | 4 +- .../ConsultingTypeAdminControllerIT.java | 5 +- ...sultingTypePaginationLinksBuilderTest.java | 2 +- .../api/admin/hallink/RootDTOBuilderTest.java | 2 +- .../service/ConsultingTypeAdminServiceIT.java | 5 +- .../ConsultingTypeGroupRepositoryIT.java | 7 +- ...tingTypeGroupRespositoryTenantAwareIT.java | 5 +- .../ConsultingTypeLoaderTest.java | 14 +- .../ConsultingTypeMongoRespositoryIT.java | 9 +- ...tingTypeMongoTenantAwareRespositoryIT.java | 9 +- .../ConsultingTypeRespositoryIT.java | 7 +- .../ConsultingTypeValidatorTest.java | 12 +- .../ConsultingTypeControllerIT.java | 87 +++++++--- .../mapper/BasicConsultingTypeMapperTest.java | 2 +- .../api/mapper/ConsultingTypeMapperTest.java | 2 +- .../ExtendedConsultingTypeMapperTest.java | 2 +- .../mapper/FullConsultingTypeMapperTest.java | 2 +- .../group/ConsultingTypeGroupMapperTest.java | 2 +- ...ConsultingTypeGroupResponseMapperTest.java | 2 +- .../api/repository/TopicRepositoryIT.java | 3 - .../TopicRepositoryTenantAwareIT.java | 3 - .../ConsultingTypeGroupServiceTest.java | 8 +- .../service/ConsultingTypeServiceTest.java | 149 ------------------ .../api/service/LogServiceTest.java | 12 +- .../api/service/TopicServiceIT.java | 3 - .../service/TopicServiceTenantAwareIT.java | 3 - .../CustomResponseErrorHandlerTest.java | 4 +- .../filter/StatelessCsrfFilterTest.java | 12 +- 35 files changed, 210 insertions(+), 440 deletions(-) delete mode 100644 src/main/java/de/caritas/cob/consultingtypeservice/api/controller/CustomSwaggerUIController.java delete mode 100644 src/main/java/de/caritas/cob/consultingtypeservice/config/SpringFoxConfig.java delete mode 100644 src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeServiceTest.java diff --git a/pom.xml b/pom.xml index 8b8a8b7b..3ec33e34 100644 --- a/pom.xml +++ b/pom.xml @@ -16,12 +16,12 @@ org.springframework.boot spring-boot-starter-parent - 2.5.14 + 2.6.15 - UTF-8 + UTF-8 UTF-8 11 @@ -50,7 +50,7 @@ 6.1.6.Final 5.5.7 2.7.5 - 2.5.14 + 2.6.15 3.3.5 2.10.9.2 @@ -70,6 +70,10 @@ org.springframework.boot spring-boot-starter-security + + org.springframework.boot + spring-boot-starter-validation + org.springframework.boot spring-boot-starter-web @@ -116,20 +120,23 @@ ${jackson-databind-nullable.version} + - io.springfox - springfox-swagger2 - ${springfox-swagger2.version} + javax.validation + validation-api + - io.springfox - springfox-bean-validators - ${springfox-bean-validators.version} + io.swagger.core.v3 + swagger-annotations + 2.2.15 + + - io.springfox - springfox-swagger-ui - ${springfox-swagger-ui.version} + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.4.0 @@ -146,6 +153,12 @@ ${commons-lang3.version} + + commons-io + commons-io + 2.8.0 + + com.github.jknack handlebars @@ -206,6 +219,12 @@ org.powermock test ${powermock-module-junit4.version} + + + junit + junit + + powermock-api-mockito2 @@ -216,8 +235,20 @@ de.flapdoodle.embed de.flapdoodle.embed.mongo + 4.13.0 test + + de.flapdoodle.embed + de.flapdoodle.embed.mongo.spring26x + 4.13.0 + + + + org.apache.commons + commons-compress + 1.25.0 + @@ -320,6 +351,11 @@ h2 test + + junit + junit + test + @@ -606,6 +642,23 @@ + + org.openrewrite.maven + rewrite-maven-plugin + 5.30.0 + + + org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_6 + + + + + org.openrewrite.recipe + rewrite-spring + 5.9.0 + + + diff --git a/src/main/java/de/caritas/cob/consultingtypeservice/api/controller/CustomSwaggerUIController.java b/src/main/java/de/caritas/cob/consultingtypeservice/api/controller/CustomSwaggerUIController.java deleted file mode 100644 index 3e5e9498..00000000 --- a/src/main/java/de/caritas/cob/consultingtypeservice/api/controller/CustomSwaggerUIController.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.caritas.cob.consultingtypeservice.api.controller; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import springfox.documentation.annotations.ApiIgnore; - -@Controller -@ApiIgnore -public class CustomSwaggerUIController { - @Value("${springfox.docuPath}") - private String docuPath; - - @RequestMapping(value = "${springfox.docuPath}") - public String index() { - return "redirect:" + docuPath + "/swagger-ui.html"; - } -} diff --git a/src/main/java/de/caritas/cob/consultingtypeservice/config/KeycloakConfig.java b/src/main/java/de/caritas/cob/consultingtypeservice/config/KeycloakConfig.java index b089f0b3..535a8a75 100644 --- a/src/main/java/de/caritas/cob/consultingtypeservice/config/KeycloakConfig.java +++ b/src/main/java/de/caritas/cob/consultingtypeservice/config/KeycloakConfig.java @@ -10,6 +10,8 @@ import javax.validation.constraints.NotNull; import lombok.Data; import org.hibernate.validator.constraints.URL; +import org.keycloak.adapters.KeycloakConfigResolver; +import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -64,6 +66,11 @@ public AuthenticatedUser authenticatedUser(HttpServletRequest request) { return authenticatedUser; } + @Bean + public KeycloakConfigResolver keycloakConfigResolver() { + return new KeycloakSpringBootConfigResolver(); + } + @URL private String authServerUrl; @NotBlank private String realm; diff --git a/src/main/java/de/caritas/cob/consultingtypeservice/config/SecurityConfig.java b/src/main/java/de/caritas/cob/consultingtypeservice/config/SecurityConfig.java index c8cae8cd..686deb7c 100644 --- a/src/main/java/de/caritas/cob/consultingtypeservice/config/SecurityConfig.java +++ b/src/main/java/de/caritas/cob/consultingtypeservice/config/SecurityConfig.java @@ -4,13 +4,10 @@ import de.caritas.cob.consultingtypeservice.filter.HttpTenantFilter; import de.caritas.cob.consultingtypeservice.filter.StatelessCsrfFilter; import javax.annotation.Nullable; -import org.keycloak.adapters.KeycloakConfigResolver; -import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; @@ -42,6 +39,20 @@ public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { @Autowired(required = false) private @Nullable HttpTenantFilter tenantFilter; + public static final String[] WHITE_LIST = + new String[] { + "/consultingtypes/docs", + "/consultingtypes/docs/**", + "/v2/api-docs", + "/configuration/ui", + "/swagger-resources/**", + "/configuration/security", + "/swagger-ui.html", + "/webjars/**", + "/actuator/health", + "/actuator/health/**" + }; + /** Configure spring security filter chain */ @Override protected void configure(final HttpSecurity http) throws Exception { @@ -113,11 +124,6 @@ private HttpSecurity enableTenantFilterIfMultitenancyEnabled(HttpSecurity httpSe return httpSecurity; } - @Bean - public KeycloakConfigResolver keycloakConfigResolver() { - return new KeycloakSpringBootConfigResolver(); - } - @Override protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { return new NullAuthenticatedSessionStrategy(); diff --git a/src/main/java/de/caritas/cob/consultingtypeservice/config/SpringFoxConfig.java b/src/main/java/de/caritas/cob/consultingtypeservice/config/SpringFoxConfig.java deleted file mode 100644 index da68f49e..00000000 --- a/src/main/java/de/caritas/cob/consultingtypeservice/config/SpringFoxConfig.java +++ /dev/null @@ -1,136 +0,0 @@ -package de.caritas.cob.consultingtypeservice.config; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.hateoas.client.LinkDiscoverer; -import org.springframework.hateoas.client.LinkDiscoverers; -import org.springframework.hateoas.mediatype.collectionjson.CollectionJsonLinkDiscoverer; -import org.springframework.plugin.core.SimplePluginRegistry; -import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Contact; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -/** Provides the SpringFox (API documentation generation) configuration. */ -@Configuration -@EnableSwagger2 -@Import(BeanValidatorPluginsConfiguration.class) -public class SpringFoxConfig { - - @Value("${springfox.docuTitle}") - private String docuTitle; - - @Value("${springfox.docuDescription}") - private String docuDescription; - - @Value("${springfox.docuVersion}") - private String docuVersion; - - @Value("${springfox.docuTermsUrl}") - private String docuTermsUrl; - - @Value("${springfox.docuContactName}") - private String docuContactName; - - @Value("${springfox.docuContactUrl}") - private String docuContactUrl; - - @Value("${springfox.docuContactEmail}") - private String docuContactEmail; - - @Value("${springfox.docuLicense}") - private String docuLicense; - - @Value("${springfox.docuLicenseUrl}") - private String docuLicenseUrl; - - // White list for path patterns that should be white listed so that swagger UI can be accessed - // without authorization - public static final String[] WHITE_LIST = - new String[] { - "/consultingtypes/docs", - "/consultingtypes/docs/**", - "/v2/api-docs", - "/configuration/ui", - "/swagger-resources/**", - "/configuration/security", - "/swagger-ui.html", - "/webjars/**", - "/actuator/health", - "/actuator/health/**" - }; - - @Bean - public Docket apiDocket() { - return new Docket(DocumentationType.SWAGGER_2) - .select() - .apis(RequestHandlerSelectors.basePackage("de.caritas.cob.consultingtypeservice.api")) - .build() - .consumes(getContentTypes()) - .produces(getContentTypes()) - .apiInfo(getApiInfo()) - .useDefaultResponseMessages(false) - .protocols(protocols()); - } - - /** - * Returns the API protocols (for documentation). - * - * @return the supported protocols - */ - private Set protocols() { - Set protocols = new HashSet<>(); - protocols.add("https"); - return protocols; - } - - /** - * Returns all content types which should be consumed/produced. - * - * @return the supported content types - */ - private Set getContentTypes() { - Set contentTypes = new HashSet<>(); - contentTypes.add("application/json"); - return contentTypes; - } - - /** - * Returns the API information (defined in application.properties). - * - * @return api information - */ - private ApiInfo getApiInfo() { - return new ApiInfo( - docuTitle, - docuDescription, - docuVersion, - docuTermsUrl, - new Contact(docuContactName, docuContactUrl, docuContactEmail), - docuLicense, - docuLicenseUrl, - Collections.emptyList()); - } - - /** - * Provides {@link LinkDiscoverers} instance for hateoas configuration. - * - * @return {@link LinkDiscoverers} instance - */ - @Bean - public LinkDiscoverers discoverers() { - List plugins = new ArrayList<>(); - plugins.add(new CollectionJsonLinkDiscoverer()); - return new LinkDiscoverers(SimplePluginRegistry.create(plugins)); - } -} diff --git a/src/main/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilter.java b/src/main/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilter.java index 1d3e2e06..7a50fd56 100644 --- a/src/main/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilter.java +++ b/src/main/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilter.java @@ -3,7 +3,7 @@ import static java.util.Objects.isNull; import static java.util.Objects.nonNull; -import de.caritas.cob.consultingtypeservice.config.SpringFoxConfig; +import de.caritas.cob.consultingtypeservice.config.SecurityConfig; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -73,7 +73,7 @@ public static final class DefaultRequiresCsrfMatcher implements RequestMatcher { public boolean matches(HttpServletRequest request) { // Allow specific whitelist items to disable CSRF protection for Swagger UI documentation - List csrfWhitelist = new ArrayList<>(Arrays.asList(SpringFoxConfig.WHITE_LIST)); + List csrfWhitelist = new ArrayList<>(Arrays.asList(SecurityConfig.WHITE_LIST)); csrfWhitelist.add("/topic"); if (csrfWhitelist.parallelStream() .anyMatch(request.getRequestURI().toLowerCase()::contains)) { diff --git a/src/main/resources/application-testing.properties b/src/main/resources/application-testing.properties index a7b0ca3a..d20ea38a 100644 --- a/src/main/resources/application-testing.properties +++ b/src/main/resources/application-testing.properties @@ -18,13 +18,16 @@ spring.liquibase.enabled=false spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect -spring.datasource.sql-script-encoding=UTF-8 +spring.sql.init.encoding=UTF-8 spring.jpa.open-in-view=false -spring.datasource.schema=classpath*:database/TopicDatabase.sql +spring.sql.init.schema-locations=classpath*:database/TopicDatabase.sql keycloak.auth-server-url=https://www.google.com keycloak.realm=realm keycloak.bearer-only=true keycloak.resource=user-service keycloak.principal-attribute=preferred_username -keycloak.cors=true \ No newline at end of file +keycloak.cors=true +spring.mongodb.embedded.version=5.0.6 +spring.data.mongodb.uri=mongodb://mongodb:27017/consulting_types?retryWrites=false +de.flapdoodle.mongodb.embedded.version=5.0.6 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d75a0ba2..02f3a2a6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,7 +13,7 @@ spring.jpa.properties.hibernate.ejb.interceptor=de.caritas.cob.consultingtypeser # General app settings server.port=8080 -spring.mvc.locale=de_DE +spring.web.locale=de_DE spring.jackson.time-zone=Europe/Berlin spring.mustache.enable=false spring.mustache.cache=false @@ -70,4 +70,4 @@ setting.main.tenant.subdomain.for.single.domain.multitenancy=app management.endpoint.health.enabled=true management.endpoint.health.show-details=never management.endpoints.web.exposure.include=health -management.health.probes.enabled=true \ No newline at end of file +management.endpoint.health.probes.enabled=true \ No newline at end of file diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/controller/ConsultingTypeAdminControllerIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/controller/ConsultingTypeAdminControllerIT.java index 8a5d438f..027a6f59 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/controller/ConsultingTypeAdminControllerIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/controller/ConsultingTypeAdminControllerIT.java @@ -12,14 +12,11 @@ import de.caritas.cob.consultingtypeservice.api.model.ExtendedConsultingTypeResponseDTO; import de.caritas.cob.consultingtypeservice.api.model.PaginationLinks; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest(classes = ConsultingTypeServiceApplication.class) @TestPropertySource(properties = "spring.profiles.active=testing") public class ConsultingTypeAdminControllerIT { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/ConsultingTypePaginationLinksBuilderTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/ConsultingTypePaginationLinksBuilderTest.java index e1525257..89e497a9 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/ConsultingTypePaginationLinksBuilderTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/ConsultingTypePaginationLinksBuilderTest.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.stream.Collectors; import org.jeasy.random.EasyRandom; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.beans.support.PagedListHolder; public class ConsultingTypePaginationLinksBuilderTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/RootDTOBuilderTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/RootDTOBuilderTest.java index 67eb63d8..54cf6b14 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/RootDTOBuilderTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/hallink/RootDTOBuilderTest.java @@ -7,7 +7,7 @@ import de.caritas.cob.consultingtypeservice.api.model.HalLink.MethodEnum; import de.caritas.cob.consultingtypeservice.api.model.RootDTO; import de.caritas.cob.consultingtypeservice.api.model.RootLinks; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class RootDTOBuilderTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/service/ConsultingTypeAdminServiceIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/service/ConsultingTypeAdminServiceIT.java index 0d65b4e8..09b77cda 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/service/ConsultingTypeAdminServiceIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/admin/service/ConsultingTypeAdminServiceIT.java @@ -11,14 +11,11 @@ import de.caritas.cob.consultingtypeservice.api.model.ExtendedConsultingTypeResponseDTO; import de.caritas.cob.consultingtypeservice.api.model.PaginationLinks; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest(classes = ConsultingTypeServiceApplication.class) @TestPropertySource(properties = "spring.profiles.active=testing") public class ConsultingTypeAdminServiceIT { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRepositoryIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRepositoryIT.java index 52dd2d35..a7629f30 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRepositoryIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRepositoryIT.java @@ -11,17 +11,12 @@ import java.util.List; import java.util.Map; import org.hamcrest.collection.IsMapContaining; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest -@AutoConfigureMockMvc(addFilters = false) @TestPropertySource(properties = "spring.profiles.active=testing") public class ConsultingTypeGroupRepositoryIT { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRespositoryTenantAwareIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRespositoryTenantAwareIT.java index c4b4453b..9c96d285 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRespositoryTenantAwareIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeGroupRespositoryTenantAwareIT.java @@ -6,16 +6,13 @@ import de.caritas.cob.consultingtypeservice.schemas.model.ConsultingType; import java.util.List; import java.util.Map; -import org.junit.Test; import org.junit.jupiter.api.AfterEach; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc(addFilters = false) @TestPropertySource(properties = "spring.profiles.active=testing") diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java index a6bfb428..cf5a49e1 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java @@ -3,7 +3,7 @@ import static de.caritas.cob.consultingtypeservice.testHelper.TestConstants.BROKEN_FILE_PATH; import static de.caritas.cob.consultingtypeservice.testHelper.TestConstants.SRC_TEST_RESOURCES_BROKEN_CONSULTING_TYPE_SETTINGS; import static de.caritas.cob.consultingtypeservice.testHelper.TestConstants.SRC_TEST_RESOURCES_CONSULTING_TYPE_SETTINGS; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -16,17 +16,17 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.annotation.PostConstruct; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; import org.springframework.util.ReflectionUtils; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ConsultingTypeLoaderTest { private static final String INIT_METHOD_NAME = "init"; @@ -41,7 +41,7 @@ public class ConsultingTypeLoaderTest { @Mock ConsultingTypeValidator consultingTypeValidator; @Mock private Logger logger; - @Before + @BeforeEach public void setup() { setInternalState(LogService.class, "LOGGER", logger); // we need this as mockito does not properly inject @Qualifier marked beans diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoRespositoryIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoRespositoryIT.java index bff97990..ea4b0764 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoRespositoryIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoRespositoryIT.java @@ -10,18 +10,15 @@ import de.caritas.cob.consultingtypeservice.schemas.model.ConsultingType; import java.io.IOException; import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.core.io.ClassPathResource; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @DataMongoTest() @ContextConfiguration(classes = ConsultingTypeServiceApplication.class) @TestPropertySource(properties = "spring.profiles.active=testing") @@ -37,7 +34,7 @@ public class ConsultingTypeMongoRespositoryIT { @Autowired MongoTemplate mongoTemplate; - @Before + @BeforeEach public void initializeMongoDbWithData() throws IOException { mongoTemplate.dropCollection(MONGO_COLLECTION_NAME); insertJsonFromFilename("consulting-type-0.json"); diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoTenantAwareRespositoryIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoTenantAwareRespositoryIT.java index 4534b115..c9a01088 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoTenantAwareRespositoryIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeMongoTenantAwareRespositoryIT.java @@ -10,18 +10,15 @@ import de.caritas.cob.consultingtypeservice.schemas.model.ConsultingType; import java.io.IOException; import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.core.io.ClassPathResource; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @DataMongoTest() @ContextConfiguration(classes = ConsultingTypeServiceApplication.class) @TestPropertySource(properties = "spring.profiles.active=testing") @@ -39,7 +36,7 @@ public class ConsultingTypeMongoTenantAwareRespositoryIT { @Autowired MongoTemplate mongoTemplate; - @Before + @BeforeEach public void initializeMongoDbWithData() throws IOException { mongoTemplate.dropCollection(MONGO_COLLECTION_NAME); insertJsonFromFilename("consulting-type-0.json"); diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeRespositoryIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeRespositoryIT.java index 4d12670d..84470180 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeRespositoryIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeRespositoryIT.java @@ -1,18 +1,15 @@ package de.caritas.cob.consultingtypeservice.api.consultingtypes; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import de.caritas.cob.consultingtypeservice.schemas.model.ConsultingType; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc(addFilters = false) @TestPropertySource(properties = "spring.profiles.active=testing") diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java index 5c8cccd4..aafdec1c 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java @@ -15,15 +15,15 @@ import de.caritas.cob.consultingtypeservice.api.service.LogService; import java.io.File; import java.util.Objects; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ConsultingTypeValidatorTest { private static final String FIELD_NAME_CONSULTING_TYPE_JSON_SCHEMA_FILE = @@ -33,7 +33,7 @@ public class ConsultingTypeValidatorTest { @Mock private Logger logger; - @Before + @BeforeEach public void setup() { setInternalState(LogService.class, "LOGGER", logger); consultingTypeValidator = new ConsultingTypeValidator(); diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/controller/ConsultingTypeControllerIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/controller/ConsultingTypeControllerIT.java index 872c4d34..f23c1289 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/controller/ConsultingTypeControllerIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/controller/ConsultingTypeControllerIT.java @@ -1,5 +1,7 @@ package de.caritas.cob.consultingtypeservice.api.controller; +import static de.caritas.cob.consultingtypeservice.api.auth.Authority.AuthorityValue.CREATE_CONSULTING_TYPE; +import static de.caritas.cob.consultingtypeservice.api.auth.Authority.AuthorityValue.LIMITED_PATCH_CONSULTING_TYPE; import static de.caritas.cob.consultingtypeservice.testHelper.PathConstants.PATH_GET_BASIC_CONSULTING_TYPE_BY_ID; import static de.caritas.cob.consultingtypeservice.testHelper.PathConstants.PATH_GET_BASIC_CONSULTING_TYPE_LIST; import static de.caritas.cob.consultingtypeservice.testHelper.PathConstants.PATH_GET_CONSULTING_TYPE_GROUPS; @@ -16,6 +18,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import de.caritas.cob.consultingtypeservice.api.auth.RoleAuthorizationAuthorityMapper; import de.caritas.cob.consultingtypeservice.api.consultingtypes.ConsultingTypeConverter; import de.caritas.cob.consultingtypeservice.api.exception.UnexpectedErrorException; import de.caritas.cob.consultingtypeservice.api.exception.httpresponses.NotFoundException; @@ -34,32 +37,48 @@ import org.apache.commons.lang3.StringUtils; import org.jeasy.random.EasyRandom; import org.json.JSONObject; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.hateoas.client.LinkDiscoverers; import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; -@RunWith(SpringRunner.class) -@WebMvcTest(ConsultingTypeController.class) -@AutoConfigureMockMvc(addFilters = false) -public class ConsultingTypeControllerIT { +@SpringBootTest +@AutoConfigureMockMvc +@TestPropertySource(properties = "spring.profiles.active=testing") +class ConsultingTypeControllerIT { private static final ObjectMapper objectMapper = new ObjectMapper(); - @Autowired private MockMvc mvc; + + private MockMvc mvc; + + @Autowired private WebApplicationContext context; + + @Autowired private RoleAuthorizationAuthorityMapper roleAuthorizationAuthorityMapper; + @MockBean private ConsultingTypeService consultingTypeService; + @MockBean private ConsultingTypeGroupService consultingTypeGroupService; @MockBean private LinkDiscoverers linkDiscoverers; @MockBean private TenantResolver tenantResolver; + + @BeforeEach + public void setup() { + mvc = MockMvcBuilders.webAppContextSetup(context).build(); + } + private final ConsultingTypeConverter consultingTypeConverter = new ConsultingTypeConverter(); @Test - public void getBasicConsultingTypeList_Should_ReturnNoContent_When_ServiceReturnsEmptyList() + void getBasicConsultingTypeList_Should_ReturnNoContent_When_ServiceReturnsEmptyList() throws Exception { when(consultingTypeService.fetchBasicConsultingTypesList()).thenReturn(null); @@ -69,7 +88,7 @@ public void getBasicConsultingTypeList_Should_ReturnNoContent_When_ServiceReturn } @Test - public void getBasicConsultingTypeList_Should_ReturnConsultingTypeBasicList() throws Exception { + void getBasicConsultingTypeList_Should_ReturnConsultingTypeBasicList() throws Exception { BasicConsultingTypeResponseDTO basicConsultingTypeResponseDTO = BasicConsultingTypeMapper.mapConsultingType(HelperMethods.getConsultingType()); @@ -88,7 +107,7 @@ public void getBasicConsultingTypeList_Should_ReturnConsultingTypeBasicList() th } @Test - public void getFullConsultingTypeById_Should_ReturnFullConsultingTypeDTO() throws Exception { + void getFullConsultingTypeById_Should_ReturnFullConsultingTypeDTO() throws Exception { Integer consultingTypeId = 1; when(consultingTypeService.fetchFullConsultingTypeSettingsById(consultingTypeId)) @@ -105,7 +124,7 @@ public void getFullConsultingTypeById_Should_ReturnFullConsultingTypeDTO() throw } @Test - public void getFullConsultingTypeById_Should_ReturnNotFound_WhenConsultingTypeIsMissing() + void getFullConsultingTypeById_Should_ReturnNotFound_WhenConsultingTypeIsMissing() throws Exception { Integer consultingTypeId = 1; @@ -120,7 +139,7 @@ public void getFullConsultingTypeById_Should_ReturnNotFound_WhenConsultingTypeIs } @Test - public void getFullConsultingTypeBySlug_Should_ReturnFullConsultingTypeDTO() throws Exception { + void getFullConsultingTypeBySlug_Should_ReturnFullConsultingTypeDTO() throws Exception { String consultingTypeSlug = "consultingtype0"; when(consultingTypeService.fetchFullConsultingTypeSettingsBySlug(consultingTypeSlug)) @@ -137,7 +156,7 @@ public void getFullConsultingTypeBySlug_Should_ReturnFullConsultingTypeDTO() thr } @Test - public void getFullConsultingTypeBySlug_Should_ReturnNotFound_WhenConsultingTypeIsMissing() + void getFullConsultingTypeBySlug_Should_ReturnNotFound_WhenConsultingTypeIsMissing() throws Exception { String consultingTypeSlug = "consultingtype0"; @@ -152,7 +171,7 @@ public void getFullConsultingTypeBySlug_Should_ReturnNotFound_WhenConsultingType } @Test - public void getExtendedConsultingTypeById_Should_ReturnFullConsultingTypeDTO() throws Exception { + void getExtendedConsultingTypeById_Should_ReturnFullConsultingTypeDTO() throws Exception { Integer consultingTypeId = 1; ExtendedConsultingTypeResponseDTO extendedConsultingTypeResponseDTO = @@ -171,7 +190,7 @@ public void getExtendedConsultingTypeById_Should_ReturnFullConsultingTypeDTO() t } @Test - public void getExtendedConsultingTypeId_Should_ReturnNotFound_WhenConsultingTypeIsMissing() + void getExtendedConsultingTypeId_Should_ReturnNotFound_WhenConsultingTypeIsMissing() throws Exception { Integer consultingTypeId = 1; @@ -186,7 +205,7 @@ public void getExtendedConsultingTypeId_Should_ReturnNotFound_WhenConsultingType } @Test - public void getBasicConsultingTypeById_Should_ReturnBasicConsultingTypeDTO() throws Exception { + void getBasicConsultingTypeById_Should_ReturnBasicConsultingTypeDTO() throws Exception { Integer consultingTypeId = 1; BasicConsultingTypeResponseDTO basicConsultingTypeResponseDTO = @@ -204,7 +223,7 @@ public void getBasicConsultingTypeById_Should_ReturnBasicConsultingTypeDTO() thr } @Test - public void getBasicConsultingTypeById_Should_ReturnNotFound_WhenConsultingTypeIsMissing() + void getBasicConsultingTypeById_Should_ReturnNotFound_WhenConsultingTypeIsMissing() throws Exception { Integer consultingTypeId = 1; @@ -219,8 +238,7 @@ public void getBasicConsultingTypeById_Should_ReturnNotFound_WhenConsultingTypeI } @Test - public void getConsultingTypeGroups_Should_ReturnNoContent_WhenNoGroupsDefined() - throws Exception { + void getConsultingTypeGroups_Should_ReturnNoContent_WhenNoGroupsDefined() throws Exception { when(consultingTypeGroupService.fetchConsultingTypeGroupList()) .thenReturn(Collections.emptyList()); @@ -230,7 +248,7 @@ public void getConsultingTypeGroups_Should_ReturnNoContent_WhenNoGroupsDefined() } @Test - public void getConsultingTypeGroups_Should_ReturnListOfConsultingTypeGroupResponseDTO() + void getConsultingTypeGroups_Should_ReturnListOfConsultingTypeGroupResponseDTO() throws Exception { var consultingTypeGroupsReponseJson = @@ -245,7 +263,7 @@ public void getConsultingTypeGroups_Should_ReturnListOfConsultingTypeGroupRespon } @Test - public void getConsultingTypeGroups_Should_ReturnInternalServerError_WhenUnexpectedErrorOccurs() + void getConsultingTypeGroups_Should_ReturnInternalServerError_WhenUnexpectedErrorOccurs() throws Exception { when(consultingTypeGroupService.fetchConsultingTypeGroupList()) @@ -256,7 +274,8 @@ public void getConsultingTypeGroups_Should_ReturnInternalServerError_WhenUnexpec } @Test - public void createConsultingType_Should_returnOk_When_requiredConsultingTypeDTOIsGiven() + @WithMockUser(authorities = CREATE_CONSULTING_TYPE) + void createConsultingType_Should_returnOk_When_requiredConsultingTypeDTOIsGiven() throws Exception { // given ConsultingTypeDTO consultingTypeDTO = @@ -275,6 +294,26 @@ public void createConsultingType_Should_returnOk_When_requiredConsultingTypeDTOI verify(consultingTypeService).createConsultingType(consultingTypeDTO); } + @Test + @WithMockUser(authorities = LIMITED_PATCH_CONSULTING_TYPE) + void + createConsultingType_Should_returnForbidden_When_AttemptToCreateConsultingTypeWithoutPermissions() + throws Exception { + // given + ConsultingTypeDTO consultingTypeDTO = + new EasyRandom().nextObject(ConsultingTypeDTO.class).roles(null); + + objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + // when + this.mvc + .perform( + post(ROOT_PATH) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(consultingTypeDTO))) + // then + .andExpect(status().isForbidden()); + } + private String removeGroupsNode(String consultingTypeSettingsAsJsonString) { JSONObject jsonObject = new JSONObject(consultingTypeSettingsAsJsonString); jsonObject.remove("groups"); diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/BasicConsultingTypeMapperTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/BasicConsultingTypeMapperTest.java index d0338958..14437a32 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/BasicConsultingTypeMapperTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/BasicConsultingTypeMapperTest.java @@ -8,7 +8,7 @@ import de.caritas.cob.consultingtypeservice.api.model.BasicConsultingTypeResponseDTO; import de.caritas.cob.consultingtypeservice.testHelper.HelperMethods; import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class BasicConsultingTypeMapperTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ConsultingTypeMapperTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ConsultingTypeMapperTest.java index f540ba7d..a80f983c 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ConsultingTypeMapperTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ConsultingTypeMapperTest.java @@ -10,7 +10,7 @@ import de.caritas.cob.consultingtypeservice.api.model.SessionDataInitializingDTO; import de.caritas.cob.consultingtypeservice.api.model.WelcomeMessageDTO; import de.caritas.cob.consultingtypeservice.api.model.WhiteSpotDTO; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class ConsultingTypeMapperTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ExtendedConsultingTypeMapperTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ExtendedConsultingTypeMapperTest.java index ad02e7cf..d4f728b9 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ExtendedConsultingTypeMapperTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/ExtendedConsultingTypeMapperTest.java @@ -8,7 +8,7 @@ import de.caritas.cob.consultingtypeservice.api.model.ExtendedConsultingTypeResponseDTO; import de.caritas.cob.consultingtypeservice.testHelper.HelperMethods; import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class ExtendedConsultingTypeMapperTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/FullConsultingTypeMapperTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/FullConsultingTypeMapperTest.java index adcbdfbd..a5cacd83 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/FullConsultingTypeMapperTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/FullConsultingTypeMapperTest.java @@ -8,7 +8,7 @@ import de.caritas.cob.consultingtypeservice.api.model.FullConsultingTypeResponseDTO; import de.caritas.cob.consultingtypeservice.testHelper.HelperMethods; import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FullConsultingTypeMapperTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupMapperTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupMapperTest.java index 890dc103..9c283941 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupMapperTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupMapperTest.java @@ -10,7 +10,7 @@ import java.io.IOException; import java.util.Collections; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class ConsultingTypeGroupMapperTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupResponseMapperTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupResponseMapperTest.java index dcdc8552..5dbe06ae 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupResponseMapperTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/mapper/group/ConsultingTypeGroupResponseMapperTest.java @@ -11,7 +11,7 @@ import java.io.IOException; import java.util.List; import org.apache.commons.lang3.tuple.ImmutablePair; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class ConsultingTypeGroupResponseMapperTest { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryIT.java index 1205817e..adcbb5f2 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryIT.java @@ -6,16 +6,13 @@ import java.time.LocalDateTime; import java.util.Optional; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; @TestPropertySource(properties = "spring.profiles.active=testing") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.ANY) -@ExtendWith(SpringExtension.class) @DataJpaTest class TopicRepositoryIT { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryTenantAwareIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryTenantAwareIT.java index c2cf4c6b..f7d941d4 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryTenantAwareIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/repository/TopicRepositoryTenantAwareIT.java @@ -5,17 +5,14 @@ import de.caritas.cob.consultingtypeservice.api.model.TopicEntity; import java.util.Optional; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; @TestPropertySource(properties = "spring.profiles.active=testing") @TestPropertySource(properties = "multitenancy.enabled=true") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.ANY) -@ExtendWith(SpringExtension.class) @DataJpaTest class TopicRepositoryTenantAwareIT { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeGroupServiceTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeGroupServiceTest.java index cc7e89d2..d3e991db 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeGroupServiceTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeGroupServiceTest.java @@ -15,13 +15,13 @@ import java.util.List; import java.util.Map; import org.jeasy.random.EasyRandom; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ConsultingTypeGroupServiceTest { @InjectMocks ConsultingTypeGroupService consultingTypeGroupService; diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeServiceTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeServiceTest.java deleted file mode 100644 index fe51e464..00000000 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/ConsultingTypeServiceTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package de.caritas.cob.consultingtypeservice.api.service; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; - -import de.caritas.cob.consultingtypeservice.api.auth.AuthenticatedUser; -import de.caritas.cob.consultingtypeservice.api.consultingtypes.ConsultingTypeConverter; -import de.caritas.cob.consultingtypeservice.api.consultingtypes.ConsultingTypeRepositoryService; -import de.caritas.cob.consultingtypeservice.api.model.BasicConsultingTypeResponseDTO; -import de.caritas.cob.consultingtypeservice.api.model.ConsultingTypePatchDTO; -import de.caritas.cob.consultingtypeservice.api.model.ExtendedConsultingTypeResponseDTO; -import de.caritas.cob.consultingtypeservice.api.model.FullConsultingTypeResponseDTO; -import de.caritas.cob.consultingtypeservice.schemas.model.ConsultingType; -import java.util.Arrays; -import java.util.List; -import org.assertj.core.api.Fail; -import org.jeasy.random.EasyRandom; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.test.util.ReflectionTestUtils; - -@RunWith(MockitoJUnitRunner.class) -public class ConsultingTypeServiceTest { - - @InjectMocks ConsultingTypeService consultingTypeService; - @Mock ConsultingTypeRepositoryService consultingTypeRepository; - - @Mock ConsultingTypeConverter consultingTypeConverter; - - @Mock AuthenticatedUser authenticatedUser; - - private ConsultingType consultingType1; - private ConsultingType consultingType2; - private ConsultingType consultingType3; - - @Before - public void setup() { - EasyRandom easyRandom = new EasyRandom(); - consultingType1 = easyRandom.nextObject(ConsultingType.class); - consultingType2 = easyRandom.nextObject(ConsultingType.class); - consultingType3 = easyRandom.nextObject(ConsultingType.class); - consultingType2.setId(consultingType1.getId() + 1); - consultingType3.setId(consultingType2.getId() + 1); - when(consultingTypeRepository.getListOfConsultingTypes()) - .thenReturn(Arrays.asList(consultingType1, consultingType2, consultingType3)); - when(consultingTypeRepository.getConsultingTypeById(consultingType2.getId())) - .thenReturn(consultingType2); - when(consultingTypeRepository.getConsultingTypeBySlug(consultingType3.getSlug())) - .thenReturn(consultingType3); - ReflectionTestUtils.setField( - consultingTypeService, "multitenancyWithSingleDomainEnabled", false); - } - - @Test - public void fetchBasicConsultingTypesList_Should_ReturnListOfBasicConsultingTypeResponseDTO() { - - List result = - consultingTypeService.fetchBasicConsultingTypesList(); - assertThat(result, notNullValue()); - assertThat(result, hasSize(3)); - } - - @Test - public void - fetchFullConsultingTypeSettingsById_Should_ReturnWantedFullConsultingTypeResponseDTO() { - - FullConsultingTypeResponseDTO result = - consultingTypeService.fetchFullConsultingTypeSettingsById(consultingType2.getId()); - assertThat(result, notNullValue()); - assertThat(result.getId(), is(consultingType2.getId())); - } - - @Test - public void - fetchFullConsultingTypeSettingsBySlug_Should_ReturnWantedFullConsultingTypeResponseDTO() { - - FullConsultingTypeResponseDTO result = - consultingTypeService.fetchFullConsultingTypeSettingsBySlug(consultingType3.getSlug()); - assertThat(result, notNullValue()); - assertThat(result.getId(), is(consultingType3.getId())); - assertThat(result.getSlug(), is(consultingType3.getSlug())); - } - - @Test - public void - fetchExtendedConsultingTypeSettingsById_Should_ReturnWantedExtendedConsultingTypeResponseDTO() { - - ExtendedConsultingTypeResponseDTO result = - consultingTypeService.fetchExtendedConsultingTypeSettingsById(consultingType2.getId()); - assertThat(result, notNullValue()); - assertThat(result.getId(), is(consultingType2.getId())); - } - - @Test - public void - fetchBasicConsultingTypeSettingsById_Should_ReturnWantedBasicConsultingTypeResponseDTO() { - - BasicConsultingTypeResponseDTO result = - consultingTypeService.fetchBasicConsultingTypeSettingsById(consultingType2.getId()); - assertThat(result, notNullValue()); - assertThat(result.getId(), is(consultingType2.getId())); - } - - @Test - public void - assertChangesAreAllowedForUsersWithLimitedPatchPermission_Should_ThrowExceptionIfSingleDomainMultitenancyAndSingleTenantAdminTriesToChangeLanguage() { - // given - ReflectionTestUtils.setField( - consultingTypeService, "multitenancyWithSingleDomainEnabled", true); - ConsultingTypePatchDTO patchDTO = new ConsultingTypePatchDTO(); - patchDTO.setLanguageFormal(false); - ConsultingType existing = new ConsultingType().withLanguageFormal(true); - - // when, then - assertThrows( - AccessDeniedException.class, - () -> - consultingTypeService.assertChangesAreAllowedForUsersWithLimitedPatchPermission( - patchDTO, existing)); - } - - @Test - public void - assertChangesAreAllowedForUsersWithLimitedPatchPermission_Should_NotThrowExceptionIfMultidomainMultitenancyAndSingleTenantAdminTriesToChangeLanguage() { - // given - ReflectionTestUtils.setField( - consultingTypeService, "multitenancyWithSingleDomainEnabled", false); - ConsultingTypePatchDTO patchDTO = new ConsultingTypePatchDTO(); - patchDTO.setLanguageFormal(false); - ConsultingType existing = new ConsultingType().withLanguageFormal(true); - - // when, then - try { - consultingTypeService.assertChangesAreAllowedForUsersWithLimitedPatchPermission( - patchDTO, existing); - } catch (Exception e) { - Fail.fail("Expected no exception"); - } - } -} diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java index 5d72b039..9303e6cf 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java @@ -6,21 +6,21 @@ import static org.powermock.reflect.Whitebox.setInternalState; import java.io.PrintWriter; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class LogServiceTest { @Mock Exception exception; @Mock private Logger logger; - @Before + @BeforeEach public void setup() { setInternalState(LogService.class, "LOGGER", logger); } diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceIT.java index db41a70d..db7e5ea5 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceIT.java @@ -5,13 +5,10 @@ import de.caritas.cob.consultingtypeservice.ConsultingTypeServiceApplication; import de.caritas.cob.consultingtypeservice.api.model.TopicEntity; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest(classes = ConsultingTypeServiceApplication.class) @TestPropertySource(properties = "spring.profiles.active=testing") class TopicServiceIT { diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceTenantAwareIT.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceTenantAwareIT.java index 20b9bf2e..2e82a5cf 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceTenantAwareIT.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/TopicServiceTenantAwareIT.java @@ -8,13 +8,10 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest(classes = ConsultingTypeServiceApplication.class) @TestPropertySource(properties = "spring.profiles.active=testing") @TestPropertySource(properties = "multitenancy.enabled=true") diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/config/resttemplate/CustomResponseErrorHandlerTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/config/resttemplate/CustomResponseErrorHandlerTest.java index c2abc009..16174223 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/config/resttemplate/CustomResponseErrorHandlerTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/config/resttemplate/CustomResponseErrorHandlerTest.java @@ -2,13 +2,13 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.IOException; import java.net.URI; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilterTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilterTest.java index b196d0c5..d63efbe3 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilterTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/filter/StatelessCsrfFilterTest.java @@ -13,14 +13,14 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.web.access.AccessDeniedHandler; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class StatelessCsrfFilterTest { private static final String CSRF_HEADER = "csrfHeader"; @@ -37,7 +37,7 @@ public class StatelessCsrfFilterTest { @Mock private AccessDeniedHandler accessDeniedHandler; - @Before + @BeforeEach public void setup() { setField(csrfFilter, "accessDeniedHandler", accessDeniedHandler); } From 0dd1fa0963fe93740f41706e8e612aae4fa3d87b Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Fri, 10 May 2024 15:28:48 +0200 Subject: [PATCH 2/2] chore: upgrade to spring boot 2.7.X --- pom.xml | 24 +------- .../ConsultingTypeLoaderTest.java | 29 ++++------ .../ConsultingTypeValidatorTest.java | 31 ++++------ .../api/service/LogServiceTest.java | 34 ----------- src/test/resources/database/TopicDatabase.sql | 58 ++++++------------- 5 files changed, 43 insertions(+), 133 deletions(-) delete mode 100644 src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java diff --git a/pom.xml b/pom.xml index 3ec33e34..ad6674e6 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.15 + 2.7.14 @@ -135,8 +135,8 @@ org.springdoc - springdoc-openapi-starter-webmvc-ui - 2.4.0 + springdoc-openapi-ui + 1.8.0 @@ -214,24 +214,6 @@ ${spring-security-test.version} test - - powermock-module-junit4 - org.powermock - test - ${powermock-module-junit4.version} - - - junit - junit - - - - - powermock-api-mockito2 - org.powermock - test - ${powermock-api-mockito2.version} - de.flapdoodle.embed de.flapdoodle.embed.mongo diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java index cf5a49e1..42d25966 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeLoaderTest.java @@ -7,10 +7,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.powermock.reflect.Whitebox.setInternalState; import de.caritas.cob.consultingtypeservice.api.exception.UnexpectedErrorException; -import de.caritas.cob.consultingtypeservice.api.service.LogService; import de.caritas.cob.consultingtypeservice.schemas.model.ConsultingType; import java.io.File; import java.lang.reflect.Field; @@ -24,33 +22,31 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.ReflectionUtils; @ExtendWith(MockitoExtension.class) -public class ConsultingTypeLoaderTest { +class ConsultingTypeLoaderTest { private static final String INIT_METHOD_NAME = "init"; private static final String CONSULTING_TYPES_FILE_PATH_NAME = "consultingTypesFilePath"; @InjectMocks ConsultingTypeLoader consultingTypeLoader; - @Mock(name = "tenantUnaware") - ConsultingTypeRepositoryService consultingTypeRepositoryService; + @Mock ConsultingTypeRepositoryService consultingTypeRepositoryService; @Mock ConsultingTypeGroupRepository consultingTypeGroupRepository; @Mock ConsultingTypeValidator consultingTypeValidator; @Mock private Logger logger; @BeforeEach - public void setup() { - setInternalState(LogService.class, "LOGGER", logger); - // we need this as mockito does not properly inject @Qualifier marked beans - setInternalState( + void setup() { + ReflectionTestUtils.setField( consultingTypeLoader, "consultingTypeRepositoryService", consultingTypeRepositoryService); } @Test - public void test_Should_Fail_WhenMethodInitDoesNotHavePostConstructAnnotation() + void test_Should_Fail_WhenMethodInitDoesNotHavePostConstructAnnotation() throws NoSuchMethodException, SecurityException { PostConstruct annotation = @@ -60,7 +56,7 @@ public void test_Should_Fail_WhenMethodInitDoesNotHavePostConstructAnnotation() } @Test - public void init_Should_ThrowUnexpectedErrorException_WhenInvalidConsultingTypeSettingsPath() + void init_Should_ThrowUnexpectedErrorException_WhenInvalidConsultingTypeSettingsPath() throws NoSuchMethodException { setConsultingTypesFilePath(BROKEN_FILE_PATH); @@ -68,12 +64,10 @@ public void init_Should_ThrowUnexpectedErrorException_WhenInvalidConsultingTypeS assertThrows( UnexpectedErrorException.class, () -> ReflectionUtils.invokeMethod(initMethod, consultingTypeLoader)); - - verify(logger, times(1)).error(Mockito.anyString(), Mockito.anyString(), Mockito.any()); } @Test - public void init_Should_ThrowUnexpectedErrorException_WhenBrokenConsultingTypeSettings() + void init_Should_ThrowUnexpectedErrorException_WhenBrokenConsultingTypeSettings() throws NoSuchMethodException { setConsultingTypesFilePath(SRC_TEST_RESOURCES_BROKEN_CONSULTING_TYPE_SETTINGS); @@ -81,13 +75,10 @@ public void init_Should_ThrowUnexpectedErrorException_WhenBrokenConsultingTypeSe assertThrows( UnexpectedErrorException.class, () -> ReflectionUtils.invokeMethod(initMethod, consultingTypeLoader)); - - verify(logger, times(1)) - .error(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); } @Test - public void init_Should_AddConsultingTypesToRepository() throws NoSuchMethodException { + void init_Should_AddConsultingTypesToRepository() throws NoSuchMethodException { setConsultingTypesFilePath(SRC_TEST_RESOURCES_CONSULTING_TYPE_SETTINGS); ReflectionUtils.invokeMethod(getInitMethodFromConsultingTypeLoader(), consultingTypeLoader); @@ -96,7 +87,7 @@ public void init_Should_AddConsultingTypesToRepository() throws NoSuchMethodExce } @Test - public void init_Should_ValidateConsultingTypeSettings() throws NoSuchMethodException { + void init_Should_ValidateConsultingTypeSettings() throws NoSuchMethodException { setConsultingTypesFilePath(SRC_TEST_RESOURCES_CONSULTING_TYPE_SETTINGS); ReflectionUtils.invokeMethod(getInitMethodFromConsultingTypeLoader(), consultingTypeLoader); diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java index aafdec1c..1a9a4bbf 100644 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java +++ b/src/test/java/de/caritas/cob/consultingtypeservice/api/consultingtypes/ConsultingTypeValidatorTest.java @@ -5,26 +5,21 @@ import static de.caritas.cob.consultingtypeservice.testHelper.TestConstants.FILE_INVALID_CONSULTING_TYPE; import static de.caritas.cob.consultingtypeservice.testHelper.TestConstants.FILE_NULL_VALUE_CONSULTING_TYPE; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; -import static org.powermock.reflect.Whitebox.setInternalState; import static org.springframework.test.util.ReflectionTestUtils.setField; import de.caritas.cob.consultingtypeservice.api.exception.UnexpectedErrorException; -import de.caritas.cob.consultingtypeservice.api.service.LogService; import java.io.File; import java.util.Objects; +import org.assertj.core.api.Fail; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; @ExtendWith(MockitoExtension.class) -public class ConsultingTypeValidatorTest { +class ConsultingTypeValidatorTest { private static final String FIELD_NAME_CONSULTING_TYPE_JSON_SCHEMA_FILE = "consultingTypeJsonSchemaFile"; @@ -34,8 +29,7 @@ public class ConsultingTypeValidatorTest { @Mock private Logger logger; @BeforeEach - public void setup() { - setInternalState(LogService.class, "LOGGER", logger); + void setup() { consultingTypeValidator = new ConsultingTypeValidator(); setField( consultingTypeValidator, @@ -44,7 +38,7 @@ public void setup() { } @Test - public void + void validateConsultingTypeConfigurationJsonFile_Should_ThrowUnexpectedErrorException_WhenJsonViolatesSchema() { File invalidConsultingSettingsFile = @@ -58,11 +52,10 @@ public void setup() { () -> consultingTypeValidator.validateConsultingTypeConfigurationJsonFile( invalidConsultingSettingsFile)); - verify(logger, times(1)).error(Mockito.anyString(), Mockito.anyString(), Mockito.any()); } @Test - public void + void validateConsultingTypeConfigurationJsonFile_Should_ThrowUnexpectedErrorException_WhenJsonFileCouldNotBeParsed() { File invalidConsultingSettingsFile = @@ -76,12 +69,10 @@ public void setup() { () -> consultingTypeValidator.validateConsultingTypeConfigurationJsonFile( invalidConsultingSettingsFile)); - verify(logger, times(1)).error(Mockito.anyString(), Mockito.anyString(), Mockito.any()); } @Test - public void - validateConsultingTypeConfigurationJsonFile_ShouldNot_ThrowException_For_NullValues() { + void validateConsultingTypeConfigurationJsonFile_ShouldNot_ThrowException_For_NullValues() { File invalidConsultingSettingsFile = new File( @@ -89,9 +80,11 @@ public void setup() { ConsultingTypeValidatorTest.class.getResource(FILE_NULL_VALUE_CONSULTING_TYPE)) .getFile()); - consultingTypeValidator.validateConsultingTypeConfigurationJsonFile( - invalidConsultingSettingsFile); - - verifyNoInteractions(logger); + try { + consultingTypeValidator.validateConsultingTypeConfigurationJsonFile( + invalidConsultingSettingsFile); + } catch (Exception e) { + Fail.fail("No exception should be thrown"); + } } } diff --git a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java b/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java deleted file mode 100644 index 9303e6cf..00000000 --- a/src/test/java/de/caritas/cob/consultingtypeservice/api/service/LogServiceTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.caritas.cob.consultingtypeservice.api.service; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.verify; -import static org.powermock.reflect.Whitebox.setInternalState; - -import java.io.PrintWriter; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.slf4j.Logger; - -@ExtendWith(MockitoExtension.class) -public class LogServiceTest { - - @Mock Exception exception; - - @Mock private Logger logger; - - @BeforeEach - public void setup() { - setInternalState(LogService.class, "LOGGER", logger); - } - - @Test - public void logWarning_Should_LogExceptionStackTrace() { - - LogService.logWarning(exception); - verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class)); - } -} diff --git a/src/test/resources/database/TopicDatabase.sql b/src/test/resources/database/TopicDatabase.sql index 62a442f2..3cf92f73 100644 --- a/src/test/resources/database/TopicDatabase.sql +++ b/src/test/resources/database/TopicDatabase.sql @@ -1,55 +1,33 @@ -DROP TABLE IF EXISTS `topic`; +drop table IF EXISTS `topic`; CREATE TABLE IF NOT EXISTS `topic` -( - `id` bigint -( - 21 -) NOT NULL, - `tenant_id` bigint -( - 21 -) NULL, - `name` varchar -( - 100 -) NOT NULL, - `description` varchar -( - 100 -) NULL, - `status` varchar -( - 20 -), - `create_date` datetime NOT NULL, - `update_date` datetime NULL, - `internal_identifier` varchar -( - 50 -) NULL, - PRIMARY KEY -( - `id` -) - ); + ( + `id` BIGINT NOT NULL, + `tenant_id` BIGINT NULL, + `name` VARCHAR (100) NOT NULL, + `description` VARCHAR (100) NULL, + `status` VARCHAR (20), + `create_date` TIMESTAMP NOT NULL, + `update_date` TIMESTAMP NULL, + `internal_identifier` VARCHAR (50) NULL, + PRIMARY KEY (`id`) + ); - -ALTER TABLE `topic` +alter table `topic` ADD CONSTRAINT IF NOT EXISTS unique_name_per_tenant UNIQUE (name, tenant_id); -CREATE SEQUENCE IF NOT EXISTS sequence_topic +create sequence IF NOT EXISTS sequence_topic INCREMENT BY 1 -START WITH 100000; +START with 100000; -INSERT INTO TOPIC (`id`, `tenant_id`, `name`, `description`, `status`, `create_date`) +insert into TOPIC (`id`, `tenant_id`, `name`, `description`, `status`, `create_date`) VALUES (1, '1', '{"de" : "de an active topic", "en": "en an active topic"}', '{"de" : "de description", "en": "en description"}', 'ACTIVE', '2022-06-02'); -INSERT INTO TOPIC (`id`, `tenant_id`, `name`, `description`, `status`, `create_date`) +insert into TOPIC (`id`, `tenant_id`, `name`, `description`, `status`, `create_date`) VALUES (2, '1', '{"de" : "de not an active topic", "en": "en not an active topic"}', '{"de" : "de description", "en": "en description"}', 'INACTIVE', '2022-06-02'); -INSERT INTO TOPIC (`id`, `tenant_id`, `name`, `description`, `status`, `create_date`) +insert into TOPIC (`id`, `tenant_id`, `name`, `description`, `status`, `create_date`) VALUES (3, '2', '{"de" : "de another topic"}', '{"de" : "de description"}', 'ACTIVE', '2022-06-02');