diff --git a/pom.xml b/pom.xml index 14987f25..dc5c5714 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ 34 org.gridsuite.securityanalysis.server 1.0.5 + 5.0.0-alpha.14 1.18.2 @@ -87,6 +88,13 @@ + + com.squareup.okhttp3 + okhttp-bom + ${mockwebserver3.version} + pom + import + com.powsybl @@ -116,7 +124,11 @@ - + + com.vladmihalcea + db-util + ${db-util.version} + @@ -227,21 +239,6 @@ powsybl-iidm-test test - - junit - junit - test - - - org.junit.vintage - junit-vintage-engine - test - - - org.mockito - mockito-core - test - org.springframework.boot spring-boot-starter-test @@ -249,12 +246,7 @@ com.squareup.okhttp3 - okhttp - test - - - com.squareup.okhttp3 - mockwebserver + mockwebserver3-junit5 test @@ -270,7 +262,6 @@ com.vladmihalcea db-util - ${db-util.version} test @@ -279,5 +270,4 @@ test - diff --git a/src/main/java/org/gridsuite/securityanalysis/server/dto/CsvTranslationDTO.java b/src/main/java/org/gridsuite/securityanalysis/server/dto/CsvTranslationDTO.java index 5b77197c..7d4f4bb3 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/dto/CsvTranslationDTO.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/dto/CsvTranslationDTO.java @@ -1,6 +1,6 @@ package org.gridsuite.securityanalysis.server.dto; -import lombok.*; +import lombok.Builder; import java.util.List; import java.util.Map; diff --git a/src/main/java/org/gridsuite/securityanalysis/server/service/ActionsService.java b/src/main/java/org/gridsuite/securityanalysis/server/service/ActionsService.java index 8abc4b21..4e2a8a64 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/service/ActionsService.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/service/ActionsService.java @@ -7,7 +7,6 @@ package org.gridsuite.securityanalysis.server.service; import org.gridsuite.securityanalysis.server.dto.ContingencyInfos; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; @@ -39,7 +38,6 @@ public void setActionServiceBaseUri(String baseUri) { this.baseUri = baseUri; } - @Autowired public ActionsService( @Value("${gridsuite.services.actions-server.base-uri:http://actions-server/}") String baseUri, RestTemplate restTemplate) { diff --git a/src/main/java/org/gridsuite/securityanalysis/server/service/LoadFlowService.java b/src/main/java/org/gridsuite/securityanalysis/server/service/LoadFlowService.java index 6d0735a3..8e3135bf 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/service/LoadFlowService.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/service/LoadFlowService.java @@ -7,7 +7,6 @@ package org.gridsuite.securityanalysis.server.service; import org.gridsuite.securityanalysis.server.dto.LoadFlowParametersValues; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -28,7 +27,6 @@ public class LoadFlowService { private final RestTemplate restTemplate; - @Autowired public LoadFlowService(@Value("${gridsuite.services.loadflow-server.base-uri:http://loadflow-server/}") String baseUri, RestTemplate restTemplate) { this.baseUri = baseUri; this.restTemplate = restTemplate; diff --git a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisObserver.java b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisObserver.java index 123913bd..fb6e9c43 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisObserver.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisObserver.java @@ -4,7 +4,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - package org.gridsuite.securityanalysis.server.service; import com.powsybl.loadflow.LoadFlowResult; diff --git a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultService.java b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultService.java index d55dffca..1e59f723 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultService.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultService.java @@ -24,7 +24,6 @@ import org.gridsuite.securityanalysis.server.util.SecurityAnalysisException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.*; import org.springframework.data.jpa.domain.Specification; @@ -91,7 +90,6 @@ public class SecurityAnalysisResultService extends AbstractComputationResultServ AbstractLimitViolationEntity.Fields.side ); - @Autowired public SecurityAnalysisResultService(SecurityAnalysisResultRepository securityAnalysisResultRepository, ContingencyRepository contingencyRepository, PreContingencyLimitViolationRepository preContingencyLimitViolationRepository, @@ -238,6 +236,7 @@ public void insert(UUID resultUuid, SecurityAnalysisResult result, SecurityAnaly securityAnalysisResultRepository.save(securityAnalysisResult); } + @Override @Transactional public void insertStatus(List resultUuids, SecurityAnalysisStatus status) { Objects.requireNonNull(resultUuids); @@ -248,6 +247,7 @@ public void insertStatus(List resultUuids, SecurityAnalysisStatus status) }); } + @Override @Transactional public void delete(UUID resultUuid) { AtomicReference startTime = new AtomicReference<>(); @@ -271,11 +271,13 @@ private void deleteSecurityAnalysisResult(UUID resultId) { securityAnalysisResultRepository.deleteById(resultId); } + @Override @Transactional public void deleteAll() { securityAnalysisResultRepository.deleteAll(); } + @Override @Transactional(readOnly = true) public SecurityAnalysisStatus findStatus(UUID resultUuid) { Objects.requireNonNull(resultUuid); diff --git a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisService.java b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisService.java index b4a57b03..d5352d0b 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisService.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisService.java @@ -13,7 +13,7 @@ import com.powsybl.ws.commons.computation.service.AbstractComputationService; import com.powsybl.ws.commons.computation.service.NotificationService; import com.powsybl.ws.commons.computation.service.UuidGeneratorService; -import org.gridsuite.securityanalysis.server.dto.*; +import org.gridsuite.securityanalysis.server.dto.SecurityAnalysisStatus; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -37,6 +37,7 @@ public SecurityAnalysisService(SecurityAnalysisResultService securityAnalysisRes super(notificationService, securityAnalysisResultService, objectMapper, uuidGeneratorService, defaultProvider); } + @Override public UUID runAndSaveResult(SecurityAnalysisRunContext runContext) { Objects.requireNonNull(runContext); var resultUuid = uuidGeneratorService.generate(); @@ -47,6 +48,7 @@ public UUID runAndSaveResult(SecurityAnalysisRunContext runContext) { return resultUuid; } + @Override public List getProviders() { return SecurityAnalysisProvider.findAll().stream() .map(SecurityAnalysisProvider::getName) diff --git a/src/test/java/org/gridsuite/securityanalysis/server/FindContingenciesTest.java b/src/test/java/org/gridsuite/securityanalysis/server/FindContingenciesTest.java index 87d03186..5ac54bd0 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/FindContingenciesTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/FindContingenciesTest.java @@ -12,7 +12,10 @@ import org.gridsuite.securityanalysis.server.dto.ResourceFilterDTO; import org.gridsuite.securityanalysis.server.dto.SecurityAnalysisStatus; import org.gridsuite.securityanalysis.server.dto.SubjectLimitViolationDTO; -import org.gridsuite.securityanalysis.server.entities.*; +import org.gridsuite.securityanalysis.server.entities.AbstractLimitViolationEntity; +import org.gridsuite.securityanalysis.server.entities.ContingencyEntity; +import org.gridsuite.securityanalysis.server.entities.SecurityAnalysisResultEntity; +import org.gridsuite.securityanalysis.server.entities.SubjectLimitViolationEntity; import org.gridsuite.securityanalysis.server.repositories.SecurityAnalysisResultRepository; import org.gridsuite.securityanalysis.server.repositories.specifications.SpecificationUtils; import org.gridsuite.securityanalysis.server.service.SecurityAnalysisResultService; @@ -49,12 +52,12 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) // improve tests speed as we only read DB class FindContingenciesTest { @Autowired - SecurityAnalysisResultRepository securityAnalysisResultRepository; + private SecurityAnalysisResultRepository securityAnalysisResultRepository; - SecurityAnalysisResultEntity resultEntity; + private SecurityAnalysisResultEntity resultEntity; @Autowired - SecurityAnalysisResultService securityAnalysisResultService; + private SecurityAnalysisResultService securityAnalysisResultService; @BeforeAll void setUp() { @@ -106,40 +109,40 @@ void testSortAndFilterErrors(List filters, Pageable pageable, assertEquals(expectedException.getMessage(), exception.getMessage()); } - private Stream providePageableAndSortOnly() { + private static Stream providePageableAndSortOnly() { return Stream.of( - Arguments.of(List.of(), PageRequest.of(0, 5, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), RESULT_CONTINGENCIES.stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList().subList(0, 5), 5), - Arguments.of(List.of(), PageRequest.of(0, 5, Sort.by(Sort.Direction.DESC, ContingencyEntity.Fields.contingencyId)), RESULT_CONTINGENCIES.stream().sorted(Comparator.comparing(this::getContingencyResultDTOId).reversed()).toList().subList(0, 5), 5) + Arguments.of(List.of(), PageRequest.of(0, 5, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), RESULT_CONTINGENCIES.stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList().subList(0, 5), 5), + Arguments.of(List.of(), PageRequest.of(0, 5, Sort.by(Sort.Direction.DESC, ContingencyEntity.Fields.contingencyId)), RESULT_CONTINGENCIES.stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId).reversed()).toList().subList(0, 5), 5) ); } - private Stream provideParentFilter() { + private static Stream provideParentFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "3", ContingencyEntity.Fields.contingencyId)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().contains("3")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4), + RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().contains("3")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.STARTS_WITH, "l", ContingencyEntity.Fields.contingencyId)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().startsWith("l")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4), + RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().startsWith("l")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.STARTS_WITH, "3", ContingencyEntity.Fields.contingencyId)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().startsWith("3")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 1) + RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().startsWith("3")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 1) ); } - private Stream provideChildFilter() { + private static Stream provideChildFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "l6", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId)), PageRequest.of(0, 2, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), getResultContingenciesWithNestedFilter(lm -> lm.getSubjectId().equals("l6")) - .stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList() + .stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList() .subList(0, 2), 5), // find 1st page of size 2 of contingencies, filtered by SubjectId Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.STARTS_WITH, "CURRENT", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.limitType)), PageRequest.of(0, 2, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), getResultContingenciesWithNestedFilter(lm -> lm.getLimitViolation().getLimitType().equals(LimitViolationType.CURRENT)) - .stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList() + .stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList() .subList(0, 2), 5), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "not_found", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId)), PageRequest.of(0, 2, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), List.of(), 1) // filter by not found limit_violation ); } - private Stream provideChildSorting() { + private static Stream provideChildSorting() { return Stream.of( buildArgumentsForChildrenSorting( Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), @@ -181,7 +184,7 @@ private Stream provideChildSorting() { ); } - private Arguments buildArgumentsForChildrenSorting(Sort childrenSort, Comparator childrenComparator) { + private static Arguments buildArgumentsForChildrenSorting(Sort childrenSort, Comparator childrenComparator) { return Arguments.of( List.of(), PageRequest.of(0, 5, @@ -189,22 +192,22 @@ private Arguments buildArgumentsForChildrenSorting(Sort childrenSort, Comparator .and(childrenSort)), getResultContingenciesSorted( childrenComparator, - Comparator.comparing(this::getContingencyResultDTOId)) + Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)) .subList(0, 5), 5); } - private Stream provideEachColumnFilter() { + private static Stream provideEachColumnFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "CO", ContingencyEntity.Fields.status)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getStatus().contains("CO")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4), + RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getStatus().contains("CO")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, "ONE", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.side)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - getResultContingenciesWithNestedFilter(lm -> lm.getLimitViolation().getSide() != null && lm.getLimitViolation().getSide().equals(ThreeSides.ONE)).stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4), + getResultContingenciesWithNestedFilter(lm -> lm.getLimitViolation().getSide() != null && lm.getLimitViolation().getSide().equals(ThreeSides.ONE)).stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, "l6_name", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.limitName)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - getResultContingenciesWithNestedFilter(lm -> lm.getLimitViolation().getLimitName().equals("l6_name")).stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4) + getResultContingenciesWithNestedFilter(lm -> lm.getLimitViolation().getLimitName().equals("l6_name")).stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4) ); } - private Stream provideCollectionOfFilters() { + private static Stream provideCollectionOfFilters() { return Stream.of( Arguments.of( List.of( @@ -213,7 +216,7 @@ private Stream provideCollectionOfFilters() { new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, "CONVERGED", ContingencyEntity.Fields.status) ), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().contains("l") && c.getContingency().getContingencyId().contains("3") && c.getContingency().getStatus().equals("CONVERGED")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), + RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getContingencyId().contains("l") && c.getContingency().getContingencyId().contains("3") && c.getContingency().getStatus().equals("CONVERGED")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), // list of parent filters Arguments.of( List.of( @@ -221,7 +224,7 @@ private Stream provideCollectionOfFilters() { new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, "CURRENT", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.limitType) ), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - getResultContingenciesWithNestedFilter(c -> c.getSubjectId().equals("l6") && c.getLimitViolation().getLimitType().equals(LimitViolationType.CURRENT)).stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), + getResultContingenciesWithNestedFilter(c -> c.getSubjectId().equals("l6") && c.getLimitViolation().getLimitType().equals(LimitViolationType.CURRENT)).stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), // list of children filters Arguments.of( List.of( @@ -230,27 +233,27 @@ private Stream provideCollectionOfFilters() { new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, "CURRENT", ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.limitType) ), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - getResultContingenciesWithNestedFilter(c -> c.getLimitViolation().getLimitType().equals(LimitViolationType.CURRENT)).stream().filter(c -> c.getContingency().getContingencyId().contains("1") && c.getContingency().getContingencyId().contains("l")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), + getResultContingenciesWithNestedFilter(c -> c.getLimitViolation().getLimitType().equals(LimitViolationType.CURRENT)).stream().filter(c -> c.getContingency().getContingencyId().contains("1") && c.getContingency().getContingencyId().contains("l")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4) // mix of children and parent filter ); } - private Stream provideEdgeCasesFilters() { + private static Stream provideEdgeCasesFilters() { return Stream.of( - Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), RESULT_CONTINGENCIES.stream().sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4), // empty list of filter + Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), RESULT_CONTINGENCIES.stream().sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4), // empty list of filter Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "co", ContingencyEntity.Fields.status)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, ContingencyEntity.Fields.contingencyId)), - RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getStatus().contains("CO")).sorted(Comparator.comparing(this::getContingencyResultDTOId)).toList(), 4) // case insensitive search test + RESULT_CONTINGENCIES.stream().filter(c -> c.getContingency().getStatus().contains("CO")).sorted(Comparator.comparing(FindContingenciesTest::getContingencyResultDTOId)).toList(), 4) // case insensitive search test ); } - private Stream provideForbiddenSort() { + private static Stream provideForbiddenSort() { return Stream.of( Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, "limitType")), new SecurityAnalysisException(SecurityAnalysisException.Type.INVALID_SORT_FORMAT)), Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.DESC, "side")), new SecurityAnalysisException(SecurityAnalysisException.Type.INVALID_SORT_FORMAT)) ); } - private Stream provideForbiddenFilter() { + private static Stream provideForbiddenFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.EQUALS, 300, ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.limit)), PageRequest.of(0, 30), new IllegalArgumentException("The filter type EQUALS is not supported with the data type NUMBER")), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.CONTAINS, 300, ContingencyEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.value)), PageRequest.of(0, 30), new IllegalArgumentException("The filter type CONTAINS is not supported with the data type NUMBER")), @@ -259,7 +262,7 @@ private Stream provideForbiddenFilter() { ); } - private String getContingencyResultDTOId(ContingencyResultDTO contingencyResultDTO) { + private static String getContingencyResultDTOId(ContingencyResultDTO contingencyResultDTO) { return contingencyResultDTO.getContingency().getContingencyId(); } } diff --git a/src/test/java/org/gridsuite/securityanalysis/server/FindPreContingencyLimitViolationTest.java b/src/test/java/org/gridsuite/securityanalysis/server/FindPreContingencyLimitViolationTest.java index 9cd6c7c4..c9e934f5 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/FindPreContingencyLimitViolationTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/FindPreContingencyLimitViolationTest.java @@ -44,12 +44,12 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) // improve tests speed as we only read DB class FindPreContingencyLimitViolationTest { @Autowired - SecurityAnalysisResultRepository securityAnalysisResultRepository; + private SecurityAnalysisResultRepository securityAnalysisResultRepository; - SecurityAnalysisResultEntity resultEntity; + private SecurityAnalysisResultEntity resultEntity; @Autowired - SecurityAnalysisResultService securityAnalysisResultService; + private SecurityAnalysisResultService securityAnalysisResultService; @BeforeAll void setUp() { @@ -79,14 +79,14 @@ void findFilteredPrecontingencyLimitViolationResultsTest(List assertSelectCount(expectedSelectCount); } - private Stream provideSortOnly() { + private static Stream provideSortOnly() { return Stream.of( Arguments.of(List.of(), Sort.by(Sort.Direction.ASC, AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), RESULT_PRECONTINGENCY.stream().sorted(Comparator.comparing(PreContingencyLimitViolationResultDTO::getSubjectId)).toList(), 2), Arguments.of(List.of(), Sort.by(Sort.Direction.DESC, AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), RESULT_PRECONTINGENCY.stream().sorted(Comparator.comparing(PreContingencyLimitViolationResultDTO::getSubjectId).reversed()).toList(), 2) ); } - private Stream provideParentFilter() { + private static Stream provideParentFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "3", AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId)), Sort.by(Sort.Direction.ASC, AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), RESULT_PRECONTINGENCY.stream().sorted(Comparator.comparing(PreContingencyLimitViolationResultDTO::getSubjectId)).filter(c -> c.getSubjectId().contains("3")).toList(), 2), @@ -97,7 +97,7 @@ private Stream provideParentFilter() { ); } - private Stream provideChildFilter() { + private static Stream provideChildFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "l6", AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId)), Sort.by(Sort.Direction.ASC, AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), getResultPreContingencyWithNestedFilter(p -> p.getSubjectId().contains("l6")) @@ -108,7 +108,7 @@ private Stream provideChildFilter() { ); } - private Stream provideChildFilterWithTolerance() { + private static Stream provideChildFilterWithTolerance() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.NOT_EQUAL, "11.02425", AbstractLimitViolationEntity.Fields.value), new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.LESS_THAN_OR_EQUAL, "10.51243", AbstractLimitViolationEntity.Fields.limit), @@ -118,7 +118,7 @@ private Stream provideChildFilterWithTolerance() { ); } - private Stream provideEachColumnFilter() { + private static Stream provideEachColumnFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, "ONE", AbstractLimitViolationEntity.Fields.side)), Sort.by(Sort.Direction.ASC, AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), getResultPreContingencyWithNestedFilter(c -> c.getLimitViolation().getSide() != null && c.getLimitViolation().getSide().equals(ThreeSides.ONE)).stream().sorted(Comparator.comparing(PreContingencyLimitViolationResultDTO::getSubjectId)).toList(), 2), diff --git a/src/test/java/org/gridsuite/securityanalysis/server/FindSubjectLimitViolationsTest.java b/src/test/java/org/gridsuite/securityanalysis/server/FindSubjectLimitViolationsTest.java index 0ac29d30..8c07fba8 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/FindSubjectLimitViolationsTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/FindSubjectLimitViolationsTest.java @@ -8,7 +8,10 @@ import com.powsybl.iidm.network.ThreeSides; import com.powsybl.security.LimitViolationType; -import org.gridsuite.securityanalysis.server.dto.*; +import org.gridsuite.securityanalysis.server.dto.ContingencyLimitViolationDTO; +import org.gridsuite.securityanalysis.server.dto.ResourceFilterDTO; +import org.gridsuite.securityanalysis.server.dto.SecurityAnalysisStatus; +import org.gridsuite.securityanalysis.server.dto.SubjectLimitViolationResultDTO; import org.gridsuite.securityanalysis.server.entities.*; import org.gridsuite.securityanalysis.server.repositories.SecurityAnalysisResultRepository; import org.gridsuite.securityanalysis.server.repositories.specifications.SpecificationUtils; @@ -46,12 +49,12 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) // improve tests speed as we only read DB class FindSubjectLimitViolationsTest { @Autowired - SecurityAnalysisResultRepository securityAnalysisResultRepository; + private SecurityAnalysisResultRepository securityAnalysisResultRepository; - SecurityAnalysisResultEntity resultEntity; + private SecurityAnalysisResultEntity resultEntity; @Autowired - SecurityAnalysisResultService securityAnalysisResultService; + private SecurityAnalysisResultService securityAnalysisResultService; @BeforeAll void setUp() { @@ -82,7 +85,7 @@ void findFilteredSubjectLimitViolationResultsTest(List filter assertThat(subjectLimitViolationPage.getContent().stream() .map(SubjectLimitViolationResultDTO::toDto) .map(lm -> lm.getContingencies().stream().map(c -> c.getContingency().getContingencyId()).toList())) - .containsExactlyElementsOf(expectedResult.stream().map(c -> c.getContingencies().stream().map(this::getContingencyLimitViolationDTOContingencyId).toList()).toList()); + .containsExactlyElementsOf(expectedResult.stream().map(c -> c.getContingencies().stream().map(FindSubjectLimitViolationsTest::getContingencyLimitViolationDTOContingencyId).toList()).toList()); // select count check to prevent potential n+1 problems // 1 -> parent UUIDs ; empty parents, no count or children request @@ -101,7 +104,7 @@ void testSortAndFilterErrors(List filters, Pageable pageable, assertEquals(expectedException.getMessage(), exception.getMessage()); } - private Stream providePageableAndSortOnly() { + private static Stream providePageableAndSortOnly() { return Stream.of( Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, "subjectId")), RESULT_CONSTRAINTS.stream().sorted(Comparator.comparing(SubjectLimitViolationResultDTO::getSubjectId)).toList(), 4), Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.DESC, "subjectId")), RESULT_CONSTRAINTS.stream().sorted(Comparator.comparing(SubjectLimitViolationResultDTO::getSubjectId).reversed()).toList(), 4), @@ -110,7 +113,7 @@ private Stream providePageableAndSortOnly() { ); } - private Stream provideParentFilter() { + private static Stream provideParentFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "3", SubjectLimitViolationEntity.Fields.subjectId)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, "subjectId")), RESULT_CONSTRAINTS.stream().sorted(Comparator.comparing(SubjectLimitViolationResultDTO::getSubjectId)).filter(c -> c.getSubjectId().contains("3")).toList(), 4), @@ -121,7 +124,7 @@ private Stream provideParentFilter() { ); } - private Stream provideChildFilter() { + private static Stream provideChildFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "2", SubjectLimitViolationEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + ContingencyLimitViolationEntity.Fields.contingency + SpecificationUtils.FIELD_SEPARATOR + ContingencyEntity.Fields.contingencyId)), PageRequest.of(0, 2, Sort.by(Sort.Direction.ASC, "subjectId")), getResultConstraintsWithNestedFilter(c -> c.getContingency().getContingencyId().contains("2")) @@ -134,7 +137,7 @@ private Stream provideChildFilter() { ); } - private Stream provideChildSorting() { + private static Stream provideChildSorting() { return Stream.of( buildArgumentsForChildrenSorting( Sort.by(Sort.Direction.ASC, SubjectLimitViolationEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + ContingencyLimitViolationEntity.Fields.contingency + SpecificationUtils.FIELD_SEPARATOR + ContingencyEntity.Fields.contingencyId), @@ -180,7 +183,7 @@ private Stream provideChildSorting() { ); } - private Arguments buildArgumentsForChildrenSorting(Sort childrenSort, Comparator childrenComparator) { + private static Arguments buildArgumentsForChildrenSorting(Sort childrenSort, Comparator childrenComparator) { return Arguments.of( List.of(), PageRequest.of(0, 4, @@ -192,7 +195,7 @@ private Arguments buildArgumentsForChildrenSorting(Sort childrenSort, Comparator .subList(0, 4), 5); } - private Stream provideEachColumnFilter() { + private static Stream provideEachColumnFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.CONTAINS, "CO", SubjectLimitViolationEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + ContingencyLimitViolationEntity.Fields.contingency + SpecificationUtils.FIELD_SEPARATOR + ContingencyEntity.Fields.status)), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, "subjectId")), getResultConstraintsWithNestedFilter(c -> c.getContingency().getStatus().contains("CO")).stream().sorted(Comparator.comparing(SubjectLimitViolationResultDTO::getSubjectId)).toList(), 4), @@ -203,21 +206,21 @@ private Stream provideEachColumnFilter() { ); } - private Stream provideForbiddenSort() { + private static Stream provideForbiddenSort() { return Stream.of( Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.ASC, "contingencyId")), new SecurityAnalysisException(SecurityAnalysisException.Type.INVALID_SORT_FORMAT)), Arguments.of(List.of(), PageRequest.of(0, 30, Sort.by(Sort.Direction.DESC, "side")), new SecurityAnalysisException(SecurityAnalysisException.Type.INVALID_SORT_FORMAT)) ); } - private Stream provideForbiddenFilter() { + private static Stream provideForbiddenFilter() { return Stream.of( Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.CONTAINS, 3, SubjectLimitViolationEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.limit)), PageRequest.of(0, 30), new IllegalArgumentException("The filter type CONTAINS is not supported with the data type NUMBER")), Arguments.of(List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.EQUALS, 45, SubjectLimitViolationEntity.Fields.contingencyLimitViolations + SpecificationUtils.FIELD_SEPARATOR + AbstractLimitViolationEntity.Fields.value)), PageRequest.of(0, 30), new IllegalArgumentException("The filter type EQUALS is not supported with the data type NUMBER")) ); } - private String getContingencyLimitViolationDTOContingencyId(ContingencyLimitViolationDTO contingencyLimitViolationDTO) { + private static String getContingencyLimitViolationDTOContingencyId(ContingencyLimitViolationDTO contingencyLimitViolationDTO) { return contingencyLimitViolationDTO.getContingency().getContingencyId(); } } diff --git a/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisControllerTest.java b/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisControllerTest.java index 05a9eef7..93b28428 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisControllerTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisControllerTest.java @@ -6,13 +6,13 @@ */ package org.gridsuite.securityanalysis.server; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; -import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import com.powsybl.commons.report.ReportNode; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.ThreeSides; @@ -24,8 +24,9 @@ import com.powsybl.network.store.client.PreloadingStrategy; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; import com.powsybl.security.*; +import com.powsybl.ws.commons.computation.service.ReportService; +import com.powsybl.ws.commons.computation.service.UuidGeneratorService; import com.vladmihalcea.sql.SQLStatementCountValidator; -import lombok.SneakyThrows; import org.assertj.core.api.Assertions; import org.gridsuite.securityanalysis.server.dto.*; import org.gridsuite.securityanalysis.server.entities.AbstractLimitViolationEntity; @@ -34,25 +35,22 @@ import org.gridsuite.securityanalysis.server.repositories.specifications.SpecificationUtils; import org.gridsuite.securityanalysis.server.service.ActionsService; import org.gridsuite.securityanalysis.server.service.LoadFlowService; -import com.powsybl.ws.commons.computation.service.ReportService; import org.gridsuite.securityanalysis.server.service.SecurityAnalysisWorkerService; -import com.powsybl.ws.commons.computation.service.UuidGeneratorService; import org.gridsuite.securityanalysis.server.util.ContextConfigurationWithTestChannel; import org.gridsuite.securityanalysis.server.util.CsvExportUtils; import org.gridsuite.securityanalysis.server.util.MatcherJson; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.MockitoAnnotations; 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.boot.test.mock.mockito.MockBean; import org.springframework.cloud.stream.binder.test.OutputDestination; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.messaging.Message; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.StreamUtils; @@ -68,14 +66,15 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import static com.powsybl.network.store.model.NetworkStoreApi.VERSION; -import static org.gridsuite.securityanalysis.server.SecurityAnalysisProviderMock.*; import static com.powsybl.ws.commons.computation.service.NotificationService.*; +import static org.gridsuite.securityanalysis.server.SecurityAnalysisProviderMock.*; import static org.gridsuite.securityanalysis.server.service.SecurityAnalysisService.COMPUTATION_TYPE; import static org.gridsuite.securityanalysis.server.util.DatabaseQueryUtils.assertRequestsCount; import static org.gridsuite.securityanalysis.server.util.TestUtils.assertLogMessage; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.doNothing; @@ -89,11 +88,10 @@ * @author Geoffroy Jamgotchian */ -@RunWith(SpringRunner.class) @AutoConfigureMockMvc @SpringBootTest @ContextConfigurationWithTestChannel -public class SecurityAnalysisControllerTest { +class SecurityAnalysisControllerTest { private static final UUID NETWORK_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); private static final UUID NETWORK_STOP_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e6"); @@ -133,9 +131,9 @@ public class SecurityAnalysisControllerTest { private ObjectMapper mapper; @Autowired - SubjectLimitViolationRepository subjectLimitViolationRepository; + private SubjectLimitViolationRepository subjectLimitViolationRepository; - private final Map enumTranslationsEn = Map.of( + private static final Map ENUM_TRANSLATIONS_EN = Map.of( "ONE", "Side 1", "TWO", "Side 2", "CURRENT", "Current", @@ -145,7 +143,7 @@ public class SecurityAnalysisControllerTest { "permanent", "IST" ); - private final Map enumTranslationsFr = Map.of( + private static final Map ENUM_TRANSLATIONS_FR = Map.of( "ONE", "Côté 1", "TWO", "Côté 2", "CURRENT", "Intensité", @@ -155,8 +153,8 @@ public class SecurityAnalysisControllerTest { "permanent", "IST" ); - @Before - public void setUp() throws Exception { + @BeforeEach + void setUp() throws Exception { WireMockServer wireMockServer = new WireMockServer(wireMockConfig().dynamicPort()); wireMockServer.start(); @@ -196,7 +194,7 @@ public void setUp() throws Exception { .specificParameters(Map.of("reactiveRangeCheckMode", "TARGET_P", "plausibleActivePowerLimit", "5000.0")) .build(); wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/parameters/.*/values\\?provider=.*")) - .willReturn(WireMock.ok().withHeader("Content-Type", "application/json").withBody(mapper.writeValueAsString(loadFlowParametersValues)))); + .willReturn(WireMock.ok().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).withBody(mapper.writeValueAsString(loadFlowParametersValues)))); // purge messages while (output.receive(1000, "sa.result") != null) { @@ -213,14 +211,13 @@ public void setUp() throws Exception { } // added for testStatus can return null, after runTest - @After - public void tearDown() throws Exception { + @AfterEach + void tearDown() throws Exception { mockMvc.perform(delete("/" + VERSION + "/results")) .andExpect(status().isOk()); } - @SneakyThrows - public void simpleRunRequest(SecurityAnalysisParametersInfos lfParams) { + private void simpleRunRequest(SecurityAnalysisParametersInfos lfParams) throws Exception { MvcResult mvcResult = mockMvc.perform(post("/" + VERSION + "/networks/" + NETWORK_UUID + "/run?reportType=SecurityAnalysis&contingencyListName=" + CONTINGENCY_LIST_NAME_VARIANT + "&variantId=" + VARIANT_3_ID + "&loadFlowParametersUuid=" + UUID.randomUUID()) .contentType(MediaType.APPLICATION_JSON) .header(HEADER_USER_ID, "testUserId") @@ -235,8 +232,7 @@ public void simpleRunRequest(SecurityAnalysisParametersInfos lfParams) { } @Test - @SneakyThrows - public void runTestWithLFParams() { + void runTestWithLFParams() throws Exception { // run with some empty params simpleRunRequest(SecurityAnalysisParametersInfos.builder().build()); // with default LFParams @@ -251,7 +247,7 @@ public void runTestWithLFParams() { } @Test - public void runTest() throws Exception { + void runTest() throws Exception { MvcResult mvcResult; String resultAsString; @@ -283,7 +279,7 @@ public void runTest() throws Exception { } @Test - public void runAndSaveTest() throws Exception { + void runAndSaveTest() throws Exception { MvcResult mvcResult; String resultAsString; @@ -350,7 +346,7 @@ public void runAndSaveTest() throws Exception { } @Test - public void testDeterministicResults() throws Exception { + void testDeterministicResults() throws Exception { MvcResult mvcResult; String resultAsString; SQLStatementCountValidator.reset(); @@ -411,50 +407,35 @@ public void testDeterministicResults() throws Exception { assertEquals(expectedResultInOrder, result); } - private String buildFilterUrl() { - String filterUrl = ""; - try { - - List filters = List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.STARTS_WITH, "vl1", AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), - new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, new String[]{"HIGH_VOLTAGE"}, AbstractLimitViolationEntity.Fields.limitType), - new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.GREATER_THAN_OR_EQUAL, "399", AbstractLimitViolationEntity.Fields.limit), - new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.LESS_THAN_OR_EQUAL, "420", AbstractLimitViolationEntity.Fields.value), - new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.NOT_EQUAL, "2", AbstractLimitViolationEntity.Fields.acceptableDuration) - ); - - String jsonFilters = new ObjectMapper().writeValueAsString(filters); - - filterUrl = "filters=" + URLEncoder.encode(jsonFilters, StandardCharsets.UTF_8); - - return filterUrl; - } catch (Exception e) { - e.printStackTrace(); - } - return filterUrl; + private static String buildFilterUrl() throws JsonProcessingException { + List filters = List.of(new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.STARTS_WITH, "vl1", AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId), + new ResourceFilterDTO(ResourceFilterDTO.DataType.TEXT, ResourceFilterDTO.Type.EQUALS, new String[]{"HIGH_VOLTAGE"}, AbstractLimitViolationEntity.Fields.limitType), + new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.GREATER_THAN_OR_EQUAL, "399", AbstractLimitViolationEntity.Fields.limit), + new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.LESS_THAN_OR_EQUAL, "420", AbstractLimitViolationEntity.Fields.value), + new ResourceFilterDTO(ResourceFilterDTO.DataType.NUMBER, ResourceFilterDTO.Type.NOT_EQUAL, "2", AbstractLimitViolationEntity.Fields.acceptableDuration) + ); + String jsonFilters = new ObjectMapper().writeValueAsString(filters); + return "filters=" + URLEncoder.encode(jsonFilters, StandardCharsets.UTF_8); } private void assertFiltredResultN() throws Exception { - MvcResult mvcResult = mockMvc.perform(get("/" + VERSION + "/results/" + RESULT_UUID + "/n-result?" + buildFilterUrl())) .andExpectAll( status().isOk(), content().contentType(MediaType.APPLICATION_JSON) ).andReturn(); String resultAsString = mvcResult.getResponse().getContentAsString(); - List preContingencyResult = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List preContingencyResult = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(1, preContingencyResult.size()); } private void checkNResultEnumFilters(UUID resultUuid) throws Exception { - MvcResult mvcResult = mockMvc.perform(get("/" + VERSION + "/results/" + resultUuid + "/n-result")) .andExpectAll( status().isOk(), content().contentType(MediaType.APPLICATION_JSON)).andReturn(); - List nResults = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { - }); + List nResults = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); List expectedLimitTypes = nResults.stream().map(result -> result.getLimitViolation().getLimitType()).distinct().toList(); mvcResult = mockMvc.perform(get("/" + VERSION + "/results/{resultUuid}/n-limit-types", resultUuid)) @@ -515,7 +496,7 @@ private void checkNmKResultEnumFilters(UUID resultUuid) throws Exception { } @Test - public void runWithTwoLists() throws Exception { + void runWithTwoLists() throws Exception { MvcResult mvcResult; String resultAsString; mvcResult = mockMvc.perform(post("/" + VERSION + "/networks/" + NETWORK_UUID + "/run?reportType=SecurityAnalysis&contingencyListName=" + CONTINGENCY_LIST_NAME + @@ -532,7 +513,7 @@ public void runWithTwoLists() throws Exception { } @Test - public void deleteResultsTest() throws Exception { + void deleteResultsTest() throws Exception { MvcResult mvcResult; String resultAsString; @@ -557,7 +538,7 @@ public void deleteResultsTest() throws Exception { } @Test - public void testStatus() throws Exception { + void testStatus() throws Exception { MvcResult mvcResult; String resultAsString; @@ -620,7 +601,7 @@ public void testStatus() throws Exception { } @Test - public void stopTest() throws Exception { + void stopTest() throws Exception { countDownLatch = new CountDownLatch(1); new Thread(() -> { @@ -659,7 +640,7 @@ public void stopTest() throws Exception { } @Test - public void testStopAndFail() throws Exception { + void testStopAndFail() throws Exception { UUID randomUuid = UUID.randomUUID(); mockMvc.perform(put("/" + VERSION + "/results/" + randomUuid + "/stop" + "?receiver=me") .header(HEADER_USER_ID, "testUserId")) @@ -672,7 +653,7 @@ public void testStopAndFail() throws Exception { } @Test - public void runTestWithError() throws Exception { + void runTestWithError() throws Exception { MvcResult mvcResult; String resultAsString; @@ -703,7 +684,7 @@ public void runTestWithError() throws Exception { } @Test - public void runWithReportTest() throws Exception { + void runWithReportTest() throws Exception { MvcResult mvcResult; String resultAsString; @@ -721,7 +702,7 @@ public void runWithReportTest() throws Exception { } @Test - public void runWithReportTestElementsNotFoundAndNotConnected() throws Exception { + void runWithReportTestElementsNotFoundAndNotConnected() throws Exception { MvcResult mvcResult; String resultAsString; @@ -750,7 +731,7 @@ public void runWithReportTestElementsNotFoundAndNotConnected() throws Exception } @Test - public void getProvidersTest() throws Exception { + void getProvidersTest() throws Exception { MvcResult mvcResult; String resultAsString; @@ -761,13 +742,12 @@ public void getProvidersTest() throws Exception { ).andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - List providers = mapper.readValue(resultAsString, new TypeReference<>() { - }); + List providers = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(List.of("DynaFlow", "OpenLoadFlow"), providers); } @Test - public void getDefaultProviderTest() throws Exception { + void getDefaultProviderTest() throws Exception { mockMvc.perform(get("/" + VERSION + "/default-provider")) .andExpectAll( status().isOk(), @@ -777,7 +757,7 @@ public void getDefaultProviderTest() throws Exception { } @Test - public void getZippedCsvResults() throws Exception { + void getZippedCsvResults() throws Exception { // running computation to create result MvcResult mvcResult = mockMvc.perform(post("/" + VERSION + "/networks/" + NETWORK_UUID + "/run-and-save?reportType=SecurityAnalysis&contingencyListName=" + CONTINGENCY_LIST_NAME + "&receiver=me&variantId=" + VARIANT_2_ID + "&provider=OpenLoadFlow" + "&loadFlowParametersUuid=" + UUID.randomUUID()) @@ -799,12 +779,12 @@ public void getZippedCsvResults() throws Exception { checkAllZippedCsvResults(); } - public void checkAllZippedCsvResults() throws Exception { + private void checkAllZippedCsvResults() throws Exception { SQLStatementCountValidator.reset(); checkZippedCsvResult("n-result", "/results/n-result-en.csv", CsvTranslationDTO.builder() .headers(List.of("Equipment", "Violation type", "Limit name", "Limit value (A or kV)", "Calculated value (A or kV)", "Load (%)", "Overload", "Side")) - .enumValueTranslations(enumTranslationsEn) + .enumValueTranslations(ENUM_TRANSLATIONS_EN) .build()); /* * SELECT @@ -817,7 +797,7 @@ public void checkAllZippedCsvResults() throws Exception { checkZippedCsvResult("n-result", "/results/n-result-fr.csv", CsvTranslationDTO.builder() .headers(List.of("Ouvrage", "Type de contrainte", "Nom du seuil", "Valeur du seuil (A ou kV)", "Valeur calculée (A ou kV)", "Charge (%)", "Surcharge", "Côté")) - .enumValueTranslations(enumTranslationsFr) + .enumValueTranslations(ENUM_TRANSLATIONS_FR) .build()); assertRequestsCount(2, 0, 0, 0); @@ -825,7 +805,7 @@ public void checkAllZippedCsvResults() throws Exception { checkZippedCsvResult("nmk-contingencies-result", "/results/nmk-contingencies-result-en.csv", CsvTranslationDTO.builder() .headers(List.of("Contingency ID", "Status", "Constraint", "Violation type", "Limit name", "Limit value (A or kV)", "Calculated value (A or kV)", "Load (%)", "Overload", "Side")) - .enumValueTranslations(enumTranslationsEn) + .enumValueTranslations(ENUM_TRANSLATIONS_EN) .build()); /* * SELECT @@ -840,7 +820,7 @@ public void checkAllZippedCsvResults() throws Exception { checkZippedCsvResult("nmk-contingencies-result", "/results/nmk-contingencies-result-fr.csv", CsvTranslationDTO.builder() .headers(List.of("Id aléa", "Statut", "Contrainte", "Type de contrainte", "Nom du seuil", "Valeur du seuil (A ou kV)", "Charge (%)", "Surcharge", "Côté")) - .enumValueTranslations(enumTranslationsFr) + .enumValueTranslations(ENUM_TRANSLATIONS_FR) .build()); assertRequestsCount(4, 0, 0, 0); @@ -848,7 +828,7 @@ public void checkAllZippedCsvResults() throws Exception { checkZippedCsvResult("nmk-constraints-result", "/results/nmk-constraints-result-en.csv", CsvTranslationDTO.builder() .headers(List.of("Constraint", "Contingency ID", "Status", "Violation type", "Limit name", "Limit value (A or kV)", "Calculated value (A or kV)", "Load (%)", "Overload", "Side")) - .enumValueTranslations(enumTranslationsEn) + .enumValueTranslations(ENUM_TRANSLATIONS_EN) .build()); /* * SELECT @@ -863,12 +843,12 @@ public void checkAllZippedCsvResults() throws Exception { checkZippedCsvResult("nmk-constraints-result", "/results/nmk-constraints-result-fr.csv", CsvTranslationDTO.builder() .headers(List.of("Contrainte", "ID aléa", "Statut", "Type de contrainte", "Nom du seuil", "Valeur du seuil (A ou kV)", "Valeur calculée (A ou kV)", "Charge (%)", "Surcharge", "Côté")) - .enumValueTranslations(enumTranslationsFr) + .enumValueTranslations(ENUM_TRANSLATIONS_FR) .build()); assertRequestsCount(4, 0, 0, 0); } - public void checkZippedCsvResult(String resultType, String resourcePath, CsvTranslationDTO csvTranslationDTO) throws Exception { + private void checkZippedCsvResult(String resultType, String resourcePath, CsvTranslationDTO csvTranslationDTO) throws Exception { // get csv file byte[] resultAsByteArray = mockMvc.perform(post("/" + VERSION + "/results/" + RESULT_UUID + "/" + resultType + "/csv") .contentType(MediaType.APPLICATION_JSON) diff --git a/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisParametersControllerTest.java b/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisParametersControllerTest.java index d43cbdc5..1afe2c3a 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisParametersControllerTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/SecurityAnalysisParametersControllerTest.java @@ -16,14 +16,12 @@ import org.gridsuite.securityanalysis.server.util.ContextConfigurationWithTestChannel; import org.gridsuite.securityanalysis.server.util.MatcherJson; import org.gridsuite.securityanalysis.server.util.SecurityAnalysisException; -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.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; @@ -33,7 +31,7 @@ import static com.powsybl.network.store.model.NetworkStoreApi.VERSION; import static org.gridsuite.securityanalysis.server.util.SecurityAnalysisException.Type.PARAMETERS_NOT_FOUND; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -41,11 +39,10 @@ /** * @author Abdelsalem Hedhili */ -@RunWith(SpringRunner.class) @AutoConfigureMockMvc @SpringBootTest @ContextConfigurationWithTestChannel -public class SecurityAnalysisParametersControllerTest { +class SecurityAnalysisParametersControllerTest { @Autowired private MockMvc mockMvc; @@ -66,7 +63,7 @@ public class SecurityAnalysisParametersControllerTest { private LimitReductionService limitReductionService; @Test - public void limitReductionConfigTest() { + void limitReductionConfigTest() { List limitReductions = limitReductionService.createDefaultLimitReductions(); assertNotNull(limitReductions); assertFalse(limitReductions.isEmpty()); @@ -107,7 +104,7 @@ public void limitReductionConfigTest() { } @Test - public void securityAnalysisParametersCreateAndGetTest() throws Exception { + void securityAnalysisParametersCreateAndGetTest() throws Exception { // Create parameters List> limitReductions = List.of(List.of(1.0, 0.9, 0.8, 0.7), List.of(1.0, 0.9, 0.8, 0.7)); SecurityAnalysisParametersValues.SecurityAnalysisParametersValuesBuilder builder = SecurityAnalysisParametersValues.builder() @@ -174,7 +171,7 @@ private void testParametersCreateAndGetTest(SecurityAnalysisParametersValues par } @Test - public void securityAnalysisParametersUpdateTest() throws Exception { + void securityAnalysisParametersUpdateTest() throws Exception { MvcResult mvcResult; String resultAsString; @@ -260,7 +257,7 @@ public void securityAnalysisParametersUpdateTest() throws Exception { } @Test - public void testDuplicateParameters() throws Exception { + void testDuplicateParameters() throws Exception { MvcResult mvcResult; String resultAsString; @@ -309,7 +306,7 @@ public void testDuplicateParameters() throws Exception { } @Test - public void testRemoveParameters() throws Exception { + void testRemoveParameters() throws Exception { MvcResult mvcResult; String resultAsString; @@ -344,7 +341,7 @@ public void testRemoveParameters() throws Exception { assertNull(securityAnalysisParametersRepository.findById(createdParametersUuid).orElse(null)); } - public void assertSecurityAnalysisParametersEntityAreEquals(UUID parametersUuid, double lowVoltageAbsoluteThreshold, double lowVoltageProportionalThreshold, double highVoltageAbsoluteThreshold, double highVoltageProportionalThreshold, double flowProportionalThreshold) { + private void assertSecurityAnalysisParametersEntityAreEquals(UUID parametersUuid, double lowVoltageAbsoluteThreshold, double lowVoltageProportionalThreshold, double highVoltageAbsoluteThreshold, double highVoltageProportionalThreshold, double flowProportionalThreshold) { SecurityAnalysisParametersEntity securityAnalysisParametersEntity = securityAnalysisParametersRepository.findById(parametersUuid).orElseThrow(); assertEquals(lowVoltageAbsoluteThreshold, securityAnalysisParametersEntity.getLowVoltageAbsoluteThreshold(), 0.001); assertEquals(lowVoltageProportionalThreshold, securityAnalysisParametersEntity.getLowVoltageProportionalThreshold(), 0.001); diff --git a/src/test/java/org/gridsuite/securityanalysis/server/SupervisionControllerTest.java b/src/test/java/org/gridsuite/securityanalysis/server/SupervisionControllerTest.java index 8f9da956..581adf1d 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/SupervisionControllerTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/SupervisionControllerTest.java @@ -6,30 +6,28 @@ */ package org.gridsuite.securityanalysis.server; -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.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Hugo Marcellin */ -@RunWith(SpringRunner.class) @AutoConfigureMockMvc @SpringBootTest -public class SupervisionControllerTest { +class SupervisionControllerTest { @Autowired private MockMvc mockMvc; @Test - public void testResultCount() throws Exception { + void testResultCount() throws Exception { //get the result timeline uuid of the calculation mockMvc.perform(get("/v1/supervision/results-count")) .andExpectAll( diff --git a/src/test/java/org/gridsuite/securityanalysis/server/service/ActionsServiceTest.java b/src/test/java/org/gridsuite/securityanalysis/server/service/ActionsServiceTest.java index b1a1439e..f3ba6b34 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/service/ActionsServiceTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/service/ActionsServiceTest.java @@ -9,22 +9,24 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.powsybl.contingency.BranchContingency; import com.powsybl.contingency.Contingency; +import mockwebserver3.Dispatcher; +import mockwebserver3.MockResponse; +import mockwebserver3.MockWebServer; +import mockwebserver3.RecordedRequest; +import mockwebserver3.junit5.internal.MockWebServerExtension; +import okhttp3.Headers; import okhttp3.HttpUrl; -import okhttp3.mockwebserver.Dispatcher; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; -import okhttp3.mockwebserver.RecordedRequest; import org.gridsuite.securityanalysis.server.dto.ContingencyInfos; import org.gridsuite.securityanalysis.server.util.ContextConfigurationWithTestChannel; import org.jetbrains.annotations.NotNull; -import org.junit.After; -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.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.http.MediaType; import java.io.IOException; import java.util.List; @@ -35,17 +37,17 @@ import java.util.stream.IntStream; import java.util.stream.Stream; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Geoffroy Jamgotchian * @author Slimane Amar */ +@ExtendWith(MockWebServerExtension.class) @SpringBootTest -@RunWith(SpringRunner.class) @ContextConfigurationWithTestChannel -public class ActionsServiceTest { +class ActionsServiceTest { private static final int DATA_BUFFER_LIMIT = 256 * 1024; // AbstractJackson2Decoder.maxInMemorySize @@ -66,30 +68,16 @@ public class ActionsServiceTest { @Autowired private ObjectMapper objectMapper; - private MockWebServer server; - @Autowired private ActionsService actionsService; - @Before - public void setUp() throws IOException { - String mockServerUri = initMockWebServer(); + @BeforeEach + void setUp(final MockWebServer mockWebServer) throws Exception { + final String mockServerUri = initMockWebServer(mockWebServer); actionsService.setActionServiceBaseUri(mockServerUri); } - @After - public void tearDown() { - try { - server.shutdown(); - } catch (Exception e) { - // Nothing to do - } - } - - private String initMockWebServer() throws IOException { - server = new MockWebServer(); - server.start(); - + private String initMockWebServer(final MockWebServer server) throws IOException { String jsonExpected = objectMapper.writeValueAsString(List.of(CONTINGENCY)); String veryLargeJsonExpected = objectMapper.writeValueAsString(createVeryLargeList()); String jsonVariantExpected = objectMapper.writeValueAsString(List.of(CONTINGENCY_VARIANT)); @@ -100,26 +88,17 @@ private String initMockWebServer() throws IOException { @Override public MockResponse dispatch(RecordedRequest request) { String requestPath = Objects.requireNonNull(request.getPath()); - if (requestPath.equals(String.format("/v1/contingency-lists/contingency-infos/export?networkUuid=%s&variantId=%s&ids=%s", NETWORK_UUID, VARIANT_ID, LIST_NAME))) { - return new MockResponse().setResponseCode(HttpStatus.OK.value()) - .setBody(jsonVariantExpected) - .addHeader("Content-Type", "application/json; charset=utf-8"); + return new MockResponse(HttpStatus.OK.value(), Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), jsonVariantExpected); } else if (requestPath.equals(String.format("/v1/contingency-lists/contingency-infos/export?networkUuid=%s&ids=%s", NETWORK_UUID, LIST_NAME))) { - return new MockResponse().setResponseCode(HttpStatus.OK.value()) - .setBody(jsonExpected) - .addHeader("Content-Type", "application/json; charset=utf-8"); + return new MockResponse(HttpStatus.OK.value(), Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), jsonExpected); } else if (requestPath.equals(String.format("/v1/contingency-lists/contingency-infos/export?networkUuid=%s&variantId=%s&ids=%s", NETWORK_UUID, VARIANT_ID, VERY_LARGE_LIST_NAME)) || requestPath.equals(String.format("/v1/contingency-lists/contingency-infos/export?networkUuid=%s&ids=%s", NETWORK_UUID, VERY_LARGE_LIST_NAME))) { - return new MockResponse().setResponseCode(HttpStatus.OK.value()) - .setBody(veryLargeJsonExpected) - .addHeader("Content-Type", "application/json; charset=utf-8"); + return new MockResponse(HttpStatus.OK.value(), Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), veryLargeJsonExpected); } else if (requestPath.equals(String.format("/v1/contingency-lists/contingency-infos/export?networkUuid=%s&ids=%s&ids=%s", NETWORK_UUID, LIST_NAME, LIST_NAME_VARIANT))) { - return new MockResponse().setResponseCode(HttpStatus.OK.value()) - .setBody(jsonExpectedForList) - .addHeader("Content-Type", "application/json; charset=utf-8"); + return new MockResponse(HttpStatus.OK.value(), Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), jsonExpectedForList); } else { - return new MockResponse().setResponseCode(HttpStatus.NOT_FOUND.value()).setBody("Path not supported: " + request.getPath()); + return new MockResponse.Builder().code(HttpStatus.NOT_FOUND.value()).body("Path not supported: " + request.getPath()).build(); } } }; @@ -132,12 +111,12 @@ public MockResponse dispatch(RecordedRequest request) { return baseHttpUrl.toString().substring(0, baseHttpUrl.toString().length() - 1); } - private List createVeryLargeList() { + private static List createVeryLargeList() { return IntStream.range(0, DATA_BUFFER_LIMIT).mapToObj(i -> new ContingencyInfos(new Contingency("l" + i, new BranchContingency("l" + i)))).collect(Collectors.toList()); } @Test - public void test() { + void test() { List list = actionsService.getContingencyList(List.of(LIST_NAME), UUID.fromString(NETWORK_UUID), null); list.forEach(contingencyInfos -> assertArrayEquals(List.of(WRONG_ID).toArray(new Object[0]), contingencyInfos.getNotFoundElements().toArray(new String[0]))); assertEquals(Stream.of(CONTINGENCY).map(ContingencyInfos::getContingency).toList(), list.stream().map(ContingencyInfos::getContingency).collect(Collectors.toList())); @@ -146,7 +125,7 @@ public void test() { } @Test - public void testVeryLargeList() { + void testVeryLargeList() { // DataBufferLimitException should not be thrown with this message : "Exceeded limit on max bytes to buffer : DATA_BUFFER_LIMIT" List list = actionsService.getContingencyList(List.of(VERY_LARGE_LIST_NAME), UUID.fromString(NETWORK_UUID), null); list.forEach(contingencyInfos -> assertArrayEquals(List.of().toArray(new Object[0]), contingencyInfos.getNotFoundElements().toArray(new String[0]))); @@ -156,7 +135,7 @@ public void testVeryLargeList() { } @Test - public void testGetContingenciesByListOfIds() { + void testGetContingenciesByListOfIds() { List list = actionsService.getContingencyList(List.of(LIST_NAME, LIST_NAME_VARIANT), UUID.fromString(NETWORK_UUID), null); assertEquals(Stream.of(CONTINGENCY, CONTINGENCY_VARIANT).map(ContingencyInfos::getContingency).toList(), list.stream().map(ContingencyInfos::getContingency).collect(Collectors.toList())); } diff --git a/src/test/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultServiceTest.java b/src/test/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultServiceTest.java index 4ceff6ca..e970a378 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultServiceTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisResultServiceTest.java @@ -4,7 +4,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - package org.gridsuite.securityanalysis.server.service; import com.vladmihalcea.sql.SQLStatementCountValidator; @@ -25,7 +24,7 @@ class SecurityAnalysisResultServiceTest { @Autowired - SecurityAnalysisResultService securityAnalysisResultService; + private SecurityAnalysisResultService securityAnalysisResultService; @Test void deleteResultPerfTest() { diff --git a/src/test/java/org/gridsuite/securityanalysis/server/util/DatabaseQueryUtils.java b/src/test/java/org/gridsuite/securityanalysis/server/util/DatabaseQueryUtils.java index 6b8ec4e9..47be3cd2 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/util/DatabaseQueryUtils.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/util/DatabaseQueryUtils.java @@ -7,7 +7,6 @@ package org.gridsuite.securityanalysis.server.util; import static com.vladmihalcea.sql.SQLStatementCountValidator.*; -import static com.vladmihalcea.sql.SQLStatementCountValidator.assertDeleteCount; public final class DatabaseQueryUtils { diff --git a/src/test/java/org/gridsuite/securityanalysis/server/util/DatasourceProxyBeanPostProcessor.java b/src/test/java/org/gridsuite/securityanalysis/server/util/DatasourceProxyBeanPostProcessor.java index c7341dc1..02b903d6 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/util/DatasourceProxyBeanPostProcessor.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/util/DatasourceProxyBeanPostProcessor.java @@ -22,15 +22,15 @@ import javax.sql.DataSource; import java.lang.reflect.Method; -@Component /** * The author of db-utils describes its library in https://vladmihalcea.com/how-to-detect-the-n-plus-one-query-problem-during-testing/ - * But the recommended method to select the datasource (using @bean public DataSource dataSource(DataSource originalDataSource) {...} ) + * But the recommended method to select the datasource (using {@code @bean public DataSource dataSource(DataSource originalDataSource) {...}} ) * doesn't work when you use the spring default profile for tests - * It crashes with this exception : java.lang.IllegalStateException: Failed to load ApplicationContext : org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'dataSource': Requested bean is currently in creation: Is there an unresolvable circular reference + * It crashes with this exception : {@literal java.lang.IllegalStateException: Failed to load ApplicationContext : org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'dataSource': Requested bean is currently in creation: Is there an unresolvable circular reference} * Instead, the underlying datasource-proxy library author recommends to use a BeanPostProcessor: * https://github.com/ttddyy/datasource-proxy-examples/blob/master/springboot-autoconfig-example/src/main/java/net/ttddyy/dsproxy/example/DatasourceProxyBeanPostProcessor.java */ +@Component public class DatasourceProxyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) { diff --git a/src/test/java/org/gridsuite/securityanalysis/server/util/MatcherJson.java b/src/test/java/org/gridsuite/securityanalysis/server/util/MatcherJson.java index d6ccaf9f..c28f7a01 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/util/MatcherJson.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/util/MatcherJson.java @@ -6,11 +6,10 @@ */ package org.gridsuite.securityanalysis.server.util; -import org.hamcrest.Description; -import org.hamcrest.TypeSafeMatcher; - import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeMatcher; /** * @author Slimane Amar @@ -40,8 +39,8 @@ public void describeTo(Description description) { } @SneakyThrows + @Override protected void describeMismatchSafely(T item, Description mismatchDescription) { mismatchDescription.appendText("was ").appendText(mapper.writeValueAsString(item)); } - } diff --git a/src/test/java/org/gridsuite/securityanalysis/server/util/SecurityAnalysisRunnerSupplierTest.java b/src/test/java/org/gridsuite/securityanalysis/server/util/SecurityAnalysisRunnerSupplierTest.java index df8424a9..5fbeda21 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/util/SecurityAnalysisRunnerSupplierTest.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/util/SecurityAnalysisRunnerSupplierTest.java @@ -7,30 +7,28 @@ package org.gridsuite.securityanalysis.server.util; import com.powsybl.commons.PowsyblException; -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.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Geoffroy Jamgotchian */ -@RunWith(SpringRunner.class) @SpringBootTest -public class SecurityAnalysisRunnerSupplierTest { +class SecurityAnalysisRunnerSupplierTest { @Value("${security-analysis.default-provider}") - String defaultSecurityAnalysisProvider; + private String defaultSecurityAnalysisProvider; @Autowired - SecurityAnalysisRunnerSupplier securityAnalysisRunnerSupplier; + private SecurityAnalysisRunnerSupplier securityAnalysisRunnerSupplier; @Test - public void test() { + void test() { assertEquals("OpenLoadFlow", securityAnalysisRunnerSupplier.getRunner("OpenLoadFlow").getName()); assertEquals("DynaFlow", securityAnalysisRunnerSupplier.getRunner("DynaFlow").getName()); assertEquals(defaultSecurityAnalysisProvider, securityAnalysisRunnerSupplier.getRunner(null).getName()); diff --git a/src/test/java/org/gridsuite/securityanalysis/server/util/TestUtils.java b/src/test/java/org/gridsuite/securityanalysis/server/util/TestUtils.java index 1ababe8f..c4ae88c9 100644 --- a/src/test/java/org/gridsuite/securityanalysis/server/util/TestUtils.java +++ b/src/test/java/org/gridsuite/securityanalysis/server/util/TestUtils.java @@ -9,7 +9,7 @@ import java.util.Optional; import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.verify; @@ -17,6 +17,7 @@ public final class TestUtils { private TestUtils() { + throw new IllegalStateException("Utility class"); } public static void assertLogNthMessage(String expectedMessage, String reportKey, ReportService reportService, int rank) {