RED-7578: Fixed order of endpoints, set swagger endpoint to /api, fixed not used Error codes in spec

This commit is contained in:
deiflaender 2023-09-14 13:46:11 +02:00
parent e9edfa12f7
commit cb269b8e86
10 changed files with 122 additions and 116 deletions

View File

@ -1,29 +1,5 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller; package com.iqser.red.persistence.service.v1.external.api.impl.controller;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.stream.Collectors;
import org.quartz.JobDataMap;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.support.MissingServletRequestPartException;
import com.fasterxml.jackson.databind.exc.InvalidFormatException; import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import com.iqser.red.commons.spring.ErrorMessage; import com.iqser.red.commons.spring.ErrorMessage;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
@ -31,9 +7,26 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.Confl
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantContext;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDataMap;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.support.MissingServletRequestPartException;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@ -44,6 +37,7 @@ public class ExternalControllerAdvice {
private final Scheduler scheduler; private final Scheduler scheduler;
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.NOT_FOUND) @ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(value = NotFoundException.class) @ExceptionHandler(value = NotFoundException.class)
@ -55,7 +49,7 @@ public class ExternalControllerAdvice {
/* error handling */ /* error handling */
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST) @ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = BadRequestException.class) @ExceptionHandler(value = BadRequestException.class)
@ -64,7 +58,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.CONFLICT) @ResponseStatus(value = HttpStatus.CONFLICT)
@ExceptionHandler(value = {ConflictException.class}) @ExceptionHandler(value = {ConflictException.class})
@ -73,7 +67,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.FORBIDDEN) @ResponseStatus(value = HttpStatus.FORBIDDEN)
@ExceptionHandler({AccessDeniedException.class}) @ExceptionHandler({AccessDeniedException.class})
@ -82,7 +76,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.FORBIDDEN) @ResponseStatus(value = HttpStatus.FORBIDDEN)
@ExceptionHandler({NotAllowedException.class}) @ExceptionHandler({NotAllowedException.class})
@ -91,7 +85,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler({org.springframework.security.acls.model.NotFoundException.class}) @ExceptionHandler({org.springframework.security.acls.model.NotFoundException.class})
@ -107,7 +101,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST) @ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler({MethodArgumentNotValidException.class}) @ExceptionHandler({MethodArgumentNotValidException.class})
@ -118,7 +112,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString)); return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString));
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST) @ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler({MissingServletRequestPartException.class}) @ExceptionHandler({MissingServletRequestPartException.class})
@ -127,7 +121,7 @@ public class ExternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler({HttpMessageNotReadableException.class}) @ExceptionHandler({HttpMessageNotReadableException.class})

View File

