From 66e4f69b3326d6b8d432ef803b9aba3c9b6d115f Mon Sep 17 00:00:00 2001 From: Gregory <32060161+ggmaleva@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:50:52 +0300 Subject: [PATCH] set null org role scope if it dont exist in DB (#60) * set null org role scope if it dont exist in DB * bump parent * bump vulnerability deps * change container test --------- Co-authored-by: ggmaleva --- pom.xml | 38 +++++++++--- .../converter/BouncerContextConverter.java | 9 ++- .../BouncerContextConverterTest.java | 17 ++++++ .../repository/AbstractRepositoryTest.java | 60 +++++++++++-------- 4 files changed, 90 insertions(+), 34 deletions(-) diff --git a/pom.xml b/pom.xml index 1c468ca..7c70db7 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.vality service-parent-pom - 2.1.5 + 2.1.8 org-manager @@ -16,18 +16,19 @@ org-manager - 15 - 15 + 17 + 17 UTF-8 UTF-8 8022 8080 8023 ${server.port} ${server.rest.port} ${management.port} - 5.6.2 + 5.6.12 17.0.0 4.34.0 1.19-8707f87-server + 2.32.0 @@ -71,6 +72,12 @@ org.springframework.boot spring-boot-starter + + + org.yaml + snakeyaml + + org.springframework.boot @@ -186,7 +193,7 @@ org.postgresql postgresql - 42.3.3 + 42.4.3 org.flywaydb @@ -195,13 +202,18 @@ com.google.guava guava - 31.1-jre + 32.0.0-jre org.openapitools jackson-databind-nullable 0.2.2 + + org.yaml + snakeyaml + 2.0 + @@ -222,6 +234,12 @@ 3.1.1 test + + com.github.tomakehurst + wiremock-jre8-standalone + ${wiremock-jre8-standalone.version} + test + io.jsonwebtoken jjwt @@ -231,7 +249,7 @@ org.testcontainers postgresql - 1.17.0 + 1.19.1 test @@ -240,6 +258,12 @@ + + org.testcontainers + junit-jupiter + 1.19.1 + test + diff --git a/src/main/java/dev/vality/orgmanager/converter/BouncerContextConverter.java b/src/main/java/dev/vality/orgmanager/converter/BouncerContextConverter.java index 1cedaa8..f6926fb 100644 --- a/src/main/java/dev/vality/orgmanager/converter/BouncerContextConverter.java +++ b/src/main/java/dev/vality/orgmanager/converter/BouncerContextConverter.java @@ -11,6 +11,7 @@ import dev.vality.orgmanager.entity.OrganizationEntity; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -48,8 +49,12 @@ public class BouncerContextConverter { public OrgRole toOrgRole(MemberRoleEntity entity) { return new OrgRole() .setId(entity.getRoleId()) - .setScope(new OrgRoleScope() - .setShop(new Entity().setId(entity.getResourceId()))); + .setScope(Objects.nonNull(entity.getResourceId()) + ? new OrgRoleScope() + .setShop( + new Entity() + .setId(entity.getResourceId())) + : null); } } diff --git a/src/test/java/dev/vality/orgmanager/converter/BouncerContextConverterTest.java b/src/test/java/dev/vality/orgmanager/converter/BouncerContextConverterTest.java index 5d8c8a0..fda2882 100644 --- a/src/test/java/dev/vality/orgmanager/converter/BouncerContextConverterTest.java +++ b/src/test/java/dev/vality/orgmanager/converter/BouncerContextConverterTest.java @@ -46,6 +46,23 @@ class BouncerContextConverterTest { assertEquals(expected, actual); } + @Test + void shouldConvertToOrgRoleWithoutScope() { + MemberRoleEntity entity = MemberRoleEntity.builder() + .id("id") + .roleId("Administrator") + .organizationId("org") + .build(); + + OrgRole actual = converter.toOrgRole(entity); + + OrgRole expected = new OrgRole() + .setId(RoleId.ADMINISTRATOR.getValue()) + .setScope(null); + + assertEquals(expected, actual); + } + @Test void shouldConvertToMember() { Set organizationEntities = Set.of(TestObjectFactory.buildOrganization()); diff --git a/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java b/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java index d27f53c..2b05c7a 100644 --- a/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java +++ b/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java @@ -1,27 +1,27 @@ package dev.vality.orgmanager.repository; import dev.vality.orgmanager.OrgManagerApplication; -import org.junit.ClassRule; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import org.springframework.transaction.annotation.Transactional; import org.testcontainers.containers.PostgreSQLContainer; - -import java.time.Duration; +import org.testcontainers.utility.DockerImageName; @ActiveProfiles("test") @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = {OrgManagerApplication.class}) -@ContextConfiguration(initializers = InvitationRepositoryTest.Initializer.class) public abstract class AbstractRepositoryTest { + private static final String POSTGRESQL_IMAGE_NAME = "postgres"; + private static final String POSTGRESQL_VERSION = "13.6"; + @Autowired protected InvitationRepository invitationRepository; @@ -54,24 +54,34 @@ public abstract class AbstractRepositoryTest { organizationRoleRepository.deleteAll(); } - @ClassRule - @SuppressWarnings("rawtypes") - public static PostgreSQLContainer postgres = new PostgreSQLContainer<>("postgres:13.6") - .withStartupTimeout(Duration.ofMinutes(5)); + @BeforeAll + static void beforeAll() { + TestPropertyValues.of( + "spring.datasource.url=" + postgres.getJdbcUrl(), + "spring.datasource.username=" + postgres.getUsername(), + "spring.datasource.password=" + postgres.getPassword(), + "spring.flyway.url=" + postgres.getJdbcUrl(), + "spring.flyway.user=" + postgres.getUsername(), + "spring.flyway.password=" + postgres.getPassword()); - public static class Initializer implements ApplicationContextInitializer { - @Override - public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - postgres.start(); - TestPropertyValues.of( - "spring.datasource.url=" + postgres.getJdbcUrl(), - "spring.datasource.username=" + postgres.getUsername(), - "spring.datasource.password=" + postgres.getPassword(), - "spring.flyway.url=" + postgres.getJdbcUrl(), - "spring.flyway.user=" + postgres.getUsername(), - "spring.flyway.password=" + postgres.getPassword()) - .and(configurableApplicationContext.getEnvironment().getActiveProfiles()) - .applyTo(configurableApplicationContext); - } + } + + @SuppressWarnings("rawtypes") + static PostgreSQLContainer postgres = new PostgreSQLContainer<>(DockerImageName + .parse(POSTGRESQL_IMAGE_NAME) + .withTag(POSTGRESQL_VERSION)); + + static { + postgres.start(); + } + + @DynamicPropertySource + static void configureProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.url", postgres::getJdbcUrl); + registry.add("spring.datasource.username", postgres::getUsername); + registry.add("spring.datasource.password", postgres::getPassword); + registry.add("spring.flyway.url", postgres::getJdbcUrl); + registry.add("spring.flyway.user", postgres::getUsername); + registry.add("spring.flyway.password", postgres::getPassword); } }