diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index dbb1a95a..8ffed7c8 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -7,4 +7,4 @@ on:
jobs:
build:
- uses: valitydev/java-workflow/.github/workflows/maven-service-build.yml@v3
+ uses: valitydev/java-workflow/.github/workflows/maven-service-build.yml@v4
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 9f366b27..93aebc69 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -7,7 +7,7 @@ on:
jobs:
build-and-deploy:
- uses: valitydev/java-workflow/.github/workflows/maven-service-deploy.yml@v3
+ uses: valitydev/java-workflow/.github/workflows/maven-service-deploy.yml@v4
secrets:
github-token: ${{ secrets.GITHUB_TOKEN }}
mm-webhook-url: ${{ secrets.MATTERMOST_WEBHOOK_URL }}
diff --git a/pom.xml b/pom.xml
index e8ed8868..1aadee48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
dev.vality
service-parent-pom
- 3.1.8
+ 4.0.0
org-manager
@@ -16,20 +16,19 @@
org-manager
- 21
- 21
+ 25
UTF-8
UTF-8
8022
8080
8023
${server.port} ${server.rest.port} ${management.port}
- 17.0.0
- 4.34.0
+ 26.7.2
+ 7.7.0
1.38-8c9b968
- 2.32.0
1.685-5c25c2e
- 3.0.1
+ 5.0.0
+ 3.0.0
@@ -37,11 +36,16 @@
dev.vality.woody
woody-thrift
+ ${woody.version}
+
+
+ dev.vality.woody
+ woody-api
+ ${woody.version}
dev.vality
shared-resources
- ${shared-resources.version}
dev.vality
@@ -82,7 +86,7 @@
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-webmvc
org.springframework.boot
@@ -98,7 +102,7 @@
org.springframework.boot
- spring-boot-starter-oauth2-resource-server
+ spring-boot-starter-security-oauth2-resource-server
net.javacrumbs.shedlock
@@ -118,8 +122,8 @@
org.bouncycastle
- bcprov-jdk15on
- 1.70
+ bcprov-jdk18on
+ 1.84
@@ -140,14 +144,15 @@
org.projectlombok
lombok
+ provided
org.postgresql
postgresql
- org.flywaydb
- flyway-core
+ org.springframework.boot
+ spring-boot-starter-flyway
org.flywaydb
@@ -161,18 +166,11 @@
org.openapitools
jackson-databind-nullable
- 0.2.2
+ 0.2.10
org.yaml
snakeyaml
- 2.0
-
-
-
- io.opentelemetry
- opentelemetry-semconv
- 1.29.0-alpha
@@ -180,35 +178,21 @@
org.springframework.boot
spring-boot-starter-test
test
-
-
- org.junit.vintage
- junit-vintage-engine
-
-
-
-
- org.springframework.cloud
- spring-cloud-contract-wiremock
- 4.1.5
- test
- com.github.tomakehurst
- wiremock-jre8-standalone
- ${wiremock-jre8-standalone.version}
+ org.springframework.boot
+ spring-boot-starter-webmvc-test
test
- io.jsonwebtoken
- jjwt
- 0.9.1
+ org.wiremock.integrations
+ wiremock-spring-boot
+ 4.0.9
test
org.testcontainers
- postgresql
- 1.19.1
+ testcontainers-postgresql
test
@@ -219,8 +203,7 @@
org.testcontainers
- junit-jupiter
- 1.19.1
+ testcontainers-junit-jupiter
test
@@ -240,6 +223,7 @@
true
Dockerfile
+ opentelemetry-javaagent.jar
@@ -255,14 +239,7 @@
org.apache.maven.plugins
maven-remote-resources-plugin
- 1.7.0
-
-
- org.apache.maven.shared
- maven-filtering
- 3.2.0
-
-
+ 3.3.0
dev.vality:shared-resources:${shared-resources.version}
@@ -281,15 +258,13 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.15.0
- 21
- 21
org.projectlombok
lombok
- 1.18.36
+ ${lombok.version}
diff --git a/src/main/java/dev/vality/orgmanager/OrgManagerApplication.java b/src/main/java/dev/vality/orgmanager/OrgManagerApplication.java
index 1338b8b7..e74f6f6c 100644
--- a/src/main/java/dev/vality/orgmanager/OrgManagerApplication.java
+++ b/src/main/java/dev/vality/orgmanager/OrgManagerApplication.java
@@ -3,7 +3,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.boot.web.server.servlet.context.ServletComponentScan;
@ServletComponentScan
@ConfigurationPropertiesScan
diff --git a/src/main/java/dev/vality/orgmanager/config/AppConfig.java b/src/main/java/dev/vality/orgmanager/config/AppConfig.java
index 59e468b3..5a5f0c39 100644
--- a/src/main/java/dev/vality/orgmanager/config/AppConfig.java
+++ b/src/main/java/dev/vality/orgmanager/config/AppConfig.java
@@ -1,20 +1,23 @@
package dev.vality.orgmanager.config;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
import dev.vality.orgmanager.controller.converter.InvitationStatusConverter;
-import org.openapitools.jackson.nullable.JsonNullableModule;
+import org.openapitools.jackson.nullable.JsonNullableJackson3Module;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.jackson.autoconfigure.JsonMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.support.FormattingConversionService;
@Configuration
public class AppConfig {
- @Autowired
- public void objectMapper(ObjectMapper mapper) {
- mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- mapper.registerModule(new JsonNullableModule());
+ @Bean
+ public JsonMapperBuilderCustomizer jsonMapperCustomizer() {
+ return builder -> builder
+ .changeDefaultPropertyInclusion(inclusion ->
+ inclusion.withValueInclusion(JsonInclude.Include.NON_NULL))
+ .addModule(new JsonNullableJackson3Module());
}
@Autowired
diff --git a/src/main/java/dev/vality/orgmanager/config/ConfigResolverConfig.java b/src/main/java/dev/vality/orgmanager/config/ConfigResolverConfig.java
index 7152cfd0..230e17a9 100644
--- a/src/main/java/dev/vality/orgmanager/config/ConfigResolverConfig.java
+++ b/src/main/java/dev/vality/orgmanager/config/ConfigResolverConfig.java
@@ -13,13 +13,13 @@
import org.springframework.security.oauth2.jwt.NimbusJwtDecoder;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
-import java.nio.file.Files;
-import java.nio.file.Paths;
import java.util.Base64;
import java.util.List;
import java.util.stream.Collectors;
@@ -65,7 +65,7 @@ private RSAPublicKey readPublicKey(String publicKey) {
private String readKeyFromFile(String filePath) {
try {
- List strings = Files.readAllLines(Paths.get(filePath));
+ List strings = Files.readAllLines(Path.of(filePath));
strings.remove(strings.size() - 1);
strings.remove(0);
diff --git a/src/main/java/dev/vality/orgmanager/config/OtelConfig.java b/src/main/java/dev/vality/orgmanager/config/OtelConfig.java
deleted file mode 100644
index 630c3aa8..00000000
--- a/src/main/java/dev/vality/orgmanager/config/OtelConfig.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package dev.vality.orgmanager.config;
-
-import dev.vality.orgmanager.config.properties.OtelProperties;
-import io.opentelemetry.api.GlobalOpenTelemetry;
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.common.Attributes;
-import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
-import io.opentelemetry.context.propagation.ContextPropagators;
-import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.resources.Resource;
-import io.opentelemetry.sdk.trace.SdkTracerProvider;
-import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
-import io.opentelemetry.sdk.trace.samplers.Sampler;
-import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.time.Duration;
-
-@Slf4j
-@Configuration
-@ConditionalOnProperty(value = "otel.enabled", havingValue = "true", matchIfMissing = true)
-@RequiredArgsConstructor
-public class OtelConfig {
-
- private final OtelProperties otelProperties;
-
- @Value("${spring.application.name}")
- private String applicationName;
-
- @Bean
- public OpenTelemetry openTelemetryConfig() {
- var resource = Resource.getDefault()
- .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName)));
- var sdkTracerProvider = SdkTracerProvider.builder()
- .addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
- .setEndpoint(otelProperties.getResource())
- .setTimeout(Duration.ofMillis(otelProperties.getTimeout()))
- .build())
- .build())
- .setSampler(Sampler.alwaysOn())
- .setResource(resource)
- .build();
- var openTelemetrySdk = OpenTelemetrySdk.builder()
- .setTracerProvider(sdkTracerProvider)
- .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
- .build();
- registerGlobalOpenTelemetry(openTelemetrySdk);
- return openTelemetrySdk;
- }
-
- private static void registerGlobalOpenTelemetry(OpenTelemetry openTelemetry) {
- try {
- GlobalOpenTelemetry.set(openTelemetry);
- } catch (Throwable ex) {
- log.warn("Please initialize the ObservabilitySdk before starting the application", ex);
- GlobalOpenTelemetry.resetForTest();
- try {
- GlobalOpenTelemetry.set(openTelemetry);
- } catch (Throwable ex1) {
- log.warn("Unable to set GlobalOpenTelemetry", ex1);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/dev/vality/orgmanager/config/TomcatWebServerCustomizer.java b/src/main/java/dev/vality/orgmanager/config/TomcatWebServerCustomizer.java
index 6ecb1fa2..ee654ec9 100644
--- a/src/main/java/dev/vality/orgmanager/config/TomcatWebServerCustomizer.java
+++ b/src/main/java/dev/vality/orgmanager/config/TomcatWebServerCustomizer.java
@@ -2,7 +2,7 @@
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@@ -19,6 +19,6 @@ public void customize(TomcatServletWebServerFactory factory) {
Connector connector = new Connector();
connector.setPort(restPort);
- factory.addAdditionalTomcatConnectors(connector);
+ factory.addAdditionalConnectors(connector);
}
}
diff --git a/src/main/java/dev/vality/orgmanager/config/properties/OtelProperties.java b/src/main/java/dev/vality/orgmanager/config/properties/OtelProperties.java
deleted file mode 100644
index ff18b2d3..00000000
--- a/src/main/java/dev/vality/orgmanager/config/properties/OtelProperties.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package dev.vality.orgmanager.config.properties;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Getter
-@Setter
-@Component
-@ConfigurationProperties(prefix = "otel")
-public class OtelProperties {
-
- private String resource;
- private Long timeout;
-
-}
diff --git a/src/main/java/dev/vality/orgmanager/converter/InvitationConverter.java b/src/main/java/dev/vality/orgmanager/converter/InvitationConverter.java
index b9242262..d91232e0 100644
--- a/src/main/java/dev/vality/orgmanager/converter/InvitationConverter.java
+++ b/src/main/java/dev/vality/orgmanager/converter/InvitationConverter.java
@@ -2,7 +2,7 @@
import dev.vality.orgmanager.config.properties.InviteTokenProperties;
import dev.vality.orgmanager.entity.InvitationEntity;
-import dev.vality.orgmanager.util.JsonMapper;
+import dev.vality.orgmanager.util.JsonCodec;
import dev.vality.swag.organizations.model.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -21,7 +21,7 @@
@RequiredArgsConstructor
public class InvitationConverter {
- private final JsonMapper jsonMapper;
+ private final JsonCodec jsonCodec;
private final MemberRoleConverter memberRoleConverter;
private final InviteTokenProperties inviteTokenProperties;
@@ -48,7 +48,7 @@ public InvitationEntity toEntity(InvitationRequest invitation, String orgId) {
.stream()
.map(role -> memberRoleConverter.toEntity(role, orgId))
.collect(toSet()))
- .metadata(jsonMapper.toJson(invitation.getMetadata()))
+ .metadata(jsonCodec.toJson(invitation.getMetadata()))
.status(InvitationStatusName.PENDING.getValue())
.acceptToken(UUID.randomUUID().toString()) // TODO [a.romanov]: token
.build();
@@ -81,7 +81,7 @@ public Invitation toDomain(InvitationEntity entity) {
invitation.id(entity.getId())
.createdAt(OffsetDateTime.of(entity.getCreatedAt(), ZoneOffset.UTC))
.expiresAt(OffsetDateTime.of(entity.getExpiresAt(), ZoneOffset.UTC))
- .metadata(entity.getMetadata() != null ? jsonMapper.toMap(entity.getMetadata()) : null)
+ .metadata(entity.getMetadata() != null ? jsonCodec.toMap(entity.getMetadata()) : null)
.invitee(new Invitee()
.contact(new InviteeContact()
.type(InviteeContact.TypeEnum.fromValue(entity.getInviteeContactType()))
diff --git a/src/main/java/dev/vality/orgmanager/converter/OrganizationConverter.java b/src/main/java/dev/vality/orgmanager/converter/OrganizationConverter.java
index 80951cb0..ad504520 100644
--- a/src/main/java/dev/vality/orgmanager/converter/OrganizationConverter.java
+++ b/src/main/java/dev/vality/orgmanager/converter/OrganizationConverter.java
@@ -1,7 +1,7 @@
package dev.vality.orgmanager.converter;
import dev.vality.orgmanager.entity.OrganizationEntity;
-import dev.vality.orgmanager.util.JsonMapper;
+import dev.vality.orgmanager.util.JsonCodec;
import dev.vality.swag.organizations.model.Organization;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -15,7 +15,7 @@
@RequiredArgsConstructor
public class OrganizationConverter {
- private final JsonMapper jsonMapper;
+ private final JsonCodec jsonCodec;
public OrganizationEntity toEntity(Organization organization, String ownerId) {
String orgId = UUID.randomUUID().toString();
@@ -26,7 +26,7 @@ public OrganizationEntity toEntity(Organization organization, String ownerId) {
.name(organization.getName())
.owner(ownerId)
.party(partyId)
- .metadata(jsonMapper.toJson(organization.getMetadata()))
+ .metadata(jsonCodec.toJson(organization.getMetadata()))
.build();
}
@@ -37,7 +37,7 @@ public Organization toDomain(OrganizationEntity entity) {
.name(entity.getName())
.owner(entity.getOwner())
.party(entity.getParty())
- .metadata(entity.getMetadata() != null ? jsonMapper.toMap(entity.getMetadata()) : null);
+ .metadata(entity.getMetadata() != null ? jsonCodec.toMap(entity.getMetadata()) : null);
}
}
diff --git a/src/main/java/dev/vality/orgmanager/pagination/OffsetBasedPageRequest.java b/src/main/java/dev/vality/orgmanager/pagination/OffsetBasedPageRequest.java
index 44d8ca62..7482b04c 100644
--- a/src/main/java/dev/vality/orgmanager/pagination/OffsetBasedPageRequest.java
+++ b/src/main/java/dev/vality/orgmanager/pagination/OffsetBasedPageRequest.java
@@ -4,11 +4,13 @@
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
+import java.io.Serial;
import java.io.Serializable;
@EqualsAndHashCode
public class OffsetBasedPageRequest implements Pageable, Serializable {
+ @Serial
private static final long serialVersionUID = -35826477329623545L;
private int limit;
diff --git a/src/main/java/dev/vality/orgmanager/repository/MemberRepository.java b/src/main/java/dev/vality/orgmanager/repository/MemberRepository.java
index a064e034..7435e685 100644
--- a/src/main/java/dev/vality/orgmanager/repository/MemberRepository.java
+++ b/src/main/java/dev/vality/orgmanager/repository/MemberRepository.java
@@ -3,7 +3,7 @@
import dev.vality.orgmanager.entity.MemberEntity;
import dev.vality.orgmanager.service.dto.MemberWithRoleDto;
import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.NativeQuery;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -12,7 +12,7 @@
public interface MemberRepository extends JpaRepository {
- @Query(value = "SELECT m.id, " +
+ @NativeQuery("SELECT m.id, " +
" m.email, " +
" mr.id as memberRoleId, " +
" mr.organization_id as organizationId, " +
@@ -29,7 +29,7 @@ public interface MemberRepository extends JpaRepository {
" AND mr.active = 'true' " +
" AND mr.id = mtmr.member_role_id " +
" AND mr.organization_id = mto.organization_id " +
- " AND m.id = mtmr.member_id ", nativeQuery = true)
+ " AND m.id = mtmr.member_id ")
List getOrgMemberList(String orgId);
boolean existsById(String id);
diff --git a/src/main/java/dev/vality/orgmanager/repository/OrganizationRepository.java b/src/main/java/dev/vality/orgmanager/repository/OrganizationRepository.java
index bf18329d..a5581c2c 100644
--- a/src/main/java/dev/vality/orgmanager/repository/OrganizationRepository.java
+++ b/src/main/java/dev/vality/orgmanager/repository/OrganizationRepository.java
@@ -2,7 +2,7 @@
import dev.vality.orgmanager.entity.OrganizationEntity;
import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.NativeQuery;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -11,8 +11,7 @@
@Repository
public interface OrganizationRepository extends JpaRepository {
- @Query(value =
- " SELECT * FROM org_manager.organization AS o " +
+ @NativeQuery(" SELECT * FROM org_manager.organization AS o " +
" WHERE o.id IN " +
" ( " +
" SELECT mo.organization_id FROM org_manager.member_to_organization AS mo " +
@@ -20,12 +19,10 @@ public interface OrganizationRepository extends JpaRepository findAllByMember(String userId);
- @Query(value =
- " SELECT * FROM org_manager.organization AS o " +
+ @NativeQuery(" SELECT * FROM org_manager.organization AS o " +
" WHERE o.id IN " +
" ( " +
" SELECT mo.organization_id FROM org_manager.member_to_organization AS mo " +
@@ -34,8 +31,7 @@ public interface OrganizationRepository extends JpaRepository findAllByMember(String userId, String continuationId);
Set findAllByOwner(String owner);
diff --git a/src/main/java/dev/vality/orgmanager/service/KeycloakService.java b/src/main/java/dev/vality/orgmanager/service/KeycloakService.java
index 23fdc5b3..218a93da 100644
--- a/src/main/java/dev/vality/orgmanager/service/KeycloakService.java
+++ b/src/main/java/dev/vality/orgmanager/service/KeycloakService.java
@@ -1,12 +1,12 @@
package dev.vality.orgmanager.service;
-import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.keycloak.representations.AccessToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.stereotype.Service;
+import tools.jackson.databind.json.JsonMapper;
import java.time.Instant;
import java.util.HashMap;
@@ -16,14 +16,14 @@
@RequiredArgsConstructor
public class KeycloakService {
- private final ObjectMapper objectMapper;
+ private final JsonMapper jsonMapper;
public AccessToken getAccessToken() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !(authentication.getPrincipal() instanceof Jwt jwt)) {
throw new IllegalStateException("Jwt principal is required");
}
- return objectMapper.convertValue(normalizedClaims(jwt.getClaims()), AccessToken.class);
+ return jsonMapper.convertValue(normalizedClaims(jwt.getClaims()), AccessToken.class);
}
private Map normalizedClaims(Map claims) {
diff --git a/src/main/java/dev/vality/orgmanager/util/JsonCodec.java b/src/main/java/dev/vality/orgmanager/util/JsonCodec.java
new file mode 100644
index 00000000..b2a6a270
--- /dev/null
+++ b/src/main/java/dev/vality/orgmanager/util/JsonCodec.java
@@ -0,0 +1,27 @@
+package dev.vality.orgmanager.util;
+
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import org.springframework.stereotype.Service;
+import tools.jackson.core.JacksonException;
+import tools.jackson.databind.json.JsonMapper;
+
+import java.util.Map;
+
+@Service
+@RequiredArgsConstructor
+public class JsonCodec {
+
+ private final JsonMapper jsonMapper;
+
+ @SneakyThrows(JacksonException.class)
+ public String toJson(Object data) {
+ return jsonMapper.writeValueAsString(data);
+ }
+
+ @SuppressWarnings("rawtypes")
+ @SneakyThrows(JacksonException.class)
+ public Map toMap(String json) {
+ return jsonMapper.readValue(json, Map.class);
+ }
+}
diff --git a/src/main/java/dev/vality/orgmanager/util/JsonMapper.java b/src/main/java/dev/vality/orgmanager/util/JsonMapper.java
deleted file mode 100644
index 27a3ec67..00000000
--- a/src/main/java/dev/vality/orgmanager/util/JsonMapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package dev.vality.orgmanager.util;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import org.springframework.stereotype.Service;
-
-import java.util.Map;
-
-@Service
-@RequiredArgsConstructor
-public class JsonMapper {
-
- private final ObjectMapper objectMapper;
-
- @SneakyThrows(JsonProcessingException.class)
- public String toJson(Object data) {
- return objectMapper.writeValueAsString(data);
- }
-
- @SuppressWarnings("rawtypes")
- @SneakyThrows(JsonProcessingException.class)
- public Map toMap(String json) {
- return objectMapper.readValue(json, Map.class);
- }
-}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a318fdad..c7941c52 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -92,8 +92,3 @@ bouncer:
access-check:
enabled: false
-
-otel:
- resource: http://localhost:4318/v1/traces
- timeout: 60000
- enabled: false
diff --git a/src/test/java/dev/vality/orgmanager/controller/AbstractControllerTest.java b/src/test/java/dev/vality/orgmanager/controller/AbstractControllerTest.java
index 8a96c7d2..f39fc712 100644
--- a/src/test/java/dev/vality/orgmanager/controller/AbstractControllerTest.java
+++ b/src/test/java/dev/vality/orgmanager/controller/AbstractControllerTest.java
@@ -1,20 +1,21 @@
package dev.vality.orgmanager.controller;
-import com.fasterxml.jackson.databind.ObjectMapper;
import dev.vality.orgmanager.repository.AbstractRepositoryTest;
import dev.vality.orgmanager.service.ResourceAccessService;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.bean.override.mockito.MockitoSpyBean;
import org.springframework.test.web.servlet.MockMvc;
+import org.wiremock.spring.ConfigureWireMock;
+import org.wiremock.spring.EnableWireMock;
+import tools.jackson.databind.json.JsonMapper;
@Import(KeycloakTestConfig.class)
@AutoConfigureMockMvc
-@AutoConfigureWireMock(port = 0)
+@EnableWireMock(@ConfigureWireMock(port = 0, baseUrlProperties = "wiremock.server.baseUrl"))
@TestPropertySource(
locations = "classpath:wiremock.properties",
properties = "auth.enabled=true"
@@ -37,7 +38,7 @@ public void setUp() throws Exception {
protected MockMvc mockMvc;
@Autowired
- protected ObjectMapper objectMapper;
+ protected JsonMapper objectMapper;
protected String generateJwt(long iat, long exp, String... roles) {
return keycloakOpenIdStub.generateJwt(iat, exp, roles);
diff --git a/src/test/java/dev/vality/orgmanager/converter/InvitationConverterTest.java b/src/test/java/dev/vality/orgmanager/converter/InvitationConverterTest.java
index 6f45c357..df6e3ffa 100644
--- a/src/test/java/dev/vality/orgmanager/converter/InvitationConverterTest.java
+++ b/src/test/java/dev/vality/orgmanager/converter/InvitationConverterTest.java
@@ -1,13 +1,19 @@
package dev.vality.orgmanager.converter;
-import com.fasterxml.jackson.databind.ObjectMapper;
import dev.vality.orgmanager.config.properties.InviteTokenProperties;
import dev.vality.orgmanager.entity.InvitationEntity;
import dev.vality.orgmanager.entity.MemberRoleEntity;
-import dev.vality.orgmanager.util.JsonMapper;
-import dev.vality.swag.organizations.model.*;
+import dev.vality.orgmanager.util.JsonCodec;
+import dev.vality.swag.organizations.model.Invitation;
+import dev.vality.swag.organizations.model.InvitationPending;
+import dev.vality.swag.organizations.model.InvitationRequest;
+import dev.vality.swag.organizations.model.InvitationStatusName;
+import dev.vality.swag.organizations.model.Invitee;
+import dev.vality.swag.organizations.model.InviteeContact;
+import dev.vality.swag.organizations.model.MemberRole;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import tools.jackson.databind.json.JsonMapper;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
@@ -36,7 +42,7 @@ public void setUp() {
when(inviteTokenProperties.getLifeTimeInDays()).thenReturn(30L);
converter = new InvitationConverter(
- new JsonMapper(new ObjectMapper()),
+ new JsonCodec(new JsonMapper()),
memberRoleConverter,
inviteTokenProperties
);
@@ -63,7 +69,9 @@ void shouldConvertToEntity() throws Exception {
assertThat(entity.getInviteeContactType()).isEqualTo(invitation.getInvitee().getContact().getType().getValue());
assertThat(entity.getOrganizationId()).isEqualTo(orgId);
assertThat(entity.getStatus()).isEqualTo(InvitationStatusName.PENDING.getValue());
- assertThat(entity.getMetadata()).isEqualTo(new ObjectMapper().writeValueAsString(invitation.getMetadata()));
+ String expectedMetadata = new JsonMapper()
+ .writeValueAsString(invitation.getMetadata());
+ assertThat(entity.getMetadata()).isEqualTo(expectedMetadata);
}
@Test
diff --git a/src/test/java/dev/vality/orgmanager/converter/OrganizationConverterTest.java b/src/test/java/dev/vality/orgmanager/converter/OrganizationConverterTest.java
index 4b13be14..b693a468 100644
--- a/src/test/java/dev/vality/orgmanager/converter/OrganizationConverterTest.java
+++ b/src/test/java/dev/vality/orgmanager/converter/OrganizationConverterTest.java
@@ -1,12 +1,12 @@
package dev.vality.orgmanager.converter;
-import com.fasterxml.jackson.databind.ObjectMapper;
import dev.vality.orgmanager.TestObjectFactory;
import dev.vality.orgmanager.entity.OrganizationEntity;
-import dev.vality.orgmanager.util.JsonMapper;
+import dev.vality.orgmanager.util.JsonCodec;
import dev.vality.swag.organizations.model.Organization;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import tools.jackson.databind.json.JsonMapper;
import java.util.Map;
@@ -20,8 +20,7 @@ class OrganizationConverterTest {
@BeforeEach
public void setUp() {
converter = new OrganizationConverter(
- new JsonMapper(
- new ObjectMapper()));
+ new JsonCodec(new JsonMapper()));
}
@Test
diff --git a/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java b/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java
index 8e8ea355..c5a3e1c3 100644
--- a/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java
+++ b/src/test/java/dev/vality/orgmanager/repository/AbstractRepositoryTest.java
@@ -11,7 +11,7 @@
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.context.TestPropertySource;
import org.springframework.transaction.annotation.Transactional;
-import org.testcontainers.containers.PostgreSQLContainer;
+import org.testcontainers.postgresql.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;
@ActiveProfiles("test")
@@ -69,7 +69,7 @@ static void beforeAll() {
}
@SuppressWarnings("rawtypes")
- static PostgreSQLContainer postgres = new PostgreSQLContainer<>(DockerImageName
+ static PostgreSQLContainer postgres = new PostgreSQLContainer(DockerImageName
.parse(POSTGRESQL_IMAGE_NAME)
.withTag(POSTGRESQL_VERSION));
diff --git a/src/test/java/dev/vality/orgmanager/service/BouncerServiceImplTest.java b/src/test/java/dev/vality/orgmanager/service/BouncerServiceImplTest.java
index 4a89c489..3ca63a8a 100644
--- a/src/test/java/dev/vality/orgmanager/service/BouncerServiceImplTest.java
+++ b/src/test/java/dev/vality/orgmanager/service/BouncerServiceImplTest.java
@@ -1,6 +1,12 @@
package dev.vality.orgmanager.service;
-import dev.vality.bouncer.decisions.*;
+import dev.vality.bouncer.decisions.ArbiterSrv;
+import dev.vality.bouncer.decisions.Context;
+import dev.vality.bouncer.decisions.Judgement;
+import dev.vality.bouncer.decisions.Resolution;
+import dev.vality.bouncer.decisions.ResolutionAllowed;
+import dev.vality.bouncer.decisions.ResolutionRestricted;
+import dev.vality.bouncer.decisions.RulesetNotFound;
import dev.vality.orgmanagement.UserNotFound;
import dev.vality.orgmanager.TestObjectFactory;
import dev.vality.orgmanager.config.properties.BouncerProperties;
@@ -11,16 +17,18 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.mockito.junit.jupiter.MockitoExtension;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
-@ExtendWith(SpringExtension.class)
+@ExtendWith(MockitoExtension.class)
class BouncerServiceImplTest {
@Mock
@@ -89,4 +97,4 @@ void havePrivilegesWithAllowedResolution() throws TException {
assertTrue(result);
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/dev/vality/orgmanager/service/ResourceAccessServiceImplTest.java b/src/test/java/dev/vality/orgmanager/service/ResourceAccessServiceImplTest.java
index 28a09f66..3f5418ba 100644
--- a/src/test/java/dev/vality/orgmanager/service/ResourceAccessServiceImplTest.java
+++ b/src/test/java/dev/vality/orgmanager/service/ResourceAccessServiceImplTest.java
@@ -12,7 +12,7 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.mockito.junit.jupiter.MockitoExtension;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
@@ -21,7 +21,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
-@ExtendWith(SpringExtension.class)
+@ExtendWith(MockitoExtension.class)
class ResourceAccessServiceImplTest {
private AccessProperties accessProperties;
@@ -75,7 +75,6 @@ void checkJoinOrgRightsWithNotExistOrg() {
ResourceDto resource = ResourceDto.builder()
.invitationToken(TestObjectFactory.randomString())
.build();
- when(bouncerService.havePrivileges(any(BouncerContextDto.class))).thenReturn(true);
when(organizationService.getOrgIdByInvitationToken(resource.getInvitationToken()))
.thenThrow(new ResourceNotFoundException());
@@ -120,7 +119,6 @@ void checkMemberRoleRightsWithNotExistRole() {
ResourceDto resource = ResourceDto.builder()
.memberRoleId(TestObjectFactory.randomString())
.build();
- when(bouncerService.havePrivileges(any(BouncerContextDto.class))).thenReturn(true);
when(memberRoleService.findById(resource.getMemberRoleId()))
.thenThrow(new ResourceNotFoundException());
@@ -154,4 +152,4 @@ void checkInvitationRights() {
assertDoesNotThrow(() -> resourceAccessService.checkRights(resource));
}
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/wiremock.properties b/src/test/resources/wiremock.properties
index d56ce677..83d00cf4 100644
--- a/src/test/resources/wiremock.properties
+++ b/src/test/resources/wiremock.properties
@@ -1,2 +1 @@
-wiremock.server.baseUrl=http://localhost:${wiremock.server.port}
keycloak.auth-server-url=${wiremock.server.baseUrl}/auth