@ -12,7 +12,7 @@ import static com.iqser.red.service.persistence.service.v2.api.external.resource
import static com.iqser.red.service.persistence.service.v2.api.external.resource.FileResource.FILE_ID_PARAM; import static com.iqser.red.service.persistence.service.v2.api.external.resource.FileResource.FILE_ID_PARAM;
@RestController @RestController
@Tag(name = "components", description = "Provides operation related to components") @Tag(name = "4. component endpoints", description = "Provides operations related to components")
public class ComponentControllerV2 implements ComponentResource { public class ComponentControllerV2 implements ComponentResource {

View File

@ -21,7 +21,7 @@ import static com.iqser.red.service.persistence.service.v2.api.external.resource
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Tag(name = "dossiers", description = "Provides operation related to dossiers") @Tag(name = "2. dossier endpoints", description = "Provides operations related to dossiers")
public class DossierControllerV2 implements DossierResource { public class DossierControllerV2 implements DossierResource {
private final DossierTemplateController dossierTemplateController; private final DossierTemplateController dossierTemplateController;

View File

@ -12,7 +12,7 @@ import java.util.List;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Tag(name = "dossier-templates", description = "Provides operation related to dossier templates") @Tag(name = "1. dossier templates endpoints", description = "Provides operations related to dossier templates")
public class DossierTemplateControllerV2 implements DossierTemplateResource { public class DossierTemplateControllerV2 implements DossierTemplateResource {
private final DossierTemplateController dossierTemplateController; private final DossierTemplateController dossierTemplateController;

View File

@ -23,7 +23,7 @@ import static com.iqser.red.service.persistence.service.v2.api.external.resource
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Tag(name = "files", description = "Provides operation related to files") @Tag(name = "3. file endpoints", description = "Provides operations related to files")
public class FileControllerV2 implements FileResource { public class FileControllerV2 implements FileResource {
private final UploadController uploadController; private final UploadController uploadController;

View File

@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Tag(name = "license", description = "Provides operation related to the license") @Tag(name = "5. license endpoints", description = "Provides operations related to the license")
public class LicenseControllerV2 implements LicenseResource { public class LicenseControllerV2 implements LicenseResource {
private final LicenseReportController licenseReportController; private final LicenseReportController licenseReportController;

View File

@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.v1.internal.api.controller;
import com.iqser.red.commons.spring.ErrorMessage; import com.iqser.red.commons.spring.ErrorMessage;
import com.iqser.red.service.persistence.management.v1.processor.exception.*; import com.iqser.red.service.persistence.management.v1.processor.exception.*;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -23,6 +24,7 @@ public class InternalControllerAdvice {
/* error handling */ /* error handling */
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(value = NullPointerException.class) @ExceptionHandler(value = NullPointerException.class)
@ -33,6 +35,7 @@ public class InternalControllerAdvice {
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.NOT_FOUND) @ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(value = NotFoundException.class) @ExceptionHandler(value = NotFoundException.class)
@ -42,6 +45,7 @@ public class InternalControllerAdvice {
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.NOT_FOUND) @ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(value = DossierNotFoundException.class) @ExceptionHandler(value = DossierNotFoundException.class)
@ -51,6 +55,7 @@ public class InternalControllerAdvice {
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST) @ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = InvalidRulesException.class) @ExceptionHandler(value = InvalidRulesException.class)
@ -60,6 +65,7 @@ public class InternalControllerAdvice {
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.CONFLICT) @ResponseStatus(value = HttpStatus.CONFLICT)
@ExceptionHandler(value = ConflictException.class) @ExceptionHandler(value = ConflictException.class)
@ -68,7 +74,7 @@ public class InternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); return new ErrorMessage(OffsetDateTime.now(), e.getMessage());
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST) @ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = BadRequestException.class) @ExceptionHandler(value = BadRequestException.class)
@ -78,6 +84,7 @@ public class InternalControllerAdvice {
} }
@Hidden
@ResponseBody @ResponseBody
@ExceptionHandler(value = SQLException.class) @ExceptionHandler(value = SQLException.class)
public ResponseEntity<ErrorMessage> handleSQLException(SQLException e) { public ResponseEntity<ErrorMessage> handleSQLException(SQLException e) {
@ -96,6 +103,7 @@ public class InternalControllerAdvice {
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST) @ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = MethodArgumentNotValidException.class) @ExceptionHandler(value = MethodArgumentNotValidException.class)
@ -106,6 +114,7 @@ public class InternalControllerAdvice {
return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString)); return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString));
} }
@Hidden
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY) @ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY)
@ExceptionHandler(value = RulesTimeoutDetectedException.class) @ExceptionHandler(value = RulesTimeoutDetectedException.class)

View File

@ -0,0 +1,35 @@
package com.iqser.red.service.peristence.v1.server;
import com.knecon.fforesight.swaggercommons.SpringDocProperties;
import io.swagger.v3.oas.annotations.Hidden;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@Slf4j
@RestController
@RequiredArgsConstructor
@ConditionalOnProperty(value = "fforesight.springdoc.enabled", havingValue = "true")
public class SpringDocRedirectController {
@Value("${server.servlet.context-path:}")
private String contextPath;
private final SpringDocProperties springDocProperties;
@Hidden
@GetMapping({"/api", "/api/"})
public void home(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect(contextPath + springDocProperties.getBasePath() + "/docs/swagger-ui");
}
}

View File

