Merge branch 'hotfix-rm-migration' into 'master'

RM migration creating unnecessary date formats table entries

See merge request redactmanager/persistence-service!772
This commit is contained in:
Maverick Studer 2024-10-09 10:34:39 +02:00
commit ec10bbdf8b
4 changed files with 119 additions and 54 deletions

View File

@ -7,6 +7,7 @@ import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
@ -33,6 +34,10 @@ public class AddDateFormatsToTemplatesMigration25 extends Migration {
@Autowired
DossierTemplatePersistenceService dossierTemplatePersistenceService;
@Value("${application.type}")
private String applicationType;
public AddDateFormatsToTemplatesMigration25() {
super(NAME, VERSION);
@ -43,13 +48,18 @@ public class AddDateFormatsToTemplatesMigration25 extends Migration {
@SneakyThrows
protected void migrate() {
if(!applicationType.equalsIgnoreCase("DocuMine")){
log.info("Skipping AddDateFormatsToTemplatesMigration25 as application type is not DocuMine!!!");
return;
}
List<DossierTemplateEntity> allDossierTemplates = dossierTemplatePersistenceService.getAllDossierTemplates();
allDossierTemplates.forEach(dt -> {
Resource resource = new ClassPathResource("files/dateFormats.txt");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8))) {
String dateFormats = reader.lines().collect(Collectors.joining(System.lineSeparator()));
dateFormatsPersistenceService.setDateFormats(dateFormats, dt.getId(), 0);
dateFormatsPersistenceService.setDateFormats(dateFormats, dt.getId(), -1);
} catch (Exception e) {
log.info("Could not update dossier template {}, error: {}", dt.getId(), e.getMessage());

View File

@ -15,6 +15,7 @@ import java.util.stream.Collectors;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.test.context.TestPropertySource;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateImportService;
@ -25,6 +26,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import lombok.SneakyThrows;
@TestPropertySource(properties = {"application.type=DocuMine"})
public class AddDateFormatsToTemplatesMigration25Test extends AbstractPersistenceServerServiceTest {
private static final String USER_ID = "TestUserId";

View File

@ -0,0 +1,106 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.MockitoAnnotations;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;
import com.iqser.red.persistence.service.v1.external.api.impl.controller.StatusController;
import com.iqser.red.persistence.service.v2.external.api.impl.controller.ComponentControllerV2;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLog;
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
public class ComponentControllerV2Test {
public static final String USER_ID = "user-111";
public static final String FILE_ID = "file-789";
public static final String DOSSIER_ID = "dossier-456";
public static final String DOSSIER_TEMPLATE_ID = "template-123";
@InjectMocks
private ComponentControllerV2 componentControllerV2;
@Mock
private UserService userService;
@Mock
private ComponentLogService componentLogService;
@Mock
private FileStatusService fileStatusService;
@Mock
private DossierTemplatePersistenceService dossierTemplatePersistenceService;
@Mock
private StatusController statusController;
@Mock
private ComponentLog mockComponentLog;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}
@Test
void shouldThrowNotAllowedExceptionIfUserHasInvalidRoles() {
User invalidUser = new User();
invalidUser.setUserId(USER_ID);
invalidUser.setRoles(Set.of("NON_ELIGIBLE_ROLE"));
when(userService.getUserById(USER_ID)).thenReturn(Optional.of(invalidUser));
try (MockedStatic<KeycloakSecurity> keycloakSecurityMock = mockStatic(KeycloakSecurity.class)) {
keycloakSecurityMock.when(KeycloakSecurity::getUserId).thenReturn(USER_ID);
assertThrows(NotAllowedException.class, () -> {
componentControllerV2.getComponents(DOSSIER_TEMPLATE_ID, DOSSIER_ID, FILE_ID, false);
});
}
}
@Test
void shouldNotThrowNotAllowedExceptionIfUserHasValidRoles() {
User validUser = new User();
validUser.setUserId(USER_ID);
validUser.setRoles(Set.of("RED_USER"));
User validManager = new User();
validManager.setUserId(USER_ID);
validManager.setRoles(Set.of("RED_MANAGER"));
when(componentLogService.getComponentLog(DOSSIER_ID, FILE_ID)).thenReturn(mockComponentLog);
when(mockComponentLog.getComponentLogEntries()).thenReturn(Collections.emptyList());
when(fileStatusService.getFileName(FILE_ID)).thenReturn("mock-file-name");
try (MockedStatic<KeycloakSecurity> keycloakSecurityMock = mockStatic(KeycloakSecurity.class)) {
keycloakSecurityMock.when(KeycloakSecurity::getUserId).thenReturn(USER_ID);
when(userService.getUserById(USER_ID)).thenReturn(Optional.of(validUser));
assertDoesNotThrow(() -> {
componentControllerV2.getComponents(DOSSIER_TEMPLATE_ID, DOSSIER_ID, FILE_ID, false);
});
when(userService.getUserById(USER_ID)).thenReturn(Optional.of(validManager));
assertDoesNotThrow(() -> {
componentControllerV2.getComponents(DOSSIER_TEMPLATE_ID, DOSSIER_ID, FILE_ID, false);
});
}
}
}

View File

@ -1,53 +0,0 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.peristence.v1.server.integration.client.ComponentClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.peristence.v1.server.integration.utils.TokenService;
import feign.FeignException;
public class ComponentTest extends AbstractPersistenceServerServiceTest {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private DossierTesterAndProvider dossierTesterAndProvider;
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
@Autowired
private ComponentClient componentClient;
@Autowired
private DossierTemplateClient dossierTemplateClient;
@Autowired
protected TokenService tokenService;
@Test
public void testGetComponentLogWithoutAppropriateRoles() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var dossierTemplate = dossierTemplateClient.getDossierTemplate(dossier.getDossierTemplateId());
var file = fileTesterAndProvider.testAndProvideFile(dossier, "filename");
Assertions.assertThrows(FeignException.NotFound.class, () -> componentClient.getComponents(dossierTemplate.getId(), dossier.getId(), file.getFileId(), true));
tokenService.setUser("manageradmin4@test.com", "secret");
Assertions.assertThrows(FeignException.Forbidden.class, () -> componentClient.getComponents(dossierTemplate.getId(), dossier.getId(), file.getFileId(), true));
}
}