@ -110,10 +110,10 @@ fforesight:
ignored-endpoints: [ '/redaction-gateway-v1','/actuator/health/**', '/redaction-gateway-v1/async/download/with-ott/**', ignored-endpoints: [ '/redaction-gateway-v1','/actuator/health/**', '/redaction-gateway-v1/async/download/with-ott/**',
'/internal-api/**', '/redaction-gateway-v1/docs/swagger-ui', '/internal-api/**', '/redaction-gateway-v1/docs/swagger-ui',
'/redaction-gateway-v1/docs/**','/redaction-gateway-v1/docs', '/redaction-gateway-v1/docs/**','/redaction-gateway-v1/docs',
'/api','/api/docs/**','/api/docs','/api/docs/swagger-ui' ] '/api', '/api/','/api/docs/**','/api/docs','/api/docs/swagger-ui' ]
enabled: true enabled: true
springdoc: springdoc:
base-path: '/redaction-gateway-v1' base-path: '/api'
auth-server-url: '/auth' auth-server-url: '/auth'
enabled: true enabled: true
default-client-id: 'swagger-ui-client' default-client-id: 'swagger-ui-client'
@ -142,8 +142,9 @@ springdoc:
client-id: swagger-ui-client client-id: swagger-ui-client
doc-expansion: none doc-expansion: none
config-url: ${fforesight.springdoc.base-path}/docs/swagger-config config-url: ${fforesight.springdoc.base-path}/docs/swagger-config
api-docs: api-docs:
path: ${fforesight.springdoc.base-path}/docs?tenantId=${fforesight.springdoc.default-tenant} path: ${fforesight.springdoc.base-path}/docs?tenantId=${fforesight.springdoc.default-tenant}
enabled: ${fforesight.springdoc.enabled} enabled: ${fforesight.springdoc.enabled}
pre-loading-enabled: true pre-loading-enabled: true
packages-to-scan: [ 'com.iqser.red.persistence.service.v1.external.api' ] packages-to-scan: [ 'com.iqser.red.persistence.service.v1.external.api', 'com.iqser.red.persistence.service.v2.external.api' ]

View File

@ -1,13 +1,37 @@
package com.iqser.red.service.peristence.v1.server.integration.utils; package com.iqser.red.service.peristence.v1.server.integration.utils;
import static org.mockito.Mockito.when; import com.iqser.red.service.peristence.v1.server.Application;
import com.iqser.red.service.peristence.v1.server.integration.client.ApplicationConfigClient;
import java.util.ArrayList; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
import java.util.Collections; import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService;
import java.util.List; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient;
import java.util.Set; import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import java.util.stream.Collectors; import com.iqser.red.service.persistence.management.v1.processor.client.searchservice.SearchClient;
import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.RedactionLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.*;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.*;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalsePositiveEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation;
import com.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.databasetenantcommons.providers.TenantCreatedListener;
import com.knecon.fforesight.databasetenantcommons.providers.events.TenantCreatedEvent;
import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
import com.knecon.fforesight.tenantcommons.TenantContext;
import com.knecon.fforesight.tenantcommons.TenantsClient;
import com.knecon.fforesight.tenantcommons.model.*;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists; import org.assertj.core.util.Lists;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@ -25,11 +49,7 @@ import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.*;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.core.StatementCallback;
import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.jdbc.datasource.SingleConnectionDataSource;
@ -45,68 +65,13 @@ import org.springframework.security.web.SecurityFilterChain;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.iqser.red.service.peristence.v1.server.Application; import java.util.ArrayList;
import com.iqser.red.service.peristence.v1.server.integration.client.ApplicationConfigClient; import java.util.Collections;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import java.util.List;
import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import java.util.Set;
import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import java.util.stream.Collectors;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.client.searchservice.SearchClient;
import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.RedactionLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ApplicationConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierStatusRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadStatusRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributeConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesGeneralConfigurationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.IndexInformationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationPreferencesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ViewedPagesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.ForceRedactionRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.LegalBasisChangeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.ManualRedactionRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.RecategorizationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.RemoveRedactionRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalsePositiveEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation;
import com.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.databasetenantcommons.providers.TenantCreatedListener;
import com.knecon.fforesight.databasetenantcommons.providers.events.TenantCreatedEvent;
import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
import com.knecon.fforesight.tenantcommons.TenantContext;
import com.knecon.fforesight.tenantcommons.TenantsClient;
import com.knecon.fforesight.tenantcommons.model.AuthDetails;
import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
import com.knecon.fforesight.tenantcommons.model.S3StorageConnection;
import com.knecon.fforesight.tenantcommons.model.SearchConnection;
import com.knecon.fforesight.tenantcommons.model.TenantResponse;
import io.micrometer.prometheus.PrometheusMeterRegistry; import static org.mockito.Mockito.when;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@ -116,6 +81,8 @@ import lombok.extern.slf4j.Slf4j;
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO") @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO")
public abstract class AbstractPersistenceServerServiceTest { public abstract class AbstractPersistenceServerServiceTest {
@MockBean @MockBean
protected Scheduler scheduler; protected Scheduler scheduler;
@MockBean @MockBean