From 7f3811835dd6cae984c7eeab242fc911d7f44dc1 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Tue, 19 Sep 2023 01:11:52 +0200 Subject: [PATCH 01/14] Migrate from obsolete JUnit4 to JUnit5 --- pom.xml | 10 -- .../gridsuite/explore/server/ExploreTest.java | 103 ++++++++---------- 2 files changed, 48 insertions(+), 65 deletions(-) diff --git a/pom.xml b/pom.xml index 2cc42f53..720ee858 100644 --- a/pom.xml +++ b/pom.xml @@ -145,16 +145,6 @@ powsybl-config-test test - - junit - junit - test - - - org.junit.vintage - junit-vintage-engine - test - org.springframework.boot spring-boot-starter-test diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index 4ffd5b44..b13b8f93 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -21,16 +21,15 @@ import org.gridsuite.explore.server.utils.ContingencyListType; import org.gridsuite.explore.server.utils.ParametersType; import org.gridsuite.explore.server.utils.TestUtils; -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.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.ResourceUtils; @@ -40,24 +39,27 @@ import java.io.InputStream; import java.util.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.http.MediaType.APPLICATION_JSON; 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; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.extension.ExtendWith; + /** * @author Etienne Homer */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest @ContextConfiguration(classes = {ExploreApplication.class}) -public class ExploreTest { +@DisplayName("Explore Server tests") +class ExploreTest { private static final String TEST_FILE = "testCase.xiidm"; private static final String TEST_FILE_WITH_ERRORS = "testCase_with_errors.xiidm"; - private static final String TEST_INCORRECT_FILE = "application-default.yml"; private static final UUID CASE_UUID = UUID.randomUUID(); private static final UUID NON_EXISTING_CASE_UUID = UUID.randomUUID(); @@ -102,8 +104,8 @@ public class ExploreTest { private ObjectMapper mapper; private MockWebServer server; - @Before - public void setup() throws IOException { + @BeforeEach + void setup() throws IOException { server = new MockWebServer(); // Start the server. @@ -294,7 +296,7 @@ public MockResponse dispatch(RecordedRequest request) { } @Test - public void testCreateStudyFromExistingCase() throws Exception { + void testCreateStudyFromExistingCase() throws Exception { mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) .param("duplicateCase", "false") .header("userId", "userId") @@ -303,7 +305,7 @@ public void testCreateStudyFromExistingCase() throws Exception { } @Test - public void testCreateStudyFromExistingCaseError() throws Exception { + void testCreateStudyFromExistingCaseError() throws Exception { mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + NON_EXISTING_CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON)) @@ -311,7 +313,7 @@ public void testCreateStudyFromExistingCaseError() throws Exception { } @Test - public void testCreateCase() throws Exception { + void testCreateCase() throws Exception { try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE))) { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE, "text/xml", is); @@ -325,7 +327,7 @@ public void testCreateCase() throws Exception { } @Test - public void testCaseCreationError() throws Exception { + void testCaseCreationError() throws Exception { try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE_WITH_ERRORS))) { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE_WITH_ERRORS, "text/xml", is); @@ -338,7 +340,7 @@ public void testCaseCreationError() throws Exception { } @Test - public void testCreateScriptContingencyList() throws Exception { + void testCreateScriptContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -348,7 +350,7 @@ public void testCreateScriptContingencyList() throws Exception { } @Test - public void testCreateScriptContingencyListError() throws Exception { + void testCreateScriptContingencyListError() throws Exception { mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) .header("userId", USER1) @@ -358,7 +360,7 @@ public void testCreateScriptContingencyListError() throws Exception { } @Test - public void testCreateFormContingencyList() throws Exception { + void testCreateFormContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/form-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -368,7 +370,7 @@ public void testCreateFormContingencyList() throws Exception { } @Test - public void testCreateIdentifierContingencyList() throws Exception { + void testCreateIdentifierContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/identifier-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -378,7 +380,7 @@ public void testCreateIdentifierContingencyList() throws Exception { } @Test - public void testNewScriptFromFormContingencyList() throws Exception { + void testNewScriptFromFormContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, "scriptName", PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -386,15 +388,12 @@ public void testNewScriptFromFormContingencyList() throws Exception { } @Test - public void testReplaceFormContingencyListWithScript() throws Exception { - mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/replace-with-script", - CONTINGENCY_LIST_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + void testReplaceFormContingencyListWithScript() throws Exception { + mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/replace-with-script", CONTINGENCY_LIST_UUID).header("userId", USER1)).andExpect(status().isOk()); } @Test - public void testCreateFilter() throws Exception { + void testCreateFilter() throws Exception { mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}", "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -404,7 +403,7 @@ public void testCreateFilter() throws Exception { } @Test - public void testCreateParameters() throws Exception { + void testCreateParameters() throws Exception { mockMvc.perform(post("/v1/explore/parameters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -414,7 +413,7 @@ public void testCreateParameters() throws Exception { } @Test - public void testUpdateParameters() throws Exception { + void testUpdateParameters() throws Exception { mockMvc.perform(put("/v1/explore/parameters/{id}?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", PARAMETERS_UUID, "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -424,7 +423,7 @@ public void testUpdateParameters() throws Exception { } @Test - public void testNewScriptFromFilter() throws Exception { + void testNewScriptFromFilter() throws Exception { mockMvc.perform(post("/v1/explore/filters/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", FILTER_UUID, "scriptName", PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -432,7 +431,7 @@ public void testNewScriptFromFilter() throws Exception { } @Test - public void testReplaceFilterWithScript() throws Exception { + void testReplaceFilterWithScript() throws Exception { mockMvc.perform(post("/v1/explore/filters/{id}/replace-with-script", FILTER_UUID) .header("userId", USER1) @@ -440,19 +439,15 @@ public void testReplaceFilterWithScript() throws Exception { } public void deleteElement(UUID elementUUid) throws Exception { - mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", - elementUUid).header("userId", USER1)) - .andExpect(status().isOk()); + mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)).andExpect(status().isOk()); } public void deleteElementInvalidType(UUID elementUUid) throws Exception { - mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid) - .header("userId", USER1)) - .andExpect(status().is2xxSuccessful()); + mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)).andExpect(status().is2xxSuccessful()); } @Test - public void testDeleteElement() throws Exception { + void testDeleteElement() throws Exception { deleteElement(FILTER_UUID); deleteElement(PRIVATE_STUDY_UUID); deleteElement(CONTINGENCY_LIST_UUID); @@ -463,7 +458,7 @@ public void testDeleteElement() throws Exception { } @Test - public void testGetElementsMetadata() throws Exception { + void testGetElementsMetadata() throws Exception { mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) .header("userId", USER1) ).andExpectAll(status().isOk()); @@ -494,21 +489,19 @@ public void testGetElementsMetadata() throws Exception { } @Test - public void testDuplicateCase() throws Exception { - mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID).header("userId", USER1)) - .andExpect(status().isOk()); + void testDuplicateCase() throws Exception { + mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID).header("userId", USER1)).andExpect(status().isOk()); } @Test - public void testDuplicateFilter() throws Exception { + void testDuplicateFilter() throws Exception { mockMvc.perform(post("/v1/explore/filters?duplicateFrom={parentFilterId}&name={filterName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", FILTER_UUID, FILTER1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)).andExpect(status().isOk()); } @Test - public void testDuplicateScriptContingencyList() throws Exception { + void testDuplicateScriptContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/script-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -516,7 +509,7 @@ public void testDuplicateScriptContingencyList() throws Exception { } @Test - public void testDuplicateFormContingencyList() throws Exception { + void testDuplicateFormContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/form-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -524,7 +517,7 @@ public void testDuplicateFormContingencyList() throws Exception { } @Test - public void testDuplicateIdentifierContingencyList() throws Exception { + void testDuplicateIdentifierContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/identifier-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -532,7 +525,7 @@ public void testDuplicateIdentifierContingencyList() throws Exception { } @Test - public void testDuplicateStudy() throws Exception { + void testDuplicateStudy() throws Exception { mockMvc.perform(post("/v1/explore/studies?duplicateFrom={parentStudyUuid}&studyName={studyName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", PUBLIC_STUDY_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -540,7 +533,7 @@ public void testDuplicateStudy() throws Exception { } @Test - public void testCaseCreationErrorWithBadExtension() throws Exception { + void testCaseCreationErrorWithBadExtension() throws Exception { try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_INCORRECT_FILE))) { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_INCORRECT_FILE, "text/xml", is); @@ -553,7 +546,7 @@ public void testCaseCreationErrorWithBadExtension() throws Exception { } @Test - public void testChangeFilter() throws Exception { + void testChangeFilter() throws Exception { final String filter = "{\"type\":\"CRITERIA\",\"equipmentFilterForm\":{\"equipmentType\":\"BATTERY\",\"name\":\"test bbs\",\"countries\":[\"BS\"],\"nominalVoltage\":{\"type\":\"LESS_THAN\",\"value1\":545430,\"value2\":null},\"freeProperties\":{\"region\":[\"north\"],\"totallyFree\":[\"6555\"],\"tso\":[\"ceps\"]}}}"; final String name = "filter name"; mockMvc.perform(put("/v1/explore/filters/{id}", @@ -568,7 +561,7 @@ public void testChangeFilter() throws Exception { } @Test - public void testModifyScriptContingencyList() throws Exception { + void testModifyScriptContingencyList() throws Exception { final String scriptContingency = "{\"script\":\"alert(\\\"script contingency\\\")\"}"; final String name = "script name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", @@ -584,7 +577,7 @@ public void testModifyScriptContingencyList() throws Exception { } @Test - public void testModifyFormContingencyList() throws Exception { + void testModifyFormContingencyList() throws Exception { final String formContingency = "{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}"; final String name = "form contingency name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", @@ -600,7 +593,7 @@ public void testModifyFormContingencyList() throws Exception { } @Test - public void testModifyIdentifierContingencyList() throws Exception { + void testModifyIdentifierContingencyList() throws Exception { final String identifierContingencyList = "{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}"; final String name = "identifier contingencyList name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", @@ -617,12 +610,12 @@ public void testModifyIdentifierContingencyList() throws Exception { private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) { var requests = TestUtils.getRequestsWithBodyDone(2, server); - assertTrue("elementAttributes updated", requests.stream().anyMatch(r -> r.getPath().contains(contingencyOrFilterPath))); - assertTrue("name updated", requests.stream().anyMatch(r -> r.getPath().contains("/v1/elements/"))); + assertTrue(requests.stream().anyMatch(r -> r.getPath().contains(contingencyOrFilterPath)), "elementAttributes updated"); + assertTrue(requests.stream().anyMatch(r -> r.getPath().contains("/v1/elements/")), "name updated"); } @Test - public void testGetMetadata() throws Exception { + void testGetMetadata() throws Exception { MvcResult result = mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + CASE_UUID) .header("userId", USER1)) .andExpect(status().isOk()) From ea672b037c434444bc535b743a5b595d0f404452 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Tue, 19 Sep 2023 01:12:42 +0200 Subject: [PATCH 02/14] Convert JUnit tests to AsssertJ --- .../gridsuite/explore/server/ExploreTest.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index b13b8f93..05e94a52 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -20,9 +20,12 @@ import org.gridsuite.explore.server.services.*; import org.gridsuite.explore.server.utils.ContingencyListType; import org.gridsuite.explore.server.utils.ParametersType; +import org.gridsuite.explore.server.utils.RequestWithBody; import org.gridsuite.explore.server.utils.TestUtils; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; 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.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -39,16 +42,12 @@ import java.io.InputStream; import java.util.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.http.MediaType.APPLICATION_JSON; 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; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.extension.ExtendWith; - /** * @author Etienne Homer */ @@ -610,8 +609,12 @@ void testModifyIdentifierContingencyList() throws Exception { private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) { var requests = TestUtils.getRequestsWithBodyDone(2, server); - assertTrue(requests.stream().anyMatch(r -> r.getPath().contains(contingencyOrFilterPath)), "elementAttributes updated"); - assertTrue(requests.stream().anyMatch(r -> r.getPath().contains("/v1/elements/")), "name updated"); + assertThat(requests).as("elementAttributes updated") + .extracting(RequestWithBody::getPath) + .anyMatch(path -> path.startsWith(contingencyOrFilterPath)); + assertThat(requests).as("name updated") + .extracting(RequestWithBody::getPath) + .anyMatch(path -> path.startsWith("/v1/elements/")); } @Test @@ -621,10 +624,13 @@ void testGetMetadata() throws Exception { .andExpect(status().isOk()) .andReturn(); String res = result.getResponse().getContentAsString(); - List elementsMetadata = mapper.readValue(res, new TypeReference<>() { - }); - String caseAttributesAsString = mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null, caseSpecificMetadata)); - assertEquals(1, elementsMetadata.size()); - assertEquals(mapper.writeValueAsString(elementsMetadata.get(0)), caseAttributesAsString); + assertThat(mapper.readValue(res, new TypeReference>() { })) + .as("elementsMetadata") + .hasSize(1) + .extracting(mapper::writeValueAsString) + .first() + .asString() + .as("caseAttributesAsString") + .isEqualTo(mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null, caseSpecificMetadata))); } } From db77111bc502d8c3a783a6470926431c2ff1b79e Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 09:53:05 +0200 Subject: [PATCH 03/14] . assertj --- src/test/java/org/gridsuite/explore/server/ExploreTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index 05e94a52..5bef438d 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -626,7 +626,7 @@ void testGetMetadata() throws Exception { String res = result.getResponse().getContentAsString(); assertThat(mapper.readValue(res, new TypeReference>() { })) .as("elementsMetadata") - .hasSize(1) + .hasSize(1) //TODO replace only when assertj updated .extracting(mapper::writeValueAsString) .first() .asString() From d90f1cb8ed35aef86067a459730561622b69f749 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Mon, 28 Aug 2023 10:15:10 +0200 Subject: [PATCH 04/14] migrate powsybl-parent to v13 for checkstyle support of java 17 syntax --- pom.xml | 2 +- .../java/org/gridsuite/explore/server/utils/TestUtils.java | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 720ee858..ca77a116 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.powsybl powsybl-parent-ws - 12 + 13 diff --git a/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java b/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java index 5be6521e..f68a4124 100644 --- a/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java +++ b/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java @@ -18,13 +18,12 @@ * @author AJELLAL Ali */ public final class TestUtils { - - private static final long TIMEOUT = 100; - private TestUtils() { - + throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); } + private static final long TIMEOUT = 100; + public static Set getRequestsWithBodyDone(int n, MockWebServer server) throws UncheckedInterruptedException { return IntStream.range(0, n).mapToObj(i -> { try { From 42e36930140fc5dcfce7b7102859f816d48e974f Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Tue, 19 Sep 2023 09:54:52 +0200 Subject: [PATCH 05/14] Fix IDE alerts + Optimize mock server dispatch block & some variables --- .../gridsuite/explore/server/ExploreTest.java | 170 +++++++++--------- .../explore/server/utils/TestUtils.java | 3 +- 2 files changed, 90 insertions(+), 83 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index 5bef438d..d3827caa 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -8,13 +8,13 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.powsybl.commons.exceptions.UncheckedInterruptedException; import lombok.SneakyThrows; -import okhttp3.HttpUrl; import okhttp3.mockwebserver.Dispatcher; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import okhttp3.mockwebserver.RecordedRequest; -import okio.Buffer; +import org.apache.commons.lang3.StringUtils; import org.gridsuite.explore.server.dto.AccessRightsAttributes; import org.gridsuite.explore.server.dto.ElementAttributes; import org.gridsuite.explore.server.services.*; @@ -22,6 +22,7 @@ import org.gridsuite.explore.server.utils.ParametersType; import org.gridsuite.explore.server.utils.RequestWithBody; import org.gridsuite.explore.server.utils.TestUtils; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -40,7 +41,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.http.MediaType.APPLICATION_JSON; @@ -71,6 +75,7 @@ class ExploreTest { private static final UUID CONTINGENCY_LIST_UUID = UUID.randomUUID(); private static final UUID INVALID_ELEMENT_UUID = UUID.randomUUID(); private static final UUID PARAMETERS_UUID = UUID.randomUUID(); + private static final UUID SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID = UUID.randomUUID(); private static final String STUDY_ERROR_NAME = "studyInError"; private static final String STUDY1 = "study1"; private static final String CASE1 = "case1"; @@ -79,11 +84,17 @@ class ExploreTest { public static final String FILTER_CONTINGENCY_LIST = "filterContingencyList"; public static final String FILTER_CONTINGENCY_LIST_2 = "filterContingencyList2"; public static final String FILTER = "FILTER"; - private Map specificMetadata = new HashMap<>(); - private Map specificMetadata2 = new HashMap<>(); - private Map caseSpecificMetadata = new HashMap<>(); - private static final UUID SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID = UUID.randomUUID(); + private static final Map SPECIFIC_METADATA = Map.of("id", FILTER_UUID); + private static final Map SPECIFIC_METADATA_2 = Map.of( + "equipmentType", "LINE", + "id", FILTER_UUID_2 + ); + private static final Map CASE_SPECIFIC_METADATA = Map.of( + "uuid", CASE_UUID, + "name", TEST_FILE, + "format", "XIIDM" + ); @Autowired private MockMvc mockMvc; @@ -111,8 +122,7 @@ void setup() throws IOException { server.start(); // Ask the server for its URL. You'll need this to make HTTP requests. - HttpUrl baseHttpUrl = server.url(""); - String baseUrl = baseHttpUrl.toString().substring(0, baseHttpUrl.toString().length() - 1); + final String baseUrl = StringUtils.removeEnd(server.url("").toString(), "/"); directoryService.setDirectoryServerBaseUri(baseUrl); studyService.setStudyServerBaseUri(baseUrl); @@ -120,14 +130,6 @@ void setup() throws IOException { contingencyListService.setActionsServerBaseUri(baseUrl); caseService.setBaseUri(baseUrl); remoteServicesProperties.getServices().forEach(s -> s.setBaseUri(baseUrl)); - specificMetadata.put("id", FILTER_UUID); - - specificMetadata2.put("equipmentType", "LINE"); - specificMetadata2.put("id", FILTER_UUID_2); - - caseSpecificMetadata.put("uuid", CASE_UUID); - caseSpecificMetadata.put("name", TEST_FILE); - caseSpecificMetadata.put("format", "XIIDM"); String privateStudyAttributesAsString = mapper.writeValueAsString(new ElementAttributes(PRIVATE_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(true), USER1, 0, null)); String listOfPrivateStudyAttributesAsString = mapper.writeValueAsString(List.of(new ElementAttributes(PRIVATE_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(true), USER1, 0, null))); @@ -142,26 +144,24 @@ void setup() throws IOException { String caseElementAttributesAsString = mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null)); String parametersElementAttributesAsString = mapper.writeValueAsString(new ElementAttributes(PARAMETERS_UUID, "voltageInitParametersName", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), new AccessRightsAttributes(true), USER1, 0, null)); String listElementsAttributesAsString = "[" + filterAttributesAsString + "," + privateStudyAttributesAsString + "," + formContingencyListAttributesAsString + "]"; - String caseInfosAttributesAsString = mapper.writeValueAsString(List.of(caseSpecificMetadata)); + String caseInfosAttributesAsString = mapper.writeValueAsString(List.of(CASE_SPECIFIC_METADATA)); final Dispatcher dispatcher = new Dispatcher() { @SneakyThrows @Override public MockResponse dispatch(RecordedRequest request) { - String path = Objects.requireNonNull(request.getPath()); - Buffer body = request.getBody(); + final String path = Objects.requireNonNull(request.getPath()); + final String bodyStr = request.getBody().readUtf8(); - if (path.matches("/v1/studies/cases/" + NON_EXISTING_CASE_UUID + ".*") && "POST".equals(request.getMethod())) { + if (path.startsWith("/v1/studies/cases/" + NON_EXISTING_CASE_UUID) && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(404); - } else if (path.matches("/v1/studies.*") && "POST".equals(request.getMethod())) { - String bodyStr = body.readUtf8(); + } else if (path.startsWith("/v1/studies") && "POST".equals(request.getMethod())) { if (bodyStr.contains("filename=\"" + TEST_FILE_WITH_ERRORS + "\"")) { // import file with errors return new MockResponse().setResponseCode(409); } else { return new MockResponse().setResponseCode(200); } - } else if (path.matches("/v1/cases.*") && "POST".equals(request.getMethod())) { - String bodyStr = body.readUtf8(); + } else if (path.startsWith("/v1/cases") && "POST".equals(request.getMethod())) { if (bodyStr.contains("filename=\"" + TEST_FILE_WITH_ERRORS + "\"")) { // import file with errors return new MockResponse().setResponseCode(409).setBody("invalid file"); } else if (bodyStr.contains("filename=\"" + TEST_INCORRECT_FILE + "\"")) { // import file with errors @@ -169,124 +169,125 @@ public MockResponse dispatch(RecordedRequest request) { } else { return new MockResponse().setResponseCode(200); } - } else if (path.matches("/v1/directories/" + PARENT_DIRECTORY_UUID + "/elements") && "POST".equals(request.getMethod())) { + } else if (path.equals("/v1/directories/" + PARENT_DIRECTORY_UUID + "/elements") && "POST".equals(request.getMethod())) { return new MockResponse().setBody(privateStudyAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/directories/" + PARENT_DIRECTORY_WITH_ERROR_UUID + "/elements") && "POST".equals(request.getMethod())) { + } else if (path.equals("/v1/directories/" + PARENT_DIRECTORY_WITH_ERROR_UUID + "/elements") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(500); - } else if (path.matches("/v1/elements/" + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements/" + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(formContingencyListAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); } else if (path.equals("/v1/elements/" + CONTINGENCY_LIST_UUID + "/notification?type=UPDATE_DIRECTORY")) { return new MockResponse().setBody(formContingencyListAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/" + FILTER_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements/" + FILTER_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(filterAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); } else if (path.equals("/v1/elements/" + FILTER_UUID + "/notification?type=UPDATE_DIRECTORY")) { return new MockResponse().setBody(filterAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/" + CASE_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements/" + CASE_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(caseElementAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/" + PRIVATE_STUDY_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements/" + PRIVATE_STUDY_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(privateStudyAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/" + PUBLIC_STUDY_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements/" + PUBLIC_STUDY_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(publicStudyAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/" + PARAMETERS_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements/" + PARAMETERS_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(parametersElementAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements\\?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&elementTypes=FILTER") && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&elementTypes=FILTER") && "GET".equals(request.getMethod())) { return new MockResponse().setBody("[" + filterAttributesAsString + "," + filter2AttributesAsString + "]") .setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements\\?ids=" + CASE_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements?ids=" + CASE_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody("[" + caseElementAttributesAsString + "]") .setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/filters/metadata\\?ids=" + FILTER_UUID + "," + FILTER_UUID_2) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody("[" + mapper.writeValueAsString(specificMetadata) + "," + mapper.writeValueAsString(specificMetadata2) + "]") + } else if (path.equals("/v1/filters/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2) && "GET".equals(request.getMethod())) { + return new MockResponse().setBody("[" + mapper.writeValueAsString(SPECIFIC_METADATA) + "," + mapper.writeValueAsString(SPECIFIC_METADATA_2) + "]") .setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements\\?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/elements?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(listElementsAttributesAsString).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/.*") && "PUT".equals(request.getMethod())) { + } else if (path.startsWith("/v1/elements/") && "PUT".equals(request.getMethod())) { return new MockResponse().setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/contingency-lists/metadata[?]ids=" + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { + } else if (path.equals("/v1/contingency-lists/metadata?ids=" + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { return new MockResponse().setBody(listOfFormContingencyListAttributesAsString.replace("elementUuid", "id")).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/script-contingency-lists\\?id=" + PARENT_DIRECTORY_WITH_ERROR_UUID) && "POST".equals(request.getMethod())) { + } else if (path.equals("/v1/script-contingency-lists?id=" + PARENT_DIRECTORY_WITH_ERROR_UUID) && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(500); - } else if (path.matches("/v1/script-contingency-lists.*") && "POST".equals(request.getMethod())) { + } else if (path.startsWith("/v1/script-contingency-lists") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/form-contingency-lists.*") && "POST".equals(request.getMethod())) { + } else if (path.startsWith("/v1/form-contingency-lists") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/identifier-contingency-lists.*") && "POST".equals(request.getMethod())) { + } else if (path.startsWith("/v1/identifier-contingency-lists") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/form-contingency-lists/.*/new-script/.*") && "POST".equals(request.getMethod())) { + } else if (path.matches("/v1/form-contingency-lists/.+/new-script/.*") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters/.*/new-script.*") && "POST".equals(request.getMethod())) { + } else if (path.matches("/v1/filters/.+/new-script.*") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters.*") && "POST".equals(request.getMethod())) { + } else if (path.startsWith("/v1/filters") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters\\?id=.*") && "POST".equals(request.getMethod())) { + } else if (path.startsWith("/v1/filters?id=") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters/.*/replace-with-script") && "PUT".equals(request.getMethod())) { + } else if (path.matches("/v1/filters/.+/replace-with-script") && "PUT".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters/.*") && "PUT".equals(request.getMethod())) { + } else if (path.startsWith("/v1/filters/") && "PUT".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/script-contingency-lists/.*") && "PUT".equals(request.getMethod())) { + } else if (path.startsWith("/v1/script-contingency-lists/") && "PUT".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/form-contingency-lists/.*") && "PUT".equals(request.getMethod())) { + } else if (path.startsWith("/v1/form-contingency-lists/") && "PUT".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/identifier-contingency-lists/.*") && "PUT".equals(request.getMethod())) { + } else if (path.startsWith("/v1/identifier-contingency-lists/") && "PUT".equals(request.getMethod())) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/parameters.*")) { + } else if (path.startsWith("/v1/parameters")) { return new MockResponse().setResponseCode(200); } else if ("GET".equals(request.getMethod())) { - if (path.matches("/v1/elements/" + INVALID_ELEMENT_UUID)) { + if (path.equals("/v1/elements/" + INVALID_ELEMENT_UUID)) { return new MockResponse().setBody(invalidElementAsString).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/directories/" + PARENT_DIRECTORY_UUID + "/elements")) { + } else if (path.equals("/v1/directories/" + PARENT_DIRECTORY_UUID + "/elements")) { return new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/elements/" + PARENT_DIRECTORY_UUID)) { + } else if (path.equals("/v1/elements/" + PARENT_DIRECTORY_UUID)) { return new MockResponse().setBody(directoryAttributesAsString).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/filters/metadata[?]ids=" + FILTER_UUID)) { + } else if (path.equals("/v1/filters/metadata?ids=" + FILTER_UUID)) { return new MockResponse().setBody(listOfFilterAttributesAsString.replace("elementUuid", "id")).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/cases/metadata[?]ids=" + CASE_UUID)) { + } else if (path.equals("/v1/cases/metadata?ids=" + CASE_UUID)) { return new MockResponse().setBody(caseInfosAttributesAsString).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/studies/metadata[?]ids=" + PRIVATE_STUDY_UUID)) { + } else if (path.equals("/v1/studies/metadata?ids=" + PRIVATE_STUDY_UUID)) { return new MockResponse().setBody(listOfPrivateStudyAttributesAsString.replace("elementUuid", "id")).setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); } } else if ("DELETE".equals(request.getMethod())) { - if (path.matches("/v1/filters/" + FILTER_UUID)) { + if (path.equals("/v1/filters/" + FILTER_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/studies/" + PRIVATE_STUDY_UUID)) { + } else if (path.equals("/v1/studies/" + PRIVATE_STUDY_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/contingency-lists/" + CONTINGENCY_LIST_UUID)) { + } else if (path.equals("/v1/contingency-lists/" + CONTINGENCY_LIST_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/elements/" + INVALID_ELEMENT_UUID)) { + } else if (path.equals("/v1/elements/" + INVALID_ELEMENT_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/elements/" + PRIVATE_STUDY_UUID)) { + } else if (path.equals("/v1/elements/" + PRIVATE_STUDY_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/elements/" + FILTER_UUID)) { + } else if (path.equals("/v1/elements/" + FILTER_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/elements/" + CONTINGENCY_LIST_UUID)) { + } else if (path.equals("/v1/elements/" + CONTINGENCY_LIST_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/elements/" + PARENT_DIRECTORY_UUID)) { + } else if (path.equals("/v1/elements/" + PARENT_DIRECTORY_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/elements/" + PARAMETERS_UUID)) { + } else if (path.equals("/v1/elements/" + PARAMETERS_UUID)) { return new MockResponse().setResponseCode(200); } else if (path.matches("/v1/(cases|elements)/" + CASE_UUID)) { return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/parameters/" + PARAMETERS_UUID)) { + } else if (path.equals("/v1/parameters/" + PARAMETERS_UUID)) { return new MockResponse().setResponseCode(200); + } else { + return new MockResponse().setResponseCode(404); } - return new MockResponse().setResponseCode(404); } return new MockResponse().setResponseCode(418); } @@ -294,6 +295,11 @@ public MockResponse dispatch(RecordedRequest request) { server.setDispatcher(dispatcher); } + @AfterEach + void teardown() throws IOException { + server.shutdown(); + } + @Test void testCreateStudyFromExistingCase() throws Exception { mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) @@ -344,7 +350,7 @@ void testCreateScriptContingencyList() throws Exception { "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("Contingency list content") + .content("{\"content\": \"Contingency list content\"}") ).andExpect(status().isOk()); } @@ -354,7 +360,7 @@ void testCreateScriptContingencyListError() throws Exception { "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("Contingency list content") + .content("{\"content\": \"Contingency list content\"}") ).andExpect(status().isInternalServerError()); } @@ -364,7 +370,7 @@ void testCreateFormContingencyList() throws Exception { FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("Contingency list content") + .content("{\"content\": \"Contingency list content\"}") ).andExpect(status().isOk()); } @@ -374,7 +380,7 @@ void testCreateIdentifierContingencyList() throws Exception { "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("Contingency list content") + .content("{\"content\": \"Contingency list content\"}") ).andExpect(status().isOk()); } @@ -397,7 +403,7 @@ void testCreateFilter() throws Exception { "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("Filter content") + .content("{\"content\": \"Filter content\"}") ).andExpect(status().isOk()); } @@ -407,7 +413,7 @@ void testCreateParameters() throws Exception { "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("Parameters content") + .content("{\"content\": \"Parameters content\"}") ).andExpect(status().isOk()); } @@ -417,7 +423,7 @@ void testUpdateParameters() throws Exception { PARAMETERS_UUID, "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON) - .content("new Parameters content") + .content("{\"content\": \"new Parameters content\"}") ).andExpect(status().isOk()); } @@ -462,8 +468,8 @@ void testGetElementsMetadata() throws Exception { .header("userId", USER1) ).andExpectAll(status().isOk()); - ElementAttributes filter1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, specificMetadata); - ElementAttributes filter2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, specificMetadata2); + ElementAttributes filter1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA); + ElementAttributes filter2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA_2); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=&elementTypes=FILTER") .header("userId", USER1)) @@ -607,7 +613,7 @@ void testModifyIdentifierContingencyList() throws Exception { verifyFilterOrContingencyUpdateRequests("/v1/identifier-contingency-lists/"); } - private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) { + private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) throws UncheckedInterruptedException, AssertionError { var requests = TestUtils.getRequestsWithBodyDone(2, server); assertThat(requests).as("elementAttributes updated") .extracting(RequestWithBody::getPath) @@ -631,6 +637,6 @@ void testGetMetadata() throws Exception { .first() .asString() .as("caseAttributesAsString") - .isEqualTo(mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null, caseSpecificMetadata))); + .isEqualTo(mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null, CASE_SPECIFIC_METADATA))); } } diff --git a/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java b/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java index f68a4124..506275b5 100644 --- a/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java +++ b/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java @@ -9,7 +9,8 @@ import com.powsybl.commons.exceptions.UncheckedInterruptedException; import okhttp3.mockwebserver.MockWebServer; -import java.util.*; + +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.IntStream; From 758d06b0a47fc9370ed8928addb7db91cd19baf6 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 13:00:50 +0200 Subject: [PATCH 06/14] Change from `RestTemplate` to `RestTemplateBuilder` for mock testing Also simplify `ObjectMapper` configuration for `RestTemplate` --- .../explore/server/RestTemplateConfig.java | 48 +++------ .../explore/server/services/CaseService.java | 44 +++----- .../services/ContingencyListService.java | 85 +++++++-------- .../server/services/DirectoryService.java | 102 ++++++------------ .../server/services/FilterService.java | 76 +++++-------- .../server/services/ParametersService.java | 62 ++++------- .../explore/server/services/StudyService.java | 56 ++++------ 7 files changed, 166 insertions(+), 307 deletions(-) diff --git a/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java b/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java index 9d6d0940..4409ac0e 100644 --- a/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java +++ b/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java @@ -8,50 +8,28 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.jackson.JsonComponentModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.web.client.RestTemplate; /** * @author Etienne Homer */ @Configuration public class RestTemplateConfig { - - @Bean - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - - //find and replace Jackson message converter with our own - for (int i = 0; i < restTemplate.getMessageConverters().size(); i++) { - final HttpMessageConverter httpMessageConverter = restTemplate.getMessageConverters().get(i); - if (httpMessageConverter instanceof MappingJackson2HttpMessageConverter) { - restTemplate.getMessageConverters().set(i, mappingJackson2HttpMessageConverter()); - } - } - - return restTemplate; - } - - public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { - MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); - converter.setObjectMapper(objectMapper()); - return converter; - } - - private ObjectMapper createObjectMapper() { - var objectMapper = Jackson2ObjectMapperBuilder.json().build(); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.registerModule(new JsonComponentModule()); - return objectMapper; - } - + /** + * we alter the {@link ObjectMapper} generated by Spring using SpringBoot system + * @return json customizer + * @see org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration JacksonAutoConfiguration + * @see org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration HttpMessageConvertersAutoConfiguration + * @see org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration RestTemplateAutoConfiguration + */ @Bean - public ObjectMapper objectMapper() { - return createObjectMapper(); + public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { + //also from .config: spring.jackson.serialization.write-dates-as-timestamps=false + return builder -> builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + //.findModulesViaServiceLoader(true) + .modulesToInstall(new JsonComponentModule()); } } diff --git a/src/main/java/org/gridsuite/explore/server/services/CaseService.java b/src/main/java/org/gridsuite/explore/server/services/CaseService.java index ab0a2963..0b04cafa 100644 --- a/src/main/java/org/gridsuite/explore/server/services/CaseService.java +++ b/src/main/java/org/gridsuite/explore/server/services/CaseService.java @@ -10,6 +10,7 @@ import org.gridsuite.explore.server.ExploreException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.*; import org.springframework.stereotype.Service; @@ -26,21 +27,16 @@ import java.util.UUID; import java.util.stream.Collectors; -import static org.gridsuite.explore.server.ExploreException.Type.*; +import static org.gridsuite.explore.server.ExploreException.Type.INCORRECT_CASE_FILE; @Service public class CaseService implements IDirectoryElementsService { - private static final String CASE_SERVER_API_VERSION = "v1"; - - private static final String DELIMITER = "/"; private final RestTemplate restTemplate; - private String caseServerBaseUri; @Autowired public CaseService(@Value("${powsybl.services.case-server.base-uri:http://case-server/}") String studyServerBaseUri, - RestTemplate restTemplate) { - this.caseServerBaseUri = studyServerBaseUri; - this.restTemplate = restTemplate; + RestTemplateBuilder restTemplateBuilder) { + this.restTemplate = restTemplateBuilder.rootUri(studyServerBaseUri + "/v1").build(); } private static ExploreException wrapRemoteError(String response, HttpStatus statusCode) { @@ -51,11 +47,7 @@ private static ExploreException wrapRemoteError(String response, HttpStatus stat } } - public void setBaseUri(String actionsServerBaseUri) { - this.caseServerBaseUri = actionsServerBaseUri; - } - - UUID importCase(MultipartFile multipartFile) { + public UUID importCase(MultipartFile multipartFile) { MultiValueMap body = new LinkedMultiValueMap<>(); UUID caseUuid; HttpHeaders headers = new HttpHeaders(); @@ -64,11 +56,9 @@ UUID importCase(MultipartFile multipartFile) { Objects.requireNonNull(multipartFile.getOriginalFilename()); body.add("file", multipartFile.getResource()); } - HttpEntity> request = new HttpEntity<>( - body, headers); + HttpEntity> request = new HttpEntity<>(body, headers); try { - caseUuid = restTemplate.postForObject(caseServerBaseUri + "/" + CASE_SERVER_API_VERSION + "/cases", request, - UUID.class); + caseUuid = restTemplate.postForObject("/cases", request, UUID.class); } catch (HttpStatusCodeException e) { if (e.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) { throw new ExploreException(INCORRECT_CASE_FILE, e.getMessage()); @@ -78,35 +68,33 @@ UUID importCase(MultipartFile multipartFile) { return caseUuid; } - UUID duplicateCase(UUID sourceCaseUuid) { - String path = UriComponentsBuilder.fromPath(DELIMITER + CASE_SERVER_API_VERSION + "/cases") + public UUID duplicateCase(UUID sourceCaseUuid) { + String path = UriComponentsBuilder.fromPath("/cases") .queryParam("duplicateFrom", sourceCaseUuid) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - return restTemplate.exchange(caseServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(headers), UUID.class) + return restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(headers), UUID.class) .getBody(); } @Override public void delete(UUID id, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + CASE_SERVER_API_VERSION + "/cases/{id}") + String path = UriComponentsBuilder.fromPath("/cases/{id}") .buildAndExpand(id) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); - restTemplate.exchange(caseServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); + restTemplate.exchange(path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); } @Override public List> getMetadata(List casesUuids) { var ids = casesUuids.stream().map(UUID::toString).collect(Collectors.joining(",")); - String path = UriComponentsBuilder - .fromPath(DELIMITER + CASE_SERVER_API_VERSION + "/cases/metadata" + "?ids=" + ids) - .buildAndExpand() + String path = UriComponentsBuilder.fromPath("/cases/metadata") + .queryParam("ids", ids) .toUriString(); - return restTemplate.exchange(caseServerBaseUri + path, HttpMethod.GET, null, - new ParameterizedTypeReference>>() { - }).getBody(); + return restTemplate.exchange(path, HttpMethod.GET, null, + new ParameterizedTypeReference>>() { }).getBody(); } } diff --git a/src/main/java/org/gridsuite/explore/server/services/ContingencyListService.java b/src/main/java/org/gridsuite/explore/server/services/ContingencyListService.java index 746ede0d..976d1670 100644 --- a/src/main/java/org/gridsuite/explore/server/services/ContingencyListService.java +++ b/src/main/java/org/gridsuite/explore/server/services/ContingencyListService.java @@ -7,8 +7,12 @@ package org.gridsuite.explore.server.services; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -23,133 +27,116 @@ */ @Service public class ContingencyListService implements IDirectoryElementsService { - private static final String ACTIONS_API_VERSION = "v1"; - private static final String DELIMITER = "/"; - private static final String HEADER_USER_ID = "userId"; private static final String HEADER_DUPLICATE_FROM = "duplicateFrom"; - private String actionsServerBaseUri; private final RestTemplate restTemplate; @Autowired - public ContingencyListService(RestTemplate restTemplate, RemoteServicesProperties remoteServicesProperties) { - this.actionsServerBaseUri = remoteServicesProperties.getServiceUri("actions-server"); - this.restTemplate = restTemplate; - } - - public void setActionsServerBaseUri(String actionsServerBaseUri) { - this.actionsServerBaseUri = actionsServerBaseUri; + public ContingencyListService(RestTemplateBuilder restTemplateBuilder, RemoteServicesProperties remoteServicesProperties) { + this.restTemplate = restTemplateBuilder.rootUri(remoteServicesProperties.getServiceUri("actions-server") + "/v1").build(); } @Override public void delete(UUID id, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/contingency-lists/{id}") + String path = UriComponentsBuilder.fromPath("/contingency-lists/{id}") .buildAndExpand(id) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); + restTemplate.exchange(path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); } public void insertScriptContingencyList(UUID id, String content) { - String path = UriComponentsBuilder - .fromPath(DELIMITER + ACTIONS_API_VERSION + "/script-contingency-lists?id={id}") - .buildAndExpand(id) + String path = UriComponentsBuilder.fromPath("/script-contingency-lists") + .queryParam("id", id) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(content, headers); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class); + restTemplate.exchange(path, HttpMethod.POST, httpEntity, Void.class); } public void insertScriptContingencyList(UUID sourceListId, UUID id) { - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/script-contingency-lists") + String path = UriComponentsBuilder.fromPath("/script-contingency-lists") .queryParam(HEADER_DUPLICATE_FROM, sourceListId) .queryParam("id", id) .toUriString(); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, null, Void.class); + restTemplate.exchange(path, HttpMethod.POST, null, Void.class); } public void insertFormContingencyList(UUID id, String content) { - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/form-contingency-lists?id={id}") - .buildAndExpand(id) + String path = UriComponentsBuilder.fromPath("/form-contingency-lists") + .queryParam("id", id) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(content, headers); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class); + restTemplate.exchange(path, HttpMethod.POST, httpEntity, Void.class); } public void insertIdentifierContingencyList(UUID id, String content) { - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/identifier-contingency-lists?id={id}") - .buildAndExpand(id) + String path = UriComponentsBuilder.fromPath("/identifier-contingency-lists") + .queryParam("id", id) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(content, headers); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class); + restTemplate.exchange(path, HttpMethod.POST, httpEntity, Void.class); } public void insertFormContingencyList(UUID sourceListId, UUID id) { - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/form-contingency-lists") + String path = UriComponentsBuilder.fromPath("/form-contingency-lists") .queryParam(HEADER_DUPLICATE_FROM, sourceListId) .queryParam("id", id) .toUriString(); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, null, Void.class); + restTemplate.exchange(path, HttpMethod.POST, null, Void.class); } public void insertIdentifierContingencyList(UUID sourceListId, UUID id) { - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/identifier-contingency-lists") + String path = UriComponentsBuilder.fromPath("/identifier-contingency-lists") .queryParam(HEADER_DUPLICATE_FROM, sourceListId) .queryParam("id", id) .toUriString(); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, null, Void.class); + restTemplate.exchange(path, HttpMethod.POST, null, Void.class); } public void newScriptFromFormContingencyList(UUID id, UUID newId) { - String path = UriComponentsBuilder - .fromPath(DELIMITER + ACTIONS_API_VERSION + "/form-contingency-lists/{id}/new-script?newId={newId}") - .buildAndExpand(id, newId) + String path = UriComponentsBuilder.fromPath("/form-contingency-lists/{id}/new-script") + .queryParam("newId", newId) + .buildAndExpand(id) .toUriString(); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, null, Void.class); + restTemplate.exchange(path, HttpMethod.POST, null, Void.class); } public void replaceFormContingencyListWithScript(UUID id, String userId) { - String path = UriComponentsBuilder - .fromPath(DELIMITER + ACTIONS_API_VERSION + "/form-contingency-lists/{id}/replace-with-script") + String path = UriComponentsBuilder.fromPath("/form-contingency-lists/{id}/replace-with-script") .buildAndExpand(id) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.set(HEADER_USER_ID, userId); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(headers), Void.class); + restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(headers), Void.class); } @Override public List> getMetadata(List contingencyListsUuids) { var ids = contingencyListsUuids.stream().map(UUID::toString).collect(Collectors.joining(",")); - String path = UriComponentsBuilder - .fromPath(DELIMITER + ACTIONS_API_VERSION + "/contingency-lists/metadata" + "?ids=" + ids) - .buildAndExpand() + String path = UriComponentsBuilder.fromPath("/contingency-lists/metadata") + .queryParam("ids", ids) .toUriString(); - return restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.GET, null, - new ParameterizedTypeReference>>() { - }).getBody(); + return restTemplate.exchange(path, HttpMethod.GET, null, + new ParameterizedTypeReference>>() { }).getBody(); } public void updateContingencyList(UUID id, String content, String userId, String element) { - - String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + element) + String path = UriComponentsBuilder.fromPath(element) .buildAndExpand(id) .toUriString(); - restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.PUT, getHttpEntityWithUserHeader(userId, content), Void.class); - + restTemplate.exchange(path, HttpMethod.PUT, getHttpEntityWithUserHeader(userId, content), Void.class); } private HttpEntity getHttpEntityWithUserHeader(String userId, String content) { - HttpHeaders headers = new HttpHeaders(); headers.set(HEADER_USER_ID, userId); headers.setContentType(MediaType.APPLICATION_JSON); - return new HttpEntity<>(content, headers); } } diff --git a/src/main/java/org/gridsuite/explore/server/services/DirectoryService.java b/src/main/java/org/gridsuite/explore/server/services/DirectoryService.java index 56af9315..2785a749 100644 --- a/src/main/java/org/gridsuite/explore/server/services/DirectoryService.java +++ b/src/main/java/org/gridsuite/explore/server/services/DirectoryService.java @@ -10,6 +10,8 @@ import org.gridsuite.explore.server.dto.ElementAttributes; import org.gridsuite.explore.server.utils.ParametersType; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Lazy; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -21,9 +23,10 @@ import org.springframework.web.util.UriComponentsBuilder; import java.util.*; +import java.util.function.Predicate; import java.util.stream.Collectors; -import static org.gridsuite.explore.server.ExploreException.Type.*; +import static org.gridsuite.explore.server.ExploreException.Type.UNKNOWN_ELEMENT_TYPE; import static org.gridsuite.explore.server.services.ExploreService.*; /** @@ -31,27 +34,15 @@ */ @Service public class DirectoryService implements IDirectoryElementsService { - - private static final String DIRECTORY_SERVER_API_VERSION = "v1"; - - private static final String DELIMITER = "/"; - - private static final String DIRECTORIES_SERVER_ROOT_PATH = DELIMITER + DIRECTORY_SERVER_API_VERSION + DELIMITER - + "directories"; - - private static final String ELEMENTS_SERVER_ROOT_PATH = DELIMITER + DIRECTORY_SERVER_API_VERSION + DELIMITER - + "elements"; - private final Map genericServices; private final RestTemplate restTemplate; - private String directoryServerBaseUri; @Autowired public DirectoryService( FilterService filterService, ContingencyListService contingencyListService, StudyService studyService, - CaseService caseService, ParametersService parametersService, RestTemplate restTemplate, RemoteServicesProperties remoteServicesProperties) { - this.directoryServerBaseUri = remoteServicesProperties.getServiceUri("directory-server"); - this.restTemplate = restTemplate; + CaseService caseService, @Lazy ParametersService parametersService, RestTemplateBuilder restTemplateBuilder, + RemoteServicesProperties remoteServicesProperties) { + this.restTemplate = restTemplateBuilder.rootUri(remoteServicesProperties.getServiceUri("directory-server") + "/v1").build(); this.genericServices = Map.of( FILTER, filterService, CONTINGENCY_LIST, contingencyListService, @@ -61,89 +52,65 @@ public DirectoryService( ParametersType.VOLTAGE_INIT_PARAMETERS.name(), parametersService); } - public void setDirectoryServerBaseUri(String directoryServerBaseUri) { - this.directoryServerBaseUri = directoryServerBaseUri; - } - public ElementAttributes createElement(ElementAttributes elementAttributes, UUID directoryUuid, String userId) { - String path = UriComponentsBuilder - .fromPath(DIRECTORIES_SERVER_ROOT_PATH + "/{directoryUuid}/elements") + String path = UriComponentsBuilder.fromPath("/directories/{directoryUuid}/elements") .buildAndExpand(directoryUuid) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(elementAttributes, headers); - return restTemplate - .exchange(directoryServerBaseUri + path, HttpMethod.POST, httpEntity, ElementAttributes.class) - .getBody(); + return restTemplate.exchange(path, HttpMethod.POST, httpEntity, ElementAttributes.class).getBody(); } public void deleteDirectoryElement(UUID elementUuid, String userId) { - String path = UriComponentsBuilder - .fromPath(ELEMENTS_SERVER_ROOT_PATH + "/{elementUuid}") + String path = UriComponentsBuilder.fromPath("/elements/{elementUuid}") .buildAndExpand(elementUuid) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); - restTemplate.exchange(directoryServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); + restTemplate.exchange(path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); } public ElementAttributes getElementInfos(UUID elementUuid) { - String path = UriComponentsBuilder - .fromPath(ELEMENTS_SERVER_ROOT_PATH + "/{directoryUuid}") + String path = UriComponentsBuilder.fromPath("/elements/{directoryUuid}") .buildAndExpand(elementUuid) .toUriString(); - return restTemplate.exchange(directoryServerBaseUri + path, HttpMethod.GET, null, ElementAttributes.class) - .getBody(); + return restTemplate.exchange(path, HttpMethod.GET, null, ElementAttributes.class).getBody(); } private List getElementsInfos(List elementsUuids, List elementTypes) { var ids = elementsUuids.stream().map(UUID::toString).collect(Collectors.joining(",")); - String path = UriComponentsBuilder.fromPath(ELEMENTS_SERVER_ROOT_PATH).toUriString() + "?ids=" + ids; - - if (!CollectionUtils.isEmpty(elementTypes)) { - path += "&elementTypes=" + elementTypes.stream().collect(Collectors.joining(",")); - } - - List elementAttributesList; - elementAttributesList = restTemplate.exchange(directoryServerBaseUri + path, HttpMethod.GET, null, - new ParameterizedTypeReference>() { - }).getBody(); - if (elementAttributesList != null) { - return elementAttributesList; - } else { - return Collections.emptyList(); - } + String path = UriComponentsBuilder.fromPath("/elements") + .queryParam("ids", ids) + .queryParamIfPresent("elementTypes", Optional.ofNullable(elementTypes) + .filter(Predicate.not(List::isEmpty)).map(l -> String.join(",", l))) + .toUriString(); + List elementAttributesList = restTemplate.exchange(path, HttpMethod.GET, null, + new ParameterizedTypeReference>() { }).getBody(); + return Objects.requireNonNullElseGet(elementAttributesList, Collections::emptyList); } public void notifyDirectoryChanged(UUID elementUuid, String userId) { - String path = UriComponentsBuilder - .fromPath(ELEMENTS_SERVER_ROOT_PATH + "/{elementUuid}/notification?type={update_directory}") - .buildAndExpand(elementUuid, NotificationType.UPDATE_DIRECTORY.name()) + String path = UriComponentsBuilder.fromPath("/elements/{elementUuid}/notification") + .queryParam("type", NotificationType.UPDATE_DIRECTORY.name()) + .buildAndExpand(elementUuid) .toUriString(); - HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); - restTemplate.exchange(directoryServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(headers), Void.class); + restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(headers), Void.class); } private List getDirectoryElements(UUID directoryUuid, String userId) { - String path = UriComponentsBuilder.fromPath(DIRECTORIES_SERVER_ROOT_PATH + "/{directoryUuid}/elements") + String path = UriComponentsBuilder.fromPath("/directories/{directoryUuid}/elements") .buildAndExpand(directoryUuid) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); List elementAttributesList; - elementAttributesList = restTemplate.exchange(directoryServerBaseUri + path, HttpMethod.GET, - new HttpEntity<>(headers), new ParameterizedTypeReference>() { - }).getBody(); - - if (elementAttributesList != null) { - return elementAttributesList; - } else { - return Collections.emptyList(); - } + elementAttributesList = restTemplate.exchange(path, HttpMethod.GET, + new HttpEntity<>(headers), new ParameterizedTypeReference>() { }).getBody(); + return Objects.requireNonNullElseGet(elementAttributesList, Collections::emptyList); } public void deleteElement(UUID id, String userId) { @@ -156,8 +123,9 @@ private IDirectoryElementsService getGenericService(String type) { IDirectoryElementsService iDirectoryElementsService = genericServices.get(type); if (iDirectoryElementsService == null) { throw new ExploreException(UNKNOWN_ELEMENT_TYPE, "Unknown element type " + type); + } else { + return iDirectoryElementsService; } - return iDirectoryElementsService; } public List getElementsMetadata(List ids, List elementTypes, @@ -170,28 +138,24 @@ public List getElementsMetadata(List ids, List IDirectoryElementsService service = getGenericService(elementAttribute.getKey()); listOfElements.addAll(service.completeElementAttribute(elementAttribute.getValue())); } - if (!CollectionUtils.isEmpty(equipmentTypes) && !listOfElements.isEmpty()) { listOfElements = listOfElements.stream() .filter(element -> "DIRECTORY".equals(element.getType()) || equipmentTypes.contains(element.getSpecificMetadata().get("equipmentType"))) .collect(Collectors.toList()); } - return listOfElements; } public void updateElement(UUID elementUuid, ElementAttributes elementAttributes, String userId) { - String path = UriComponentsBuilder - .fromPath(ELEMENTS_SERVER_ROOT_PATH + "/{elementUuid}") + String path = UriComponentsBuilder.fromPath("/elements/{elementUuid}") .buildAndExpand(elementUuid) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.set(HEADER_USER_ID, userId); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity<>(elementAttributes, headers); - restTemplate.exchange(directoryServerBaseUri + path, HttpMethod.PUT, httpEntity, Void.class); + restTemplate.exchange(path, HttpMethod.PUT, httpEntity, Void.class); } // TODO get id/type recursively then do batch delete diff --git a/src/main/java/org/gridsuite/explore/server/services/FilterService.java b/src/main/java/org/gridsuite/explore/server/services/FilterService.java index c1e9dc86..de245522 100644 --- a/src/main/java/org/gridsuite/explore/server/services/FilterService.java +++ b/src/main/java/org/gridsuite/explore/server/services/FilterService.java @@ -7,8 +7,12 @@ package org.gridsuite.explore.server.services; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -23,91 +27,68 @@ */ @Service public class FilterService implements IDirectoryElementsService { - private static final String FILTER_SERVER_API_VERSION = "v1"; - - private static final String DELIMITER = "/"; - private static final String HEADER_USER_ID = "userId"; - - private String filterServerBaseUri; - private final RestTemplate restTemplate; @Autowired - public FilterService(RestTemplate restTemplate, RemoteServicesProperties remoteServicesProperties) { - this.filterServerBaseUri = remoteServicesProperties.getServiceUri("filter-server"); - this.restTemplate = restTemplate; - } - - public void setFilterServerBaseUri(String filterServerBaseUri) { - this.filterServerBaseUri = filterServerBaseUri; + public FilterService(RestTemplateBuilder restTemplateBuilder, RemoteServicesProperties remoteServicesProperties) { + this.restTemplate = restTemplateBuilder.rootUri(remoteServicesProperties.getServiceUri("filter-server") + "/v1").build(); } public void replaceFilterWithScript(UUID id, String userId) { - String path = UriComponentsBuilder - .fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/{id}/replace-with-script") + String path = UriComponentsBuilder.fromPath("/filters/{id}/replace-with-script") .buildAndExpand(id) .toUriString(); - HttpHeaders headers = new HttpHeaders(); - headers.set(HEADER_USER_ID, userId); - restTemplate.exchange(filterServerBaseUri + path, HttpMethod.PUT, new HttpEntity<>(headers), Void.class); + HttpHeaders headers = getHeaders(userId); + restTemplate.exchange(path, HttpMethod.PUT, new HttpEntity<>(headers), Void.class); } public void insertNewScriptFromFilter(UUID id, UUID newId) { - String path = UriComponentsBuilder - .fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/{id}/new-script?newId={newId}") - .buildAndExpand(id, newId) + String path = UriComponentsBuilder.fromPath("/filters/{id}/new-script") + .queryParam("newId", newId) + .buildAndExpand(id) .toUriString(); - restTemplate.exchange(filterServerBaseUri + path, HttpMethod.POST, null, Void.class); + restTemplate.exchange(path, HttpMethod.POST, null, Void.class); } @Override public void delete(UUID id, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/{id}") + String path = UriComponentsBuilder.fromPath("/filters/{id}") .buildAndExpand(id) .toUriString(); - restTemplate.exchange(filterServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(getHeaders(userId)), - Void.class); + restTemplate.exchange(path, HttpMethod.DELETE, new HttpEntity<>(getHeaders(userId)), Void.class); } public void insertFilter(String filter, UUID filterId, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters?id={id}") - .buildAndExpand(filterId) + String path = UriComponentsBuilder.fromPath("/filters") + .queryParam("id", filterId) .toUriString(); - HttpHeaders headers = getHeaders(userId); - headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity<>(filter, headers); - restTemplate.exchange(filterServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class); + HttpEntity httpEntity = getHttpEntityWithUserHeaderAndJsonMediaType(filter, userId); + restTemplate.exchange(path, HttpMethod.POST, httpEntity, Void.class); } public void insertFilter(UUID sourceFilterId, UUID filterId, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters") + String path = UriComponentsBuilder.fromPath("/filters") .queryParam("duplicateFrom", sourceFilterId) .queryParam("id", filterId) .toUriString(); - restTemplate.exchange(filterServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(getHeaders(userId)), - Void.class); + restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(getHeaders(userId)), Void.class); } @Override public List> getMetadata(List filtersUuids) { var ids = filtersUuids.stream().map(UUID::toString).collect(Collectors.joining(",")); - String path = UriComponentsBuilder - .fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/metadata" + "?ids=" + ids) - .buildAndExpand() + String path = UriComponentsBuilder.fromPath("/filters/metadata") + .queryParam("ids", ids) .toUriString(); - return restTemplate.exchange(filterServerBaseUri + path, HttpMethod.GET, null, - new ParameterizedTypeReference>>() { - }).getBody(); + return restTemplate.exchange(path, HttpMethod.GET, null, + new ParameterizedTypeReference>>() { }).getBody(); } public void updateFilter(UUID id, String filter, String userId) { - - String path = UriComponentsBuilder.fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/{id}") + String path = UriComponentsBuilder.fromPath("/filters/{id}") .buildAndExpand(id) .toUriString(); - - restTemplate.exchange(filterServerBaseUri + path, HttpMethod.PUT, getHttpEntityWithUserHeaderAndJsonMediaType(userId, filter), Void.class); - + restTemplate.exchange(path, HttpMethod.PUT, getHttpEntityWithUserHeaderAndJsonMediaType(userId, filter), Void.class); } private HttpHeaders getHeaders(String userId) { @@ -121,5 +102,4 @@ private HttpEntity getHttpEntityWithUserHeaderAndJsonMediaType(String us headers.setContentType(MediaType.APPLICATION_JSON); return new HttpEntity<>(content, headers); } - } diff --git a/src/main/java/org/gridsuite/explore/server/services/ParametersService.java b/src/main/java/org/gridsuite/explore/server/services/ParametersService.java index 96d065b6..934c6bdb 100644 --- a/src/main/java/org/gridsuite/explore/server/services/ParametersService.java +++ b/src/main/java/org/gridsuite/explore/server/services/ParametersService.java @@ -9,12 +9,16 @@ import org.gridsuite.explore.server.dto.ElementAttributes; import org.gridsuite.explore.server.utils.ParametersType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.http.*; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.UUID; @@ -24,78 +28,48 @@ */ @Service public class ParametersService implements IDirectoryElementsService { - private static final String SERVER_API_VERSION = "v1"; + private final DirectoryService directoryService; - private static final String DELIMITER = "/"; - private static final String HEADER_USER_ID = "userId"; - - private final RestTemplate restTemplate; - - private DirectoryService directoryService; - - private final Map genericParametersServices = Map.of(ParametersType.VOLTAGE_INIT_PARAMETERS, "voltage-init-server"); - - private RemoteServicesProperties remoteServicesProperties; + private final Map genericParametersServices; @Autowired - public ParametersService(RemoteServicesProperties remoteServicesProperties, @Lazy DirectoryService directoryService, RestTemplate restTemplate) { - this.restTemplate = restTemplate; - this.remoteServicesProperties = remoteServicesProperties; + public ParametersService(RemoteServicesProperties remoteServicesProperties, DirectoryService directoryService, RestTemplateBuilder restTemplateBuilder) { + genericParametersServices = Map.of( + ParametersType.VOLTAGE_INIT_PARAMETERS, restTemplateBuilder.rootUri(remoteServicesProperties.getServiceUri(ParametersType.VOLTAGE_INIT_PARAMETERS.name().toLowerCase(Locale.ENGLISH)) + "/v1").build() + ); this.directoryService = directoryService; } public UUID createParameters(String parameters, ParametersType parametersType) { - String parametersServerBaseUri = remoteServicesProperties.getServiceUri(genericParametersServices.get(parametersType)); Objects.requireNonNull(parameters); - - var path = UriComponentsBuilder - .fromPath(DELIMITER + SERVER_API_VERSION + "/parameters") - .buildAndExpand() + var path = UriComponentsBuilder.fromPath("/parameters") .toUriString(); - HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity<>(parameters, headers); - - UUID parametersUuid; - - parametersUuid = restTemplate.exchange(parametersServerBaseUri + path, HttpMethod.POST, httpEntity, UUID.class).getBody(); - - return parametersUuid; + return genericParametersServices.get(parametersType).exchange(path, HttpMethod.POST, httpEntity, UUID.class).getBody(); } public void updateParameters(UUID parametersUuid, String parameters, ParametersType parametersType) { - String parametersServerBaseUri = remoteServicesProperties.getServiceUri(genericParametersServices.get(parametersType)); Objects.requireNonNull(parameters); - - var path = UriComponentsBuilder - .fromPath(DELIMITER + SERVER_API_VERSION + "/parameters/{parametersUuid}") + var path = UriComponentsBuilder.fromPath("/parameters/{parametersUuid}") .buildAndExpand(parametersUuid) .toUriString(); - HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity<>(parameters, headers); - - restTemplate.exchange(parametersServerBaseUri + path, HttpMethod.PUT, httpEntity, UUID.class); + genericParametersServices.get(parametersType).exchange(path, HttpMethod.PUT, httpEntity, UUID.class); } @Override public void delete(UUID parametersUuid, String userId) { ElementAttributes elementAttributes = directoryService.getElementInfos(parametersUuid); ParametersType parametersType = ParametersType.valueOf(elementAttributes.getType()); - String parametersServerBaseUri = remoteServicesProperties.getServiceUri(genericParametersServices.get(parametersType)); - String path = UriComponentsBuilder.fromPath(DELIMITER + SERVER_API_VERSION + "/parameters/{parametersUuid}") + String path = UriComponentsBuilder.fromPath("/parameters/{parametersUuid}") .buildAndExpand(parametersUuid) .toUriString(); - HttpHeaders headers = new HttpHeaders(); headers.add(HEADER_USER_ID, userId); - - restTemplate.exchange(parametersServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(headers), - Void.class); + genericParametersServices.get(parametersType).exchange(path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); } - } diff --git a/src/main/java/org/gridsuite/explore/server/services/StudyService.java b/src/main/java/org/gridsuite/explore/server/services/StudyService.java index 6304e37c..b874cd59 100644 --- a/src/main/java/org/gridsuite/explore/server/services/StudyService.java +++ b/src/main/java/org/gridsuite/explore/server/services/StudyService.java @@ -7,13 +7,19 @@ package org.gridsuite.explore.server.services; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -21,67 +27,49 @@ */ @Service public class StudyService implements IDirectoryElementsService { - private static final String STUDY_SERVER_API_VERSION = "v1"; - - private static final String DELIMITER = "/"; private final RestTemplate restTemplate; - private String studyServerBaseUri; @Autowired - public StudyService(RestTemplate restTemplate, RemoteServicesProperties remoteServicesProperties) { - this.studyServerBaseUri = remoteServicesProperties.getServiceUri("study-server"); - this.restTemplate = restTemplate; - } - - public void setStudyServerBaseUri(String studyServerBaseUri) { - this.studyServerBaseUri = studyServerBaseUri; + public StudyService(RestTemplateBuilder restTemplateBuilder, RemoteServicesProperties remoteServicesProperties) { + this.restTemplate = restTemplateBuilder.rootUri(remoteServicesProperties.getServiceUri("study-server") + "/v1").build(); } public void insertStudyWithExistingCaseFile(UUID studyUuid, String userId, UUID caseUuid, Map importParams, Boolean duplicateCase) { - String path = UriComponentsBuilder.fromPath(DELIMITER + STUDY_SERVER_API_VERSION + - "/studies/cases/{caseUuid}") + String path = UriComponentsBuilder.fromPath("/studies/cases/{caseUuid}") .queryParam("studyUuid", studyUuid) .queryParam("duplicateCase", duplicateCase) .buildAndExpand(caseUuid) .toUriString(); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.add(HEADER_USER_ID, userId); - HttpEntity> request = new HttpEntity<>( - importParams, headers); - restTemplate.exchange(studyServerBaseUri + path, HttpMethod.POST, request, Void.class); + HttpHeaders headers = getHeaders(userId); + HttpEntity> request = new HttpEntity<>(importParams, headers); + restTemplate.exchange(path, HttpMethod.POST, request, Void.class); } public void duplicateStudy(UUID sourceStudyUuid, UUID studyUuid, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + STUDY_SERVER_API_VERSION + - "/studies") + String path = UriComponentsBuilder.fromPath("/studies") .queryParam("duplicateFrom", sourceStudyUuid) .queryParam("studyUuid", studyUuid) .toUriString(); - restTemplate.exchange(studyServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(getHeaders(userId)), - Void.class); + restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(getHeaders(userId)), Void.class); } @Override public void delete(UUID studyUuid, String userId) { - String path = UriComponentsBuilder.fromPath(DELIMITER + STUDY_SERVER_API_VERSION + "/studies/{studyUuid}") + String path = UriComponentsBuilder.fromPath("/studies/{studyUuid}") .buildAndExpand(studyUuid) .toUriString(); - restTemplate.exchange(studyServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(getHeaders(userId)), - Void.class); + restTemplate.exchange(path, HttpMethod.DELETE, new HttpEntity<>(getHeaders(userId)), Void.class); } @Override public List> getMetadata(List studiesUuids) { var ids = studiesUuids.stream().map(UUID::toString).collect(Collectors.joining(",")); - String path = UriComponentsBuilder - .fromPath(DELIMITER + STUDY_SERVER_API_VERSION + "/studies/metadata" + "?ids=" + ids) - .buildAndExpand() + String path = UriComponentsBuilder.fromPath("/studies/metadata") + .queryParam("ids", ids) .toUriString(); - return restTemplate.exchange(studyServerBaseUri + path, HttpMethod.GET, null, - new ParameterizedTypeReference>>() { - }).getBody(); + return restTemplate.exchange(path, HttpMethod.GET, null, + new ParameterizedTypeReference>>() { }).getBody(); } private HttpHeaders getHeaders(String userId) { From 8c8b8dbc8835a87668e8098fdb71bba8c065d288 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 09:52:47 +0200 Subject: [PATCH 07/14] fix indent in tests --- .../gridsuite/explore/server/ExploreTest.java | 250 +++++++++--------- 1 file changed, 127 insertions(+), 123 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index d3827caa..cb8e17e1 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -303,10 +303,10 @@ void teardown() throws IOException { @Test void testCreateStudyFromExistingCase() throws Exception { mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) - .param("duplicateCase", "false") - .header("userId", "userId") - .contentType(MediaType.APPLICATION_JSON) - ).andExpect(status().isOk()); + .param("duplicateCase", "false") + .header("userId", "userId") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); } @Test @@ -323,10 +323,10 @@ void testCreateCase() throws Exception { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE, "text/xml", is); mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", - STUDY1, "description", PARENT_DIRECTORY_UUID).file(mockFile) + STUDY1, "description", PARENT_DIRECTORY_UUID) + .file(mockFile) .header("userId", USER1) - .contentType(MediaType.MULTIPART_FORM_DATA) - ) + .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isOk()); } } @@ -337,7 +337,8 @@ void testCaseCreationError() throws Exception { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE_WITH_ERRORS, "text/xml", is); mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", - STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID).file(mockFile) + STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID) + .file(mockFile) .header("userId", USER1) .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isBadRequest()); @@ -347,108 +348,110 @@ void testCaseCreationError() throws Exception { @Test void testCreateScriptContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", - "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}") - ).andExpect(status().isOk()); + "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isOk()); } @Test void testCreateScriptContingencyListError() throws Exception { mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", - "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}") - ).andExpect(status().isInternalServerError()); + "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isInternalServerError()); } @Test void testCreateFormContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/form-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", - FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}") - ).andExpect(status().isOk()); + FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isOk()); } @Test void testCreateIdentifierContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/identifier-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", - "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}") - ).andExpect(status().isOk()); + "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isOk()); } @Test void testNewScriptFromFormContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, "scriptName", PARENT_DIRECTORY_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + CONTINGENCY_LIST_UUID, "scriptName", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testReplaceFormContingencyListWithScript() throws Exception { - mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/replace-with-script", CONTINGENCY_LIST_UUID).header("userId", USER1)).andExpect(status().isOk()); + mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/replace-with-script", CONTINGENCY_LIST_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testCreateFilter() throws Exception { mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}", - "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Filter content\"}") - ).andExpect(status().isOk()); + "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Filter content\"}")) + .andExpect(status().isOk()); } @Test void testCreateParameters() throws Exception { mockMvc.perform(post("/v1/explore/parameters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", - "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Parameters content\"}") - ).andExpect(status().isOk()); + "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Parameters content\"}")) + .andExpect(status().isOk()); } @Test void testUpdateParameters() throws Exception { mockMvc.perform(put("/v1/explore/parameters/{id}?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", - PARAMETERS_UUID, "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"new Parameters content\"}") - ).andExpect(status().isOk()); + PARAMETERS_UUID, "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"new Parameters content\"}")) + .andExpect(status().isOk()); } @Test void testNewScriptFromFilter() throws Exception { mockMvc.perform(post("/v1/explore/filters/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", - FILTER_UUID, "scriptName", PARENT_DIRECTORY_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + FILTER_UUID, "scriptName", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testReplaceFilterWithScript() throws Exception { - mockMvc.perform(post("/v1/explore/filters/{id}/replace-with-script", - FILTER_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + mockMvc.perform(post("/v1/explore/filters/{id}/replace-with-script", FILTER_UUID).header("userId", USER1)) + .andExpect(status().isOk()); } - public void deleteElement(UUID elementUUid) throws Exception { - mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)).andExpect(status().isOk()); + private void deleteElement(UUID elementUUid) throws Exception { + mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)) + .andExpect(status().isOk()); } - public void deleteElementInvalidType(UUID elementUUid) throws Exception { - mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)).andExpect(status().is2xxSuccessful()); + private void deleteElementInvalidType(UUID elementUUid) throws Exception { + mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)) + .andExpect(status().is2xxSuccessful()); } @Test @@ -465,50 +468,54 @@ void testDeleteElement() throws Exception { @Test void testGetElementsMetadata() throws Exception { mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) - .header("userId", USER1) - ).andExpectAll(status().isOk()); + .header("userId", USER1)) + .andExpectAll(status().isOk()); ElementAttributes filter1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA); ElementAttributes filter2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA_2); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=&elementTypes=FILTER") - .header("userId", USER1)) - .andExpectAll( - status().isOk(), - content().string(mapper.writeValueAsString(List.of(filter1, filter2))) - ); + .header("userId", USER1)) + .andExpectAll( + status().isOk(), + content().string(mapper.writeValueAsString(List.of(filter1, filter2))) + ); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=GENERATOR&elementTypes=FILTER") - .header("userId", USER1)) - .andExpectAll( - status().isOk(), - content().string(mapper.writeValueAsString(List.of())) - ); + .header("userId", USER1)) + .andExpectAll( + status().isOk(), + content().string("[]") + ); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=LINE&elementTypes=FILTER") - .header("userId", USER1)) - .andExpectAll( - status().isOk(), - content().string(mapper.writeValueAsString(List.of(filter2))) - ); + .header("userId", USER1)) + .andExpectAll( + status().isOk(), + content().string(mapper.writeValueAsString(List.of(filter2))) + ); } @Test void testDuplicateCase() throws Exception { - mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID).header("userId", USER1)).andExpect(status().isOk()); + mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testDuplicateFilter() throws Exception { mockMvc.perform(post("/v1/explore/filters?duplicateFrom={parentFilterId}&name={filterName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - FILTER_UUID, FILTER1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)).andExpect(status().isOk()); + FILTER_UUID, FILTER1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testDuplicateScriptContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/script-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) .andExpect(status().isOk()); } @@ -516,25 +523,25 @@ void testDuplicateScriptContingencyList() throws Exception { @Test void testDuplicateFormContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/form-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testDuplicateIdentifierContingencyList() throws Exception { mockMvc.perform(post("/v1/explore/identifier-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test void testDuplicateStudy() throws Exception { mockMvc.perform(post("/v1/explore/studies?duplicateFrom={parentStudyUuid}&studyName={studyName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - PUBLIC_STUDY_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1) - ).andExpect(status().isOk()); + PUBLIC_STUDY_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); } @Test @@ -543,7 +550,8 @@ void testCaseCreationErrorWithBadExtension() throws Exception { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_INCORRECT_FILE, "text/xml", is); mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", - STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID).file(mockFile) + STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID) + .file(mockFile) .header("userId", USER1) .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isUnprocessableEntity()); @@ -554,13 +562,12 @@ void testCaseCreationErrorWithBadExtension() throws Exception { void testChangeFilter() throws Exception { final String filter = "{\"type\":\"CRITERIA\",\"equipmentFilterForm\":{\"equipmentType\":\"BATTERY\",\"name\":\"test bbs\",\"countries\":[\"BS\"],\"nominalVoltage\":{\"type\":\"LESS_THAN\",\"value1\":545430,\"value2\":null},\"freeProperties\":{\"region\":[\"north\"],\"totallyFree\":[\"6555\"],\"tso\":[\"ceps\"]}}}"; final String name = "filter name"; - mockMvc.perform(put("/v1/explore/filters/{id}", - FILTER_UUID) - .contentType(APPLICATION_JSON) - .content(filter) - .param("name", name) - .header("userId", USER1) - ).andExpect(status().isOk()); + mockMvc.perform(put("/v1/explore/filters/{id}", FILTER_UUID) + .contentType(APPLICATION_JSON) + .content(filter) + .param("name", name) + .header("userId", USER1)) + .andExpect(status().isOk()); verifyFilterOrContingencyUpdateRequests("/v1/filters/"); } @@ -569,14 +576,13 @@ void testChangeFilter() throws Exception { void testModifyScriptContingencyList() throws Exception { final String scriptContingency = "{\"script\":\"alert(\\\"script contingency\\\")\"}"; final String name = "script name"; - mockMvc.perform(put("/v1/explore/contingency-lists/{id}", - SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) - .contentType(APPLICATION_JSON) - .content(scriptContingency) - .param("name", name) - .param("contingencyListType", ContingencyListType.SCRIPT.name()) - .header("userId", USER1) - ).andExpect(status().isOk()); + mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) + .contentType(APPLICATION_JSON) + .content(scriptContingency) + .param("name", name) + .param("contingencyListType", ContingencyListType.SCRIPT.name()) + .header("userId", USER1)) + .andExpect(status().isOk()); verifyFilterOrContingencyUpdateRequests("/v1/script-contingency-lists"); } @@ -585,14 +591,13 @@ void testModifyScriptContingencyList() throws Exception { void testModifyFormContingencyList() throws Exception { final String formContingency = "{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}"; final String name = "form contingency name"; - mockMvc.perform(put("/v1/explore/contingency-lists/{id}", - SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) - .contentType(APPLICATION_JSON) - .content(formContingency) - .param("name", name) - .param("contingencyListType", ContingencyListType.FORM.name()) - .header("userId", USER1) - ).andExpect(status().isOk()); + mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) + .contentType(APPLICATION_JSON) + .content(formContingency) + .param("name", name) + .param("contingencyListType", ContingencyListType.FORM.name()) + .header("userId", USER1)) + .andExpect(status().isOk()); verifyFilterOrContingencyUpdateRequests("/v1/form-contingency-lists/"); } @@ -601,14 +606,13 @@ void testModifyFormContingencyList() throws Exception { void testModifyIdentifierContingencyList() throws Exception { final String identifierContingencyList = "{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}"; final String name = "identifier contingencyList name"; - mockMvc.perform(put("/v1/explore/contingency-lists/{id}", - SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) - .contentType(APPLICATION_JSON) - .content(identifierContingencyList) - .param("name", name) - .param("contingencyListType", ContingencyListType.IDENTIFIERS.name()) - .header("userId", USER1) - ).andExpect(status().isOk()); + mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) + .contentType(APPLICATION_JSON) + .content(identifierContingencyList) + .param("name", name) + .param("contingencyListType", ContingencyListType.IDENTIFIERS.name()) + .header("userId", USER1)) + .andExpect(status().isOk()); verifyFilterOrContingencyUpdateRequests("/v1/identifier-contingency-lists/"); } @@ -626,9 +630,9 @@ private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterP @Test void testGetMetadata() throws Exception { MvcResult result = mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + CASE_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()) - .andReturn(); + .header("userId", USER1)) + .andExpect(status().isOk()) + .andReturn(); String res = result.getResponse().getContentAsString(); assertThat(mapper.readValue(res, new TypeReference>() { })) .as("elementsMetadata") From 5a90a14abf65d39ecf165a51ebfc9055390b0933 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 12:17:09 +0200 Subject: [PATCH 08/14] Migrate tests mocking from OkHttp to Spring mock interface --- .../gridsuite/explore/server/ExploreTest.java | 626 ++++++---- .../explore/server/ExploreTestExtension.java | 78 ++ .../gridsuite/explore/server/TestConfig.java | 77 ++ .../server/services/MockRemoteServices.java | 1045 +++++++++++++++++ .../explore/server/utils/TestUtils.java | 41 - 5 files changed, 1568 insertions(+), 299 deletions(-) create mode 100644 src/test/java/org/gridsuite/explore/server/ExploreTestExtension.java create mode 100644 src/test/java/org/gridsuite/explore/server/TestConfig.java create mode 100644 src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java delete mode 100644 src/test/java/org/gridsuite/explore/server/utils/TestUtils.java diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index cb8e17e1..bdf8280a 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -9,44 +9,31 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.powsybl.commons.exceptions.UncheckedInterruptedException; -import lombok.SneakyThrows; -import okhttp3.mockwebserver.Dispatcher; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; -import okhttp3.mockwebserver.RecordedRequest; -import org.apache.commons.lang3.StringUtils; import org.gridsuite.explore.server.dto.AccessRightsAttributes; import org.gridsuite.explore.server.dto.ElementAttributes; -import org.gridsuite.explore.server.services.*; import org.gridsuite.explore.server.utils.ContingencyListType; import org.gridsuite.explore.server.utils.ParametersType; -import org.gridsuite.explore.server.utils.RequestWithBody; -import org.gridsuite.explore.server.utils.TestUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache; +import org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.ResourceUtils; import java.io.FileInputStream; -import java.io.IOException; import java.io.InputStream; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; +import java.util.*; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; +import static org.gridsuite.explore.server.services.MockRemoteServices.*; import static org.springframework.http.MediaType.APPLICATION_JSON; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; @@ -55,253 +42,129 @@ /** * @author Etienne Homer */ -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -@ContextConfiguration(classes = {ExploreApplication.class}) +//@TestExecutionListeners //(listeners = MockRestServiceServerResetTestExecutionListener.class) +@AutoConfigureMockMvc //we want to test the controller +@AutoConfigureWebClient @AutoConfigureCache //we mock http clients +//@DataJpaTest @AutoConfigureTestDatabase(replace = Replace.NONE) //reset datas between tests +@SpringBootTest(classes = {ExploreApplication.class, TestConfig.class}) +@ExtendWith(ExploreTestExtension.class) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) @DisplayName("Explore Server tests") -class ExploreTest { - private static final String TEST_FILE = "testCase.xiidm"; - private static final String TEST_FILE_WITH_ERRORS = "testCase_with_errors.xiidm"; - private static final String TEST_INCORRECT_FILE = "application-default.yml"; - private static final UUID CASE_UUID = UUID.randomUUID(); - private static final UUID NON_EXISTING_CASE_UUID = UUID.randomUUID(); - private static final UUID PARENT_DIRECTORY_UUID = UUID.randomUUID(); - private static final UUID PARENT_DIRECTORY_WITH_ERROR_UUID = UUID.randomUUID(); - private static final UUID PRIVATE_STUDY_UUID = UUID.randomUUID(); - private static final UUID PUBLIC_STUDY_UUID = UUID.randomUUID(); - private static final UUID FILTER_UUID = UUID.randomUUID(); - private static final UUID FILTER_UUID_2 = UUID.randomUUID(); - private static final UUID CONTINGENCY_LIST_UUID = UUID.randomUUID(); - private static final UUID INVALID_ELEMENT_UUID = UUID.randomUUID(); - private static final UUID PARAMETERS_UUID = UUID.randomUUID(); - private static final UUID SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID = UUID.randomUUID(); - private static final String STUDY_ERROR_NAME = "studyInError"; - private static final String STUDY1 = "study1"; - private static final String CASE1 = "case1"; - private static final String FILTER1 = "filter1"; - private static final String USER1 = "user1"; - public static final String FILTER_CONTINGENCY_LIST = "filterContingencyList"; - public static final String FILTER_CONTINGENCY_LIST_2 = "filterContingencyList2"; - public static final String FILTER = "FILTER"; - - private static final Map SPECIFIC_METADATA = Map.of("id", FILTER_UUID); - private static final Map SPECIFIC_METADATA_2 = Map.of( - "equipmentType", "LINE", - "id", FILTER_UUID_2 - ); - private static final Map CASE_SPECIFIC_METADATA = Map.of( - "uuid", CASE_UUID, - "name", TEST_FILE, - "format", "XIIDM" - ); +public class ExploreTest { + public static final UUID SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID = UUID.randomUUID(); + public static final String STUDY_ERROR_NAME = "studyInError"; + public static final String CASE1 = "case1"; + public static final String FILTER1 = "filter1"; @Autowired private MockMvc mockMvc; - @Autowired - private DirectoryService directoryService; - @Autowired - private ContingencyListService contingencyListService; - @Autowired - private FilterService filterService; - @Autowired - private StudyService studyService; - @Autowired - private CaseService caseService; - @Autowired - private RemoteServicesProperties remoteServicesProperties; + @Autowired @Qualifier("mockRestSrvCaseService") + private MockRestServiceServer mockRestCaseService; + @Autowired @Qualifier("mockRestSrvContingencyListService") + private MockRestServiceServer mockRestContingencyListService; + @Autowired @Qualifier("mockRestSrvDirectoryService") + private MockRestServiceServer mockRestDirectoryService; + @Autowired @Qualifier("mockRestSrvFilterService") + private MockRestServiceServer mockRestFilterService; + @Autowired @Qualifier("mockRestSrvStudyService") + private MockRestServiceServer mockRestStudyService; + @Autowired @Qualifier("mockRestSrvParametersService") + private Map mockRestParametersServices; @Autowired private ObjectMapper mapper; - private MockWebServer server; + + private MockCaseService caseService; + private MockContingencyListService contingencyListService; + private MockDirectoryService directoryService; + private MockFilterService filterService; + private MockStudyService studyService; + private MockParametersService parametersService; + + @BeforeAll + void init() { + caseService = new MockCaseService(mockRestCaseService, mapper); + contingencyListService = new MockContingencyListService(mockRestContingencyListService, mapper); + directoryService = new MockDirectoryService(mockRestDirectoryService, mapper); + filterService = new MockFilterService(mockRestFilterService, mapper); + studyService = new MockStudyService(mockRestStudyService, mapper); + parametersService = new MockParametersService(mockRestParametersServices, mapper); + } + + private void expectNoMoreRestCall() { + caseService.expectNoMoreCall(); + contingencyListService.expectNoMoreCall(); + directoryService.expectNoMoreCall(); + filterService.expectNoMoreCall(); + studyService.expectNoMoreCall(); + parametersService.expectNoMoreCall(); + } @BeforeEach - void setup() throws IOException { - server = new MockWebServer(); - - // Start the server. - server.start(); - - // Ask the server for its URL. You'll need this to make HTTP requests. - final String baseUrl = StringUtils.removeEnd(server.url("").toString(), "/"); - - directoryService.setDirectoryServerBaseUri(baseUrl); - studyService.setStudyServerBaseUri(baseUrl); - filterService.setFilterServerBaseUri(baseUrl); - contingencyListService.setActionsServerBaseUri(baseUrl); - caseService.setBaseUri(baseUrl); - remoteServicesProperties.getServices().forEach(s -> s.setBaseUri(baseUrl)); - - String privateStudyAttributesAsString = mapper.writeValueAsString(new ElementAttributes(PRIVATE_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(true), USER1, 0, null)); - String listOfPrivateStudyAttributesAsString = mapper.writeValueAsString(List.of(new ElementAttributes(PRIVATE_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(true), USER1, 0, null))); - String publicStudyAttributesAsString = mapper.writeValueAsString(new ElementAttributes(PUBLIC_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(false), USER1, 0, null)); - String invalidElementAsString = mapper.writeValueAsString(new ElementAttributes(INVALID_ELEMENT_UUID, "invalidElementName", "INVALID", new AccessRightsAttributes(false), USER1, 0, null)); - String formContingencyListAttributesAsString = mapper.writeValueAsString(new ElementAttributes(CONTINGENCY_LIST_UUID, FILTER_CONTINGENCY_LIST, "CONTINGENCY_LIST", new AccessRightsAttributes(true), USER1, 0, null)); - String listOfFormContingencyListAttributesAsString = mapper.writeValueAsString(List.of(new ElementAttributes(CONTINGENCY_LIST_UUID, FILTER_CONTINGENCY_LIST, "CONTINGENCY_LIST", new AccessRightsAttributes(true), USER1, 0, null))); - String filterAttributesAsString = mapper.writeValueAsString(new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0, null)); - String filter2AttributesAsString = mapper.writeValueAsString(new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0, null)); - String listOfFilterAttributesAsString = mapper.writeValueAsString(List.of(new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0, null))); - String directoryAttributesAsString = mapper.writeValueAsString(new ElementAttributes(PARENT_DIRECTORY_UUID, "directory", "DIRECTORY", new AccessRightsAttributes(true), USER1, 0, null)); - String caseElementAttributesAsString = mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null)); - String parametersElementAttributesAsString = mapper.writeValueAsString(new ElementAttributes(PARAMETERS_UUID, "voltageInitParametersName", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), new AccessRightsAttributes(true), USER1, 0, null)); - String listElementsAttributesAsString = "[" + filterAttributesAsString + "," + privateStudyAttributesAsString + "," + formContingencyListAttributesAsString + "]"; - String caseInfosAttributesAsString = mapper.writeValueAsString(List.of(CASE_SPECIFIC_METADATA)); - - final Dispatcher dispatcher = new Dispatcher() { - @SneakyThrows - @Override - public MockResponse dispatch(RecordedRequest request) { - final String path = Objects.requireNonNull(request.getPath()); - final String bodyStr = request.getBody().readUtf8(); - - if (path.startsWith("/v1/studies/cases/" + NON_EXISTING_CASE_UUID) && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(404); - } else if (path.startsWith("/v1/studies") && "POST".equals(request.getMethod())) { - if (bodyStr.contains("filename=\"" + TEST_FILE_WITH_ERRORS + "\"")) { // import file with errors - return new MockResponse().setResponseCode(409); - } else { - return new MockResponse().setResponseCode(200); - } - } else if (path.startsWith("/v1/cases") && "POST".equals(request.getMethod())) { - if (bodyStr.contains("filename=\"" + TEST_FILE_WITH_ERRORS + "\"")) { // import file with errors - return new MockResponse().setResponseCode(409).setBody("invalid file"); - } else if (bodyStr.contains("filename=\"" + TEST_INCORRECT_FILE + "\"")) { // import file with errors - return new MockResponse().setResponseCode(422).setBody("file with bad extension"); - } else { - return new MockResponse().setResponseCode(200); - } - } else if (path.equals("/v1/directories/" + PARENT_DIRECTORY_UUID + "/elements") && "POST".equals(request.getMethod())) { - return new MockResponse().setBody(privateStudyAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/directories/" + PARENT_DIRECTORY_WITH_ERROR_UUID + "/elements") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(500); - } else if (path.equals("/v1/elements/" + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(formContingencyListAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + CONTINGENCY_LIST_UUID + "/notification?type=UPDATE_DIRECTORY")) { - return new MockResponse().setBody(formContingencyListAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + FILTER_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(filterAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + FILTER_UUID + "/notification?type=UPDATE_DIRECTORY")) { - return new MockResponse().setBody(filterAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + CASE_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(caseElementAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + PRIVATE_STUDY_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(privateStudyAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + PUBLIC_STUDY_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(publicStudyAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + PARAMETERS_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(parametersElementAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&elementTypes=FILTER") && "GET".equals(request.getMethod())) { - return new MockResponse().setBody("[" + filterAttributesAsString + "," + filter2AttributesAsString + "]") - .setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements?ids=" + CASE_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody("[" + caseElementAttributesAsString + "]") - .setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/filters/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody("[" + mapper.writeValueAsString(SPECIFIC_METADATA) + "," + mapper.writeValueAsString(SPECIFIC_METADATA_2) + "]") - .setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(listElementsAttributesAsString).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.startsWith("/v1/elements/") && "PUT".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/contingency-lists/metadata?ids=" + CONTINGENCY_LIST_UUID) && "GET".equals(request.getMethod())) { - return new MockResponse().setBody(listOfFormContingencyListAttributesAsString.replace("elementUuid", "id")).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/script-contingency-lists?id=" + PARENT_DIRECTORY_WITH_ERROR_UUID) && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(500); - } else if (path.startsWith("/v1/script-contingency-lists") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/form-contingency-lists") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/identifier-contingency-lists") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/form-contingency-lists/.+/new-script/.*") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters/.+/new-script.*") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/filters") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/filters?id=") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/filters/.+/replace-with-script") && "PUT".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/filters/") && "PUT".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/script-contingency-lists/") && "PUT".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/form-contingency-lists/") && "PUT".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/identifier-contingency-lists/") && "PUT".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200); - } else if (path.startsWith("/v1/parameters")) { - return new MockResponse().setResponseCode(200); - } else if ("GET".equals(request.getMethod())) { - if (path.equals("/v1/elements/" + INVALID_ELEMENT_UUID)) { - return new MockResponse().setBody(invalidElementAsString).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/directories/" + PARENT_DIRECTORY_UUID + "/elements")) { - return new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/elements/" + PARENT_DIRECTORY_UUID)) { - return new MockResponse().setBody(directoryAttributesAsString).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/filters/metadata?ids=" + FILTER_UUID)) { - return new MockResponse().setBody(listOfFilterAttributesAsString.replace("elementUuid", "id")).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/cases/metadata?ids=" + CASE_UUID)) { - return new MockResponse().setBody(caseInfosAttributesAsString).setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.equals("/v1/studies/metadata?ids=" + PRIVATE_STUDY_UUID)) { - return new MockResponse().setBody(listOfPrivateStudyAttributesAsString.replace("elementUuid", "id")).setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } - } else if ("DELETE".equals(request.getMethod())) { - if (path.equals("/v1/filters/" + FILTER_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/studies/" + PRIVATE_STUDY_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/contingency-lists/" + CONTINGENCY_LIST_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/elements/" + INVALID_ELEMENT_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/elements/" + PRIVATE_STUDY_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/elements/" + FILTER_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/elements/" + CONTINGENCY_LIST_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/elements/" + PARENT_DIRECTORY_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/elements/" + PARAMETERS_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.matches("/v1/(cases|elements)/" + CASE_UUID)) { - return new MockResponse().setResponseCode(200); - } else if (path.equals("/v1/parameters/" + PARAMETERS_UUID)) { - return new MockResponse().setResponseCode(200); - } else { - return new MockResponse().setResponseCode(404); - } - } - return new MockResponse().setResponseCode(418); - } - }; - server.setDispatcher(dispatcher); + void setup() { + mockRestCaseService.reset(); + mockRestContingencyListService.reset(); + mockRestDirectoryService.reset(); + mockRestFilterService.reset(); + mockRestStudyService.reset(); + mockRestParametersServices.values().forEach(MockRestServiceServer::reset); } @AfterEach - void teardown() throws IOException { - server.shutdown(); + void teardownMockRestCaseService() { + mockRestCaseService.verify(); + } + + @AfterEach + void teardownMockRestContingencyListService() { + mockRestContingencyListService.verify(); + } + + @AfterEach + void teardownMockRestDirectoryService() { + mockRestDirectoryService.verify(); + } + + @AfterEach + void teardownMockRestFilterService() { + mockRestFilterService.verify(); + } + + @AfterEach + void teardownMockRestStudyService() { + mockRestStudyService.verify(); + } + + @AfterEach + void teardownMockRestParametersService() { + final List errors = mockRestParametersServices.values().stream().filter(Objects::nonNull) + .map(mockServer -> { + try { + mockServer.verify(); + return null; + } catch (final AssertionError ex) { + return ex; + } + }) + .filter(Objects::nonNull).toList(); + //TODO replace with SoftAssertions when AssertJ updated + if(errors.size() == 1) { + throw errors.get(0); + } else if (errors.size() > 1) { + final AssertionError error = new AssertionError("Some unexpected HTTP call happened"); + //error.setStackTrace(new StackTraceElement[]{Thread.currentThread().getStackTrace()[0]}); + errors.forEach(error::addSuppressed); + throw error; + } } @Test void testCreateStudyFromExistingCase() throws Exception { + //TODO POST /studies/cases/${CASE_UUID}?studyUuid=7b504820-25b6-4ec1-a074-75899b7f058b&duplicateCase=false + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + studyService.expectPostStudies(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) .param("duplicateCase", "false") .header("userId", "userId") @@ -311,6 +174,10 @@ void testCreateStudyFromExistingCase() throws Exception { @Test void testCreateStudyFromExistingCaseError() throws Exception { + //TODO POST /studies/cases/${NON_EXISTING_CASE_UUID}?studyUuid=ee9753e3-24f3-4ba9-9ea3-58fcf14e224a&duplicateCase=false + studyService.expectPostStudiesCasesNonExistingCaseUuid(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + NON_EXISTING_CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON)) @@ -319,6 +186,12 @@ void testCreateStudyFromExistingCaseError() throws Exception { @Test void testCreateCase() throws Exception { + //TODO POST /cases + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + caseService.expectPostCasesNoIncorrectOrErrorFile(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE))) { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE, "text/xml", is); @@ -333,6 +206,10 @@ void testCreateCase() throws Exception { @Test void testCaseCreationError() throws Exception { + //TODO POST /cases + caseService.expectPostCasesTestFileWithErrors(); + expectNoMoreRestCall(); + try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE_WITH_ERRORS))) { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE_WITH_ERRORS, "text/xml", is); @@ -347,6 +224,12 @@ void testCaseCreationError() throws Exception { @Test void testCreateScriptContingencyList() throws Exception { + //TODO POST /script-contingency-lists?id=5d9c5d73-c033-4739-a3df-150d89da773b + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostScriptContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -357,6 +240,12 @@ void testCreateScriptContingencyList() throws Exception { @Test void testCreateScriptContingencyListError() throws Exception { + //TODO POST /script-contingency-lists?id=b6b6ffd8-907c-48b8-81e6-f14879745baa + //TODO POST /directories/${PARENT_DIRECTORY_WITH_ERROR_UUID}/elements + contingencyListService.expectPostScriptContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryWithErrorUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) .header("userId", USER1) @@ -367,6 +256,12 @@ void testCreateScriptContingencyListError() throws Exception { @Test void testCreateFormContingencyList() throws Exception { + //TODO POST /form-contingency-lists?id=c3197b47-d3a9-4180-b8e7-0dd027adcf1b + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostFormContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/form-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -377,6 +272,12 @@ void testCreateFormContingencyList() throws Exception { @Test void testCreateIdentifierContingencyList() throws Exception { + //TODO POST /identifier-contingency-lists?id=9e5fe771-1587-4d80-a6cb-e541da4febc5 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostIdentifierContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/identifier-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -387,6 +288,14 @@ void testCreateIdentifierContingencyList() throws Exception { @Test void testNewScriptFromFormContingencyList() throws Exception { + //TODO GET /elements/${CONTINGENCY_LIST_UUID} + //TODO POST /form-contingency-lists/${CONTINGENCY_LIST_UUID}/new-script?newId=0e61aaf8-8984-430b-9e19-2a004897a2eb + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + directoryService.expectGetElementsContingencyListUuid(); + contingencyListService.expectPostFormContingencyListsNewScript(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, "scriptName", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -395,6 +304,14 @@ void testNewScriptFromFormContingencyList() throws Exception { @Test void testReplaceFormContingencyListWithScript() throws Exception { + //TODO GET /elements/${CONTINGENCY_LIST_UUID} + //TODO POST /form-contingency-lists/${CONTINGENCY_LIST_UUID}/replace-with-script + //TODO POST /elements/${CONTINGENCY_LIST_UUID}/notification?type=UPDATE_DIRECTORY + directoryService.expectGetElementsContingencyListUuid(); + contingencyListService.expectPostFormContingencyLists(); + directoryService.expectHttpElementsContingencyListUuidNotificationTypeUpdateDirectory(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/replace-with-script", CONTINGENCY_LIST_UUID) .header("userId", USER1)) .andExpect(status().isOk()); @@ -402,6 +319,12 @@ void testReplaceFormContingencyListWithScript() throws Exception { @Test void testCreateFilter() throws Exception { + //TODO POST /filters?id=b4a0ce8a-a1be-4e96-9e00-0a269811f9d0 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + filterService.expectPostFiltersIdAny(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}", "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) .header("userId", USER1) @@ -412,6 +335,12 @@ void testCreateFilter() throws Exception { @Test void testCreateParameters() throws Exception { + //TODO POST http://voltage_init_parameters/v1/parameters + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + parametersService.expectHttpVoltageInitAny(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/parameters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -422,6 +351,10 @@ void testCreateParameters() throws Exception { @Test void testUpdateParameters() throws Exception { + //TODO PUT http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} + parametersService.expectHttpVoltageInitAny(); + expectNoMoreRestCall(); + mockMvc.perform(put("/v1/explore/parameters/{id}?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", PARAMETERS_UUID, "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) .header("userId", USER1) @@ -432,6 +365,14 @@ void testUpdateParameters() throws Exception { @Test void testNewScriptFromFilter() throws Exception { + //TODO GET /elements/${FILTER_UUID} + //TODO POST /filters/${FILTER_UUID}/new-script?newId=ef4be392-6346-4cce-997f-7520224e050a + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + directoryService.expectGetElementsFilterUuid(); + filterService.expectPostFiltersNewScript(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/filters/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", FILTER_UUID, "scriptName", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -440,6 +381,14 @@ void testNewScriptFromFilter() throws Exception { @Test void testReplaceFilterWithScript() throws Exception { + //TODO GET /elements/${FILTER_UUID} + //TODO PUT /filters/${FILTER_UUID}/replace-with-script + //TODO POST /elements/${FILTER_UUID}/notification?type=UPDATE_DIRECTORY + directoryService.expectGetElementsFilterUuid(); + filterService.expectPutFiltersReplaceWithScript(); + directoryService.expectHttpElementsFilterUuidNotificationTypeUpdateDirectory(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/filters/{id}/replace-with-script", FILTER_UUID).header("userId", USER1)) .andExpect(status().isOk()); } @@ -456,6 +405,50 @@ private void deleteElementInvalidType(UUID elementUUid) throws Exception { @Test void testDeleteElement() throws Exception { + //TODO GET /elements/${FILTER_UUID} + //TODO DELETE /filters/${FILTER_UUID} + //TODO DELETE /elements/${FILTER_UUID} + //TODO GET /elements/${PRIVATE_STUDY_UUID} + //TODO DELETE /studies/${PRIVATE_STUDY_UUID} + //TODO DELETE /elements/${PRIVATE_STUDY_UUID} + //TODO GET /elements/${CONTINGENCY_LIST_UUID} + //TODO DELETE /contingency-lists/${CONTINGENCY_LIST_UUID} + //TODO DELETE /elements/${CONTINGENCY_LIST_UUID} + //TODO GET /elements/${INVALID_ELEMENT_UUID} + //TODO DELETE /elements/${INVALID_ELEMENT_UUID} + //TODO GET /elements/${PARENT_DIRECTORY_UUID} + //TODO GET /directories/${PARENT_DIRECTORY_UUID}/elements + //TODO DELETE /elements/${PARENT_DIRECTORY_UUID} + //TODO GET /elements/${CASE_UUID} + //TODO DELETE /cases/${CASE_UUID} + //TODO DELETE /elements/${CASE_UUID} + //TODO GET /elements/${PARAMETERS_UUID} + //TODO GET /elements/${PARAMETERS_UUID} + //TODO DELETE http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} + //TODO DELETE /elements/${PARAMETERS_UUID} + directoryService.expectGetElementsFilterUuid(); + filterService.expectDeleteFiltersFilterUuid(); + directoryService.expectDeleteElementsFilterUuid(); + directoryService.expectGetElementsPrivateStudyUuid(); + studyService.expectDeleteStudiesPrivateStudyUuid(); + directoryService.expectDeleteElementsPrivateStudyUuid(); + directoryService.expectGetElementsContingencyListUuid(); + contingencyListService.expectDeleteContingencyListsContingencyListUuid(); + directoryService.expectDeleteElementsContingencyListUuid(); + directoryService.expectGetElementsInvalidElementUuid(); + directoryService.expectDeleteElementsInvalidElementUuid(); + directoryService.expectGetElementsParentDirectoryUuid(); + directoryService.expectGetDirectoriesParentDirectoryUuidElements(); + directoryService.expectDeleteElementsParentDirectoryUuid(); + directoryService.expectGetElementsCaseUuid(); + caseService.expectDeleteCasesCaseUuid(); + directoryService.expectDeleteElementsCaseUuid(); + directoryService.expectGetElementsParametersUuid(); + directoryService.expectGetElementsParametersUuid(); // why? + parametersService.expectDeleteVoltageInitParametersParametersUuid(); + directoryService.expectDeleteElementsParametersUuid(); + expectNoMoreRestCall(); + deleteElement(FILTER_UUID); deleteElement(PRIVATE_STUDY_UUID); deleteElement(CONTINGENCY_LIST_UUID); @@ -466,13 +459,32 @@ void testDeleteElement() throws Exception { } @Test - void testGetElementsMetadata() throws Exception { + void testGetElementsMetadataWithoutFilter() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${PRIVATE_STUDY_UUID},${CONTINGENCY_LIST_UUID} + //TODO GET /studies/metadata?ids=${PRIVATE_STUDY_UUID} + //TODO GET /filters/metadata?ids=${FILTER_UUID} + //TODO GET /contingency-lists/metadata?ids=${CONTINGENCY_LIST_UUID} + directoryService.expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid(); + studyService.expectGetStudiesMetadataIdsPrivateStudyUuid(); + filterService.expectGetFiltersMetadataIdsFilterUuid(); + contingencyListService.expectGetContingencyListsMetadataIdsContingencyListUuid(); + expectNoMoreRestCall(); + mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) .header("userId", USER1)) .andExpectAll(status().isOk()); + } - ElementAttributes filter1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA); - ElementAttributes filter2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA_2); + private static final ElementAttributes filter1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA); + private static final ElementAttributes filter2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA_2); + + @Test + void testGetElementsMetadataWithFilterNoEquipment() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=&elementTypes=FILTER") .header("userId", USER1)) @@ -480,6 +492,15 @@ void testGetElementsMetadata() throws Exception { status().isOk(), content().string(mapper.writeValueAsString(List.of(filter1, filter2))) ); + } + + @Test + void testGetElementsMetadataWithFilterGeneratorEquipment() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=GENERATOR&elementTypes=FILTER") .header("userId", USER1)) @@ -487,6 +508,15 @@ void testGetElementsMetadata() throws Exception { status().isOk(), content().string("[]") ); + } + + @Test + void testGetElementsMetadataWithFilterLineEquipment() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=LINE&elementTypes=FILTER") .header("userId", USER1)) @@ -498,6 +528,12 @@ void testGetElementsMetadata() throws Exception { @Test void testDuplicateCase() throws Exception { + //TODO POST /cases?duplicateFrom=${CASE_UUID} + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + caseService.expectPostCasesNoIncorrectOrErrorFile(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -506,6 +542,12 @@ void testDuplicateCase() throws Exception { @Test void testDuplicateFilter() throws Exception { + //TODO POST /filters?duplicateFrom=${FILTER_UUID}&id=c49165e4-c6fa-4fd9-92ca-ff02c60e0927 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + filterService.expectPostFilters(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/filters?duplicateFrom={parentFilterId}&name={filterName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", FILTER_UUID, FILTER1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -514,6 +556,12 @@ void testDuplicateFilter() throws Exception { @Test void testDuplicateScriptContingencyList() throws Exception { + //TODO POST /script-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=36a4a418-0e90-4493-80d1-128368a961e0 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostScriptContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/script-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -522,6 +570,12 @@ void testDuplicateScriptContingencyList() throws Exception { @Test void testDuplicateFormContingencyList() throws Exception { + //TODO POST /form-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=b85d5ca6-08b7-480c-92df-d80678bccabf + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostFormContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/form-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -530,6 +584,12 @@ void testDuplicateFormContingencyList() throws Exception { @Test void testDuplicateIdentifierContingencyList() throws Exception { + //TODO POST /identifier-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=6b8c828a-cd29-4685-b6c3-06e871c86e5d + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostIdentifierContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/identifier-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -538,6 +598,12 @@ void testDuplicateIdentifierContingencyList() throws Exception { @Test void testDuplicateStudy() throws Exception { + //TODO POST /studies?duplicateFrom=${PUBLIC_STUDY_UUID}&studyUuid=5ecab065-afd8-4dcf-908c-d20d206c3e32 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + studyService.expectPostStudies(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + mockMvc.perform(post("/v1/explore/studies?duplicateFrom={parentStudyUuid}&studyName={studyName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", PUBLIC_STUDY_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) .header("userId", USER1)) @@ -546,6 +612,10 @@ void testDuplicateStudy() throws Exception { @Test void testCaseCreationErrorWithBadExtension() throws Exception { + //TODO POST /cases + caseService.expectPostCasesTestIncorrectFile(); + expectNoMoreRestCall(); + try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_INCORRECT_FILE))) { MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_INCORRECT_FILE, "text/xml", is); @@ -560,6 +630,12 @@ void testCaseCreationErrorWithBadExtension() throws Exception { @Test void testChangeFilter() throws Exception { + //TODO PUT /filters/${FILTER_UUID} + //TODO PUT /elements/${FILTER_UUID} + filterService.expectPutFilters(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + final String filter = "{\"type\":\"CRITERIA\",\"equipmentFilterForm\":{\"equipmentType\":\"BATTERY\",\"name\":\"test bbs\",\"countries\":[\"BS\"],\"nominalVoltage\":{\"type\":\"LESS_THAN\",\"value1\":545430,\"value2\":null},\"freeProperties\":{\"region\":[\"north\"],\"totallyFree\":[\"6555\"],\"tso\":[\"ceps\"]}}}"; final String name = "filter name"; mockMvc.perform(put("/v1/explore/filters/{id}", FILTER_UUID) @@ -574,6 +650,12 @@ void testChangeFilter() throws Exception { @Test void testModifyScriptContingencyList() throws Exception { + //TODO PUT /script-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + contingencyListService.expectPutScriptContingencyLists(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + final String scriptContingency = "{\"script\":\"alert(\\\"script contingency\\\")\"}"; final String name = "script name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) @@ -589,6 +671,12 @@ void testModifyScriptContingencyList() throws Exception { @Test void testModifyFormContingencyList() throws Exception { + //TODO PUT /form-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + contingencyListService.expectPutFormContingencyLists(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + final String formContingency = "{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}"; final String name = "form contingency name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) @@ -604,6 +692,12 @@ void testModifyFormContingencyList() throws Exception { @Test void testModifyIdentifierContingencyList() throws Exception { + //TODO PUT /identifier-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + contingencyListService.expectPutIdentifierContingencyLists(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + final String identifierContingencyList = "{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}"; final String name = "identifier contingencyList name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) @@ -618,17 +712,33 @@ void testModifyIdentifierContingencyList() throws Exception { } private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) throws UncheckedInterruptedException, AssertionError { - var requests = TestUtils.getRequestsWithBodyDone(2, server); + /*TODO var requests = IntStream.range(0, 2).mapToObj(i -> { + try { + var request = server.takeRequest(100L, TimeUnit.MILLISECONDS); + if (request == null) { + throw new AssertionError("Expected 2 requests, got only " + i); + } + return new RequestWithBody(request.getPath(), request.getBody().readUtf8()); + } catch (InterruptedException e) { + throw new UncheckedInterruptedException(e); + } + }).collect(Collectors.toSet()); assertThat(requests).as("elementAttributes updated") .extracting(RequestWithBody::getPath) .anyMatch(path -> path.startsWith(contingencyOrFilterPath)); assertThat(requests).as("name updated") .extracting(RequestWithBody::getPath) - .anyMatch(path -> path.startsWith("/v1/elements/")); + .anyMatch(path -> path.startsWith("/v1/elements/"));*/ } @Test void testGetMetadata() throws Exception { + //TODO GET /elements?ids=${CASE_UUID} + //TODO GET /cases/metadata?ids=${CASE_UUID} + directoryService.expectGetElementsIdsCaseUuid(); + caseService.expectGetCasesMetadataIdsCaseUuid(); + expectNoMoreRestCall(); + MvcResult result = mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + CASE_UUID) .header("userId", USER1)) .andExpect(status().isOk()) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTestExtension.java b/src/test/java/org/gridsuite/explore/server/ExploreTestExtension.java new file mode 100644 index 00000000..01cc1983 --- /dev/null +++ b/src/test/java/org/gridsuite/explore/server/ExploreTestExtension.java @@ -0,0 +1,78 @@ +package org.gridsuite.explore.server; + +import lombok.NonNull; +import org.apache.commons.lang3.ArrayUtils; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.AfterTestExecutionCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Field; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.regex.Pattern; + +import static org.gridsuite.explore.server.ExploreTest.*; +import static org.gridsuite.explore.server.services.MockRemoteServices.*; + +/** + * Extension to intercept exceptions to modify the message. + */ +@SuppressWarnings("RedundantThrows") +public class ExploreTestExtension implements AfterTestExecutionCallback, AfterEachCallback { + @Override + public void afterTestExecution(ExtensionContext context) throws Exception { + context.getExecutionException().ifPresent(this::modifyMessage); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + context.getExecutionException().ifPresent(this::modifyMessage); + } + + @SuppressWarnings("removal") + private void modifyMessage(@NonNull final Throwable ex) { + try { + final Field detailMessage = ReflectionUtils.findField(ex.getClass(), "detailMessage", String.class); + if (System.getSecurityManager() == null) { + ReflectionUtils.makeAccessible(detailMessage); + } else { + AccessController.doPrivileged((PrivilegedAction) () -> { + ReflectionUtils.makeAccessible(detailMessage); + return null; + }); + } + ReflectionUtils.setField(detailMessage, ex, ex.getMessage() + .replaceAll(Pattern.quote(TEST_FILE), "\\${TEST_FILE}") + .replaceAll(Pattern.quote(TEST_FILE_WITH_ERRORS), "\\${TEST_FILE_WITH_ERRORS}") + .replaceAll(Pattern.quote(TEST_INCORRECT_FILE), "\\${TEST_INCORRECT_FILE}") + .replaceAll(Pattern.quote(CASE_UUID.toString()), "\\${CASE_UUID}") + .replaceAll(Pattern.quote(NON_EXISTING_CASE_UUID.toString()), "\\${NON_EXISTING_CASE_UUID}") + .replaceAll(Pattern.quote(PARENT_DIRECTORY_UUID.toString()), "\\${PARENT_DIRECTORY_UUID}") + .replaceAll(Pattern.quote(PARENT_DIRECTORY_WITH_ERROR_UUID.toString()), "\\${PARENT_DIRECTORY_WITH_ERROR_UUID}") + .replaceAll(Pattern.quote(PRIVATE_STUDY_UUID.toString()), "\\${PRIVATE_STUDY_UUID}") + .replaceAll(Pattern.quote(PUBLIC_STUDY_UUID.toString()), "\\${PUBLIC_STUDY_UUID}") + .replaceAll(Pattern.quote(FILTER_UUID.toString()), "\\${FILTER_UUID}") + .replaceAll(Pattern.quote(FILTER_UUID_2.toString()), "\\${FILTER_UUID_2}") + .replaceAll(Pattern.quote(SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID.toString()), "\\${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID}") + .replaceAll(Pattern.quote(CONTINGENCY_LIST_UUID.toString()), "\\${CONTINGENCY_LIST_UUID}") + .replaceAll(Pattern.quote(INVALID_ELEMENT_UUID.toString()), "\\${INVALID_ELEMENT_UUID}") + .replaceAll(Pattern.quote(PARAMETERS_UUID.toString()), "\\${PARAMETERS_UUID}") + .replaceAll(Pattern.quote(STUDY_ERROR_NAME), "\\${STUDY_ERROR_NAME}") + .replaceAll(Pattern.quote(STUDY1), "\\${STUDY1}") + .replaceAll(Pattern.quote(CASE1), "\\${CASE1}") + .replaceAll(Pattern.quote(USER1), "\\${USER1}") + //.replaceAll(Pattern.quote(FILTER), "\\${FILTER}") + .replaceAll(Pattern.quote(FILTER1), "\\${FILTER1}") + .replaceAll(Pattern.quote(FILTER_CONTINGENCY_LIST), "\\${FILTER_CONTINGENCY_LIST}") + .replaceAll(Pattern.quote(FILTER_CONTINGENCY_LIST_2), "\\${FILTER_CONTINGENCY_LIST_2}")); + } catch (Throwable err) { + err.printStackTrace(); + } + if (ArrayUtils.isNotEmpty(ex.getSuppressed())) { + for (final Throwable suppressed : ex.getSuppressed()) { + modifyMessage(suppressed); + } + } + } +} diff --git a/src/test/java/org/gridsuite/explore/server/TestConfig.java b/src/test/java/org/gridsuite/explore/server/TestConfig.java new file mode 100644 index 00000000..1675d0a6 --- /dev/null +++ b/src/test/java/org/gridsuite/explore/server/TestConfig.java @@ -0,0 +1,77 @@ +package org.gridsuite.explore.server; + +import org.gridsuite.explore.server.services.*; +import org.gridsuite.explore.server.utils.ParametersType; +import org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerAutoConfiguration; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.web.client.MockServerRestTemplateCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.web.client.RestTemplate; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * because @AutoConfigureMockRestServiceServer support only 1 restTemplate instance, we need to do it ourselves + * @see MockRestServiceServerAutoConfiguration + */ +@TestConfiguration +public class TestConfig { + @DynamicPropertySource + static void setDynamicProperties(final DynamicPropertyRegistry registry) { + registry.add("spring.cache.type", () -> "none"); + } + + @Bean + public MockServerRestTemplateCustomizer mockServerRestTemplateCustomizer() { + return new MockServerRestTemplateCustomizer(); + } + + @SuppressWarnings("OptionalGetWithoutIsPresent") + private static RestTemplate getRestTemplate(final Class clazz, final T service) throws IllegalAccessException { + Field rtField = Arrays.stream(clazz.getDeclaredFields()).filter(f -> RestTemplate.class.equals(f.getType())).findAny().get(); + rtField.setAccessible(true); + return (RestTemplate) rtField.get(service); + } + + @Bean + public MockRestServiceServer mockRestSrvCaseService(MockServerRestTemplateCustomizer customizer, CaseService caseService) throws IllegalAccessException { + return customizer.getServer(getRestTemplate(CaseService.class, caseService)); + } + + @Bean + public MockRestServiceServer mockRestSrvContingencyListService(MockServerRestTemplateCustomizer customizer, ContingencyListService contingencyListService) throws IllegalAccessException { + return customizer.getServer(getRestTemplate(ContingencyListService.class, contingencyListService)); + } + + @Bean + public MockRestServiceServer mockRestSrvDirectoryService(MockServerRestTemplateCustomizer customizer, DirectoryService directoryService) throws IllegalAccessException { + return customizer.getServer(getRestTemplate(DirectoryService.class, directoryService)); + } + + @Bean + public MockRestServiceServer mockRestSrvFilterService(MockServerRestTemplateCustomizer customizer, FilterService filterService) throws IllegalAccessException { + return customizer.getServer(getRestTemplate(FilterService.class, filterService)); + } + + @Bean + public MockRestServiceServer mockRestSrvStudyService(MockServerRestTemplateCustomizer customizer, StudyService studyService) throws IllegalAccessException { + return customizer.getServer(getRestTemplate(StudyService.class, studyService)); + } + + @SuppressWarnings({"unchecked", "OptionalGetWithoutIsPresent"}) + @Bean + public Map mockRestSrvParametersService(MockServerRestTemplateCustomizer customizer, ParametersService parametersService) throws IllegalAccessException { + Field rtField = Arrays.stream(ParametersService.class.getDeclaredFields()).filter(f -> Map.class.equals(f.getType())).findAny().get(); + rtField.setAccessible(true); + return ((Map) rtField.get(parametersService)).entrySet().stream().collect(Collectors.toMap( + Map.Entry::getKey, + e -> customizer.getServer(e.getValue()) + )); + } +} diff --git a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java new file mode 100644 index 00000000..75f183da --- /dev/null +++ b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java @@ -0,0 +1,1045 @@ +package org.gridsuite.explore.server.services; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.SneakyThrows; +import org.gridsuite.explore.server.dto.AccessRightsAttributes; +import org.gridsuite.explore.server.dto.ElementAttributes; +import org.gridsuite.explore.server.utils.ParametersType; +import org.hamcrest.Matchers; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.test.web.client.ExpectedCount; +import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.test.web.client.match.MockRestRequestMatchers; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.*; +import static org.springframework.test.web.client.response.MockRestResponseCreators.*; + +/** + * Host mocking classes of services/clients of this application to other services in GridSuite.
+ * It is based on the Spring mock of {@link org.springframework.web.client.RestTemplate RestTemplate}. + * @see org.gridsuite.explore.server.services + * @see org.gridsuite.explore.server.TestConfig TestConfig + * @see MockRestServiceServer + * @see org.springframework.boot.web.client.RestTemplateBuilder RestTemplateBuilder + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@SuppressWarnings({"HideUtilityClassConstructor"}) +public final class MockRemoteServices { + /* + * some notes: + * - @RestClientTest can't work because each @Service use one @RestTemplateBuilder (good for testing single component) + * - @AutoConfigureMockRestServiceServer dont work for same reason (support only one RestTemplateBuilder) + * - Multiple MockServer because need to check calls per server (don't distinct hostname) + */ + + public static final String TEST_FILE = "testCase.xiidm"; + public static final String TEST_FILE_WITH_ERRORS = "testCase_with_errors.xiidm"; + public static final String TEST_INCORRECT_FILE = "application-default.yml"; + + public static final UUID CASE_UUID = UUID.randomUUID(); + public static final UUID NON_EXISTING_CASE_UUID = UUID.randomUUID(); + public static final UUID PARENT_DIRECTORY_UUID = UUID.randomUUID(); + public static final UUID PARENT_DIRECTORY_WITH_ERROR_UUID = UUID.randomUUID(); + public static final UUID PRIVATE_STUDY_UUID = UUID.randomUUID(); + public static final UUID PUBLIC_STUDY_UUID = UUID.randomUUID(); + public static final UUID FILTER_UUID = UUID.randomUUID(); + public static final UUID FILTER_UUID_2 = UUID.randomUUID(); + public static final UUID CONTINGENCY_LIST_UUID = UUID.randomUUID(); + public static final UUID INVALID_ELEMENT_UUID = UUID.randomUUID(); + public static final UUID PARAMETERS_UUID = UUID.randomUUID(); + public static final String STUDY1 = "study1"; + public static final String USER1 = "user1"; + public static final String FILTER_CONTINGENCY_LIST = "filterContingencyList"; + public static final String FILTER_CONTINGENCY_LIST_2 = "filterContingencyList2"; + public static final String FILTER = "FILTER"; + + public static final Map SPECIFIC_METADATA = Map.of("id", FILTER_UUID); + public static final Map SPECIFIC_METADATA_2 = Map.of("equipmentType", "LINE", "id", FILTER_UUID_2); + public static final Map CASE_SPECIFIC_METADATA = Map.of( + "uuid", CASE_UUID, + "name", TEST_FILE, + "format", "XIIDM" + ); + + @SuppressWarnings({"unused"}) + @AllArgsConstructor + private abstract static class AbstractMockRestService { + protected final MockRestServiceServer mockServer; + protected final ObjectMapper mapper; + + @SneakyThrows(JsonProcessingException.class) + protected final String jsonify(Object value) { + return mapper.writeValueAsString(value); + } + + protected void expectNoMoreCall(MockRestServiceServer mockServer) { + mockServer.expect(ExpectedCount.never(), anything()); + } + + public void expectNoMoreCall() { + this.expectNoMoreCall(mockServer); + } + + public void expectDeleteAnything() { + mockServer.expect(/*ExpectedCount.manyTimes(),*/ method(HttpMethod.DELETE)); + } + } + + /** + * Mock an HTTP server for case-server + * @see CaseService + * @see MockRestServiceServer + */ + @SuppressWarnings({"deprecation", "unused"}) + public static class MockCaseService extends AbstractMockRestService { + public MockCaseService(MockRestServiceServer mockServer, ObjectMapper mapper) { + super(mockServer, mapper); + } + + /** + * import file with errors
+ *
+ *
HTTP request
+ *
POST
+ *
uri = {@code /cases*}
+ *
body = {@code contains(filename=$TEST_FILE_WITH_ERRORS)}
+ *
HTTP response
+ *
status = {@code 409 Conflict}
+ *
body = {@code "invalid file"}
+ *
+ */ + public void expectPostCasesTestFileWithErrors() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/cases"))) + .andExpect(MockRestRequestMatchers.content().string(Matchers.containsString("filename=\"" + TEST_FILE_WITH_ERRORS + "\""))) + .andRespond(withStatus(HttpStatus.CONFLICT).body("invalid file")); //TODO no content-type? + } + + /** + * import file with errors + *
+ *
HTTP method
+ *
HTTP request
+ *
POST
+ *
uri = {@code /cases*}
+ *
body = {@code contains(filename=$TEST_INCORRECT_FILE)}
+ *
HTTP response
+ *
status = {@code 409 Conflict}
+ *
body = {@code "file with bad extension"}
+ *
+ */ + public void expectPostCasesTestIncorrectFile() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/cases"))) + .andExpect(MockRestRequestMatchers.content().string(Matchers.containsString("filename=\"" + TEST_INCORRECT_FILE + "\""))) + .andRespond(withStatus(HttpStatus.CONFLICT).body("file with bad extension")); //TODO no content-type? + } + + /** + *
+ *
HTTP request
+ *
POST
+ *
uri = {@code /cases*}
+ *
body = {@code not_contains(filename=$TEST_FILE_WITH_ERRORS) & not_contains(filename=$TEST_INCORRECT_FILE)}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostCasesNoIncorrectOrErrorFile() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/cases"))) + .andExpect(MockRestRequestMatchers.content().string(Matchers.not(Matchers.allOf( + Matchers.containsString("filename=\"" + TEST_FILE_WITH_ERRORS + "\""), + Matchers.containsString("filename=\"" + TEST_INCORRECT_FILE + "\"") + )))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
GET
+ *
uri = {@code /cases/metadata?ids=$CASE_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [$CASE_SPECIFIC_METADATA]}
+ *
+ */ + public void expectGetCasesMetadataIdsCaseUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/cases/metadata?ids=" + CASE_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(List.of(CASE_SPECIFIC_METADATA)))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /cases/$CASE_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteCasesCaseUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/cases/" + CASE_UUID)) + .andRespond(withSuccess()); + } + } + + /** + * Mock an HTTP server for actions-server + * @see ContingencyListService + * @see MockRestServiceServer + */ + @SuppressWarnings({"deprecation", "unused"}) + public static class MockContingencyListService extends AbstractMockRestService { + public MockContingencyListService(MockRestServiceServer mockServer, ObjectMapper mapper) { + super(mockServer, mapper); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /contingency-lists/metadata?ids=$CONTINGENCY_LIST_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [ElementAttributes(...)]}
+ *
+ */ + public void expectGetContingencyListsMetadataIdsContingencyListUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/contingency-lists/metadata?ids=" + CONTINGENCY_LIST_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(List.of(new ElementAttributes(CONTINGENCY_LIST_UUID, FILTER_CONTINGENCY_LIST, "CONTINGENCY_LIST", new AccessRightsAttributes(true), USER1, 0, null))).replace("elementUuid", "id"))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /script-contingency-lists?id=$PARENT_DIRECTORY_WITH_ERROR_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostScriptContingencyListsIdParentDirectoryWithErrorUuid() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo("/script-contingency-lists?id=" + PARENT_DIRECTORY_WITH_ERROR_UUID)) + .andRespond(withServerError()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /script-contingency-lists*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostScriptContingencyLists() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/script-contingency-lists"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /form-contingency-lists*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostFormContingencyLists() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/form-contingency-lists"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /identifier-contingency-lists*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostIdentifierContingencyLists() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/identifier-contingency-lists"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /form-contingency-lists/*\/new-script/*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostFormContingencyListsNewScript() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.matchesPattern("^/form-contingency-lists/.+/new-script[/?].*"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code PUT}
+ *
uri = {@code /script-contingency-lists/*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPutScriptContingencyLists() { + mockServer.expect(method(HttpMethod.PUT)) + .andExpect(requestTo(Matchers.startsWith("/script-contingency-lists/"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code PUT}
+ *
uri = {@code /form-contingency-lists/*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPutFormContingencyLists() { + mockServer.expect(method(HttpMethod.PUT)) + .andExpect(requestTo(Matchers.startsWith("/form-contingency-lists/"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code PUT}
+ *
uri = {@code /identifier-contingency-lists/*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPutIdentifierContingencyLists() { + mockServer.expect(method(HttpMethod.PUT)) + .andExpect(requestTo(Matchers.startsWith("/identifier-contingency-lists/"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /contingency-lists/$CONTINGENCY_LIST_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteContingencyListsContingencyListUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/contingency-lists/" + CONTINGENCY_LIST_UUID)) + .andRespond(withSuccess()); + } + } + + /** + * Mock an HTTP server for directory-server + * @see DirectoryService + * @see MockRestServiceServer + */ + @SuppressWarnings({"deprecation", "unused"}) + public static class MockDirectoryService extends AbstractMockRestService { + public MockDirectoryService(MockRestServiceServer mockServer, ObjectMapper mapper) { + super(mockServer, mapper); + } + + private final String privateStudyAttributesAsString = jsonify(new ElementAttributes(PRIVATE_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(true), USER1, 0, null)); + private final String formContingencyListAttributesAsString = jsonify(new ElementAttributes(CONTINGENCY_LIST_UUID, FILTER_CONTINGENCY_LIST, "CONTINGENCY_LIST", new AccessRightsAttributes(true), USER1, 0, null)); + private final String filterAttributesAsString = jsonify(new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0, null)); + private final String caseElementAttributesAsString = jsonify(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null)); + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /directories/$PARENT_DIRECTORY_UUID/elements}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $privateStudyAttributesAsString}
+ *
+ */ + public void expectPostDirectoriesParentDirectoryUuidElements() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo("/directories/" + PARENT_DIRECTORY_UUID + "/elements")) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(privateStudyAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /directories/$PARENT_DIRECTORY_WITH_ERROR_UUID/elements}
+ *
HTTP response
+ *
status = {@code 500 Internal Server Error}
+ *
+ */ + public void expectPostDirectoriesParentDirectoryWithErrorUuidElements() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo("/directories/" + PARENT_DIRECTORY_WITH_ERROR_UUID + "/elements")) + .andRespond(withServerError()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$CONTINGENCY_LIST_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $formContingencyListAttributesAsString}
+ *
+ */ + public void expectGetElementsContingencyListUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + CONTINGENCY_LIST_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(formContingencyListAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
uri = {@code /elements/$CONTINGENCY_LIST_UUID/notification?type=UPDATE_DIRECTORY}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $formContingencyListAttributesAsString}
+ *
+ */ + public void expectHttpElementsContingencyListUuidNotificationTypeUpdateDirectory() { + //TODO missing method + mockServer.expect(requestTo("/elements/" + CONTINGENCY_LIST_UUID + "/notification?type=UPDATE_DIRECTORY")) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(formContingencyListAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$PARAMETERS_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [ElementAttributes(...)]}
+ *
+ */ + public void expectGetElementsParametersUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + PARAMETERS_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(new ElementAttributes(PARAMETERS_UUID, "voltageInitParametersName", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), new AccessRightsAttributes(true), USER1, 0, null)))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$FILTER_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $filterAttributesAsString}
+ *
+ */ + public void expectGetElementsFilterUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + FILTER_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(filterAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
uri = {@code /elements/$FILTER_UUID/notification?type=UPDATE_DIRECTORY}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $filterAttributesAsString}
+ *
+ */ + public void expectHttpElementsFilterUuidNotificationTypeUpdateDirectory() { + //TODO missing method + mockServer.expect(requestTo("/elements/" + FILTER_UUID + "/notification?type=UPDATE_DIRECTORY")) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(filterAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$CASE_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $caseElementAttributesAsString}
+ *
+ */ + public void expectGetElementsCaseUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + CASE_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(caseElementAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$PRIVATE_STUDY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code $privateStudyAttributesAsString}
+ *
+ */ + public void expectGetElementsPrivateStudyUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + PRIVATE_STUDY_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(privateStudyAttributesAsString)); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$PUBLIC_STUDY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [ElementAttributes(...)]}
+ *
+ */ + public void expectGetElementsPublicStudyUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + PUBLIC_STUDY_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(new ElementAttributes(PUBLIC_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(false), USER1, 0, null)))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements?ids=$FILTER_UUID,$FILTER_UUID_2&elementTypes=FILTER}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [$filterAttributesAsString,ElementAttributes(...)]}
+ *
+ */ + public void expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&elementTypes=FILTER")) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body("[" + filterAttributesAsString + "," + jsonify(new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0, null)) + "]")); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements?ids=$CASE_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [$caseElementAttributesAsString]}
+ *
+ */ + public void expectGetElementsIdsCaseUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements?ids=" + CASE_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body("[" + caseElementAttributesAsString + "]")); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements?ids=$FILTER_UUID,$PRIVATE_STUDY_UUID,$CONTINGENCY_LIST_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [$filterAttributesAsString,$privateStudyAttributesAsString,$formContingencyListAttributesAsString]}
+ *
+ */ + public void expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body("[" + filterAttributesAsString + "," + privateStudyAttributesAsString + "," + formContingencyListAttributesAsString + "]")); + } + + /** + *
+ *
HTTP request
+ *
method = {@code PUT}
+ *
uri = {@code /elements/}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
+ */ + public void expectPutElements() { + mockServer.expect(method(HttpMethod.PUT)) + .andExpect(requestTo(Matchers.startsWith("/elements/"))) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8)); //TODO missing body content + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$INVALID_ELEMENT_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code {...ElementAttributes(...)}}
+ *
+ */ + public void expectGetElementsInvalidElementUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + INVALID_ELEMENT_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(new ElementAttributes(INVALID_ELEMENT_UUID, "invalidElementName", "INVALID", new AccessRightsAttributes(false), USER1, 0, null)))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELGETETE}
+ *
uri = {@code /directories/$PARENT_DIRECTORY_UUID/elements}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
+ */ + public void expectGetDirectoriesParentDirectoryUuidElements() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/directories/" + PARENT_DIRECTORY_UUID + "/elements")) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8)); //TODO missing body content + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /elements/$PARENT_DIRECTORY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code {...ElementAttributes(...)}}
+ *
+ */ + public void expectGetElementsParentDirectoryUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/elements/" + PARENT_DIRECTORY_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(new ElementAttributes(PARENT_DIRECTORY_UUID, "directory", "DIRECTORY", new AccessRightsAttributes(true), USER1, 0, null)))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$INVALID_ELEMENT_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsInvalidElementUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + INVALID_ELEMENT_UUID)) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$PRIVATE_STUDY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsPrivateStudyUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + PRIVATE_STUDY_UUID)) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$FILTER_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsFilterUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + FILTER_UUID)) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$CONTINGENCY_LIST_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsContingencyListUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + CONTINGENCY_LIST_UUID)) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$PARENT_DIRECTORY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsParentDirectoryUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + PARENT_DIRECTORY_UUID)) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$CASE_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsCaseUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + CASE_UUID)) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /elements/$PARAMETERS_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteElementsParametersUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/elements/" + PARAMETERS_UUID)) + .andRespond(withSuccess()); + } + } + + /** + * Mock an HTTP server for filter-server + * @see FilterService + * @see MockRestServiceServer + */ + @SuppressWarnings({"deprecation", "unused"}) + public static class MockFilterService extends AbstractMockRestService { + public MockFilterService(MockRestServiceServer mockServer, ObjectMapper mapper) { + super(mockServer, mapper); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /filters/metadata?ids=$FILTER_UUID,$FILTER_UUID_2}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [$SPECIFIC_METADATA),$SPECIFIC_METADATA_2]}
+ *
+ */ + public void expectGetFiltersMetadataIdsFilterUuidFilterUuid2() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/filters/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body("[" + jsonify(SPECIFIC_METADATA) + "," + jsonify(SPECIFIC_METADATA_2) + "]")); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /filters/*\/new-script*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostFiltersNewScript() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.matchesPattern("^/filters/.+/new-script.*"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /filters*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostFilters() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/filters"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /filters?id=*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostFiltersIdAny() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/filters?id="))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code PUT}
+ *
uri = {@code /filters/*\/replace-with-script}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPutFiltersReplaceWithScript() { + mockServer.expect(method(HttpMethod.PUT)) + .andExpect(requestTo(Matchers.matchesPattern("^/filters/.+/replace-with-script"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code PUT}
+ *
uri = {@code /filters/*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPutFilters() { + mockServer.expect(method(HttpMethod.PUT)) + .andExpect(requestTo(Matchers.startsWith("/filters/"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /filters/metadata?ids=$FILTER_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [ElementAttributes(...)]}
+ *
+ */ + public void expectGetFiltersMetadataIdsFilterUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/filters/metadata?ids=" + FILTER_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(List.of(new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0, null))).replace("elementUuid", "id"))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /filters/$FILTER_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteFiltersFilterUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/filters/" + FILTER_UUID)) + .andRespond(withSuccess()); + } + } + + /** + * Mock an HTTP server for study-server + * @see StudyService + * @see MockRestServiceServer + */ + @SuppressWarnings({"deprecation", "unused"}) + public static class MockStudyService extends AbstractMockRestService { + public MockStudyService(MockRestServiceServer mockServer, ObjectMapper mapper) { + super(mockServer, mapper); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /studies/cases/$NON_EXISTING_CASE_UUID(/*)?}
+ *
HTTP response
+ *
status = {@code 404 Not Found}
+ *
+ */ + public void expectPostStudiesCasesNonExistingCaseUuid() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/studies/cases/" + NON_EXISTING_CASE_UUID))) + .andRespond(withStatus(HttpStatus.NOT_FOUND)); + } + + /** + * import file with errors + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /studies*}
+ *
body = {@code contains(filename=$TEST_FILE_WITH_ERRORS)}
+ *
HTTP response
+ *
status = {@code 409 Conflict}
+ *
+ */ + public void expectPostStudiesTestFileWithErrors() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/studies"))) + .andExpect(MockRestRequestMatchers.content().string(Matchers.containsString("filename=\"" + TEST_FILE_WITH_ERRORS + "\""))) + .andRespond(withStatus(HttpStatus.CONFLICT)); + } + + /** + *
+ *
HTTP request
+ *
method = {@code POST}
+ *
uri = {@code /studies*}
+ *
body = {@code not_contains(filename=$TEST_FILE_WITH_ERRORS)}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectPostStudies() { + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(Matchers.startsWith("/studies"))) + .andExpect(MockRestRequestMatchers.content().string(Matchers.not(Matchers.containsString("filename=\"" + TEST_FILE_WITH_ERRORS + "\"")))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code GET}
+ *
uri = {@code /studies/metadata?ids=$PRIVATE_STUDY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
header: content-type = {@code application/json;charset=UTF-8}
+ *
body = {@code [ElementAttributes(...)]}
+ *
+ */ + public void expectGetStudiesMetadataIdsPrivateStudyUuid() { + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo("/studies/metadata?ids=" + PRIVATE_STUDY_UUID)) + .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(List.of(new ElementAttributes(PRIVATE_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(true), USER1, 0, null))).replace("elementUuid", "id"))); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code /studies/$PRIVATE_STUDY_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteStudiesPrivateStudyUuid() { + mockServer.expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("/studies/" + PRIVATE_STUDY_UUID)) + .andRespond(withSuccess()); + } + } + + @SuppressWarnings("unused") + public static class MockParametersService extends AbstractMockRestService { + private final Map mockServers; + + public MockParametersService(Map mockServers, ObjectMapper mapper) { + super(null, mapper); + this.mockServers = mockServers; + } + + @Override + public void expectNoMoreCall() { + mockServers.values().forEach(this::expectNoMoreCall); + } + + /** + *
+ *
HTTP request
+ *
uri = {@code http://voltage_init_parameters/parameters/*}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectHttpVoltageInitAny() { + //TODO missing method + mockServers.get(ParametersType.VOLTAGE_INIT_PARAMETERS) + .expect(requestTo(Matchers.startsWith("http://voltage_init_parameters/v1/parameters"))) + .andRespond(withSuccess()); + } + + /** + *
+ *
HTTP request
+ *
method = {@code DELETE}
+ *
uri = {@code http://voltage_init_parameters/parameters/$PARAMETERS_UUID}
+ *
HTTP response
+ *
status = {@code 200 OK}
+ *
+ */ + public void expectDeleteVoltageInitParametersParametersUuid() { + mockServers.get(ParametersType.VOLTAGE_INIT_PARAMETERS) + .expect(method(HttpMethod.DELETE)) + .andExpect(requestTo("http://voltage_init_parameters/v1/parameters/" + PARAMETERS_UUID)) + .andRespond(withSuccess()); + } + } +} diff --git a/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java b/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java deleted file mode 100644 index 506275b5..00000000 --- a/src/test/java/org/gridsuite/explore/server/utils/TestUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2022, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * 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.explore.server.utils; - -import com.powsybl.commons.exceptions.UncheckedInterruptedException; -import okhttp3.mockwebserver.MockWebServer; - -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -/** - * @author AJELLAL Ali - */ -public final class TestUtils { - private TestUtils() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - private static final long TIMEOUT = 100; - - public static Set getRequestsWithBodyDone(int n, MockWebServer server) throws UncheckedInterruptedException { - return IntStream.range(0, n).mapToObj(i -> { - try { - var request = server.takeRequest(TIMEOUT, TimeUnit.MILLISECONDS); - if (request == null) { - throw new AssertionError("Expected " + n + " requests, got only " + i); - } - return new RequestWithBody(request.getPath(), request.getBody().readUtf8()); - } catch (InterruptedException e) { - throw new UncheckedInterruptedException(e); - } - }).collect(Collectors.toSet()); - } -} From 3ac5f8c22f4a3c07dfc7b43f18c4db92e55be262 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 13:03:26 +0200 Subject: [PATCH 09/14] Split tests and regroup them --- .../gridsuite/explore/server/ExploreTest.java | 798 ++++++++++-------- 1 file changed, 431 insertions(+), 367 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index bdf8280a..8295bf57 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -147,7 +147,7 @@ void teardownMockRestParametersService() { }) .filter(Objects::nonNull).toList(); //TODO replace with SoftAssertions when AssertJ updated - if(errors.size() == 1) { + if (errors.size() == 1) { throw errors.get(0); } else if (errors.size() > 1) { final AssertionError error = new AssertionError("Some unexpected HTTP call happened"); @@ -157,133 +157,149 @@ void teardownMockRestParametersService() { } } - @Test - void testCreateStudyFromExistingCase() throws Exception { - //TODO POST /studies/cases/${CASE_UUID}?studyUuid=7b504820-25b6-4ec1-a074-75899b7f058b&duplicateCase=false - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - studyService.expectPostStudies(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) - .param("duplicateCase", "false") - .header("userId", "userId") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); - } - - @Test - void testCreateStudyFromExistingCaseError() throws Exception { - //TODO POST /studies/cases/${NON_EXISTING_CASE_UUID}?studyUuid=ee9753e3-24f3-4ba9-9ea3-58fcf14e224a&duplicateCase=false - studyService.expectPostStudiesCasesNonExistingCaseUuid(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + NON_EXISTING_CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isNotFound()); - } - - @Test - void testCreateCase() throws Exception { - //TODO POST /cases - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - caseService.expectPostCasesNoIncorrectOrErrorFile(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + @DisplayName("test creation elements") + @Nested + class ExploreTestCreate { + @DisplayName("test creation studies") + @Nested + class ExploreTestCreateStudy { + @Test + void testCreateStudyFromExistingCase() throws Exception { + //TODO POST /studies/cases/${CASE_UUID}?studyUuid=7b504820-25b6-4ec1-a074-75899b7f058b&duplicateCase=false + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + studyService.expectPostStudies(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) + .param("duplicateCase", "false") + .header("userId", "userId") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } - try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE))) { - MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE, "text/xml", is); + @Test + void testCreateStudyFromExistingCaseError() throws Exception { + //TODO POST /studies/cases/${NON_EXISTING_CASE_UUID}?studyUuid=ee9753e3-24f3-4ba9-9ea3-58fcf14e224a&duplicateCase=false + studyService.expectPostStudiesCasesNonExistingCaseUuid(); + expectNoMoreRestCall(); - mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", - STUDY1, "description", PARENT_DIRECTORY_UUID) - .file(mockFile) - .header("userId", USER1) - .contentType(MediaType.MULTIPART_FORM_DATA)) - .andExpect(status().isOk()); + mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + NON_EXISTING_CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } } - } - @Test - void testCaseCreationError() throws Exception { - //TODO POST /cases - caseService.expectPostCasesTestFileWithErrors(); - expectNoMoreRestCall(); - - try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE_WITH_ERRORS))) { - MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE_WITH_ERRORS, "text/xml", is); + @DisplayName("test creation cases") + @Nested + class ExploreTestCreateCase { + @Test + void testCreateCase() throws Exception { + //TODO POST /cases + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + caseService.expectPostCasesNoIncorrectOrErrorFile(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE))) { + MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE, "text/xml", is); + + mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", + STUDY1, "description", PARENT_DIRECTORY_UUID) + .file(mockFile) + .header("userId", USER1) + .contentType(MediaType.MULTIPART_FORM_DATA)) + .andExpect(status().isOk()); + } + } - mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", - STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID) - .file(mockFile) - .header("userId", USER1) - .contentType(MediaType.MULTIPART_FORM_DATA)) - .andExpect(status().isBadRequest()); + @Test + void testCaseCreationError() throws Exception { + //TODO POST /cases + caseService.expectPostCasesTestFileWithErrors(); + expectNoMoreRestCall(); + + try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE_WITH_ERRORS))) { + MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_FILE_WITH_ERRORS, "text/xml", is); + + mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", + STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID) + .file(mockFile) + .header("userId", USER1) + .contentType(MediaType.MULTIPART_FORM_DATA)) + .andExpect(status().isBadRequest()); + } + } } - } - @Test - void testCreateScriptContingencyList() throws Exception { - //TODO POST /script-contingency-lists?id=5d9c5d73-c033-4739-a3df-150d89da773b - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostScriptContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", - "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}")) - .andExpect(status().isOk()); - } - - @Test - void testCreateScriptContingencyListError() throws Exception { - //TODO POST /script-contingency-lists?id=b6b6ffd8-907c-48b8-81e6-f14879745baa - //TODO POST /directories/${PARENT_DIRECTORY_WITH_ERROR_UUID}/elements - contingencyListService.expectPostScriptContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryWithErrorUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", - "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}")) - .andExpect(status().isInternalServerError()); - } - - @Test - void testCreateFormContingencyList() throws Exception { - //TODO POST /form-contingency-lists?id=c3197b47-d3a9-4180-b8e7-0dd027adcf1b - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostFormContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + @DisplayName("test creation contingency list") + @Nested + class ExploreTestCreateScriptContingencyList { + @Test + void testCreateScriptContingencyList() throws Exception { + //TODO POST /script-contingency-lists?id=5d9c5d73-c033-4739-a3df-150d89da773b + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostScriptContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", + "contingencyListScriptName", PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isOk()); + } - mockMvc.perform(post("/v1/explore/form-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", - FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}")) - .andExpect(status().isOk()); - } + @Test + void testCreateScriptContingencyListError() throws Exception { + //TODO POST /script-contingency-lists?id=b6b6ffd8-907c-48b8-81e6-f14879745baa + //TODO POST /directories/${PARENT_DIRECTORY_WITH_ERROR_UUID}/elements + contingencyListService.expectPostScriptContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryWithErrorUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", + "contingencyListScriptName", PARENT_DIRECTORY_WITH_ERROR_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isInternalServerError()); + } - @Test - void testCreateIdentifierContingencyList() throws Exception { - //TODO POST /identifier-contingency-lists?id=9e5fe771-1587-4d80-a6cb-e541da4febc5 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostIdentifierContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + @Test + void testCreateFormContingencyList() throws Exception { + //TODO POST /form-contingency-lists?id=c3197b47-d3a9-4180-b8e7-0dd027adcf1b + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostFormContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/form-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", + FILTER_CONTINGENCY_LIST, PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isOk()); + } - mockMvc.perform(post("/v1/explore/identifier-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", - "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Contingency list content\"}")) - .andExpect(status().isOk()); + @Test + void testCreateIdentifierContingencyList() throws Exception { + //TODO POST /identifier-contingency-lists?id=9e5fe771-1587-4d80-a6cb-e541da4febc5 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostIdentifierContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/identifier-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", + "identifierContingencyListName", PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Contingency list content\"}")) + .andExpect(status().isOk()); + } + } } @Test @@ -393,221 +409,265 @@ void testReplaceFilterWithScript() throws Exception { .andExpect(status().isOk()); } - private void deleteElement(UUID elementUUid) throws Exception { - mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)) - .andExpect(status().isOk()); - } + @DisplayName("tests delete element") + @Nested + class ExploreTestDeleteElements { + private void deleteElement(UUID elementUUid) throws Exception { + mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)) + .andExpect(status().isOk()); + } - private void deleteElementInvalidType(UUID elementUUid) throws Exception { - mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", elementUUid).header("userId", USER1)) - .andExpect(status().is2xxSuccessful()); - } + @Test + void testDeleteFilterElement() throws Exception { + //TODO GET /elements/${FILTER_UUID} + //TODO DELETE /filters/${FILTER_UUID} + //TODO DELETE /elements/${FILTER_UUID} + directoryService.expectGetElementsFilterUuid(); + filterService.expectDeleteFiltersFilterUuid(); + directoryService.expectDeleteElementsFilterUuid(); + expectNoMoreRestCall(); + + deleteElement(FILTER_UUID); + } - @Test - void testDeleteElement() throws Exception { - //TODO GET /elements/${FILTER_UUID} - //TODO DELETE /filters/${FILTER_UUID} - //TODO DELETE /elements/${FILTER_UUID} - //TODO GET /elements/${PRIVATE_STUDY_UUID} - //TODO DELETE /studies/${PRIVATE_STUDY_UUID} - //TODO DELETE /elements/${PRIVATE_STUDY_UUID} - //TODO GET /elements/${CONTINGENCY_LIST_UUID} - //TODO DELETE /contingency-lists/${CONTINGENCY_LIST_UUID} - //TODO DELETE /elements/${CONTINGENCY_LIST_UUID} - //TODO GET /elements/${INVALID_ELEMENT_UUID} - //TODO DELETE /elements/${INVALID_ELEMENT_UUID} - //TODO GET /elements/${PARENT_DIRECTORY_UUID} - //TODO GET /directories/${PARENT_DIRECTORY_UUID}/elements - //TODO DELETE /elements/${PARENT_DIRECTORY_UUID} - //TODO GET /elements/${CASE_UUID} - //TODO DELETE /cases/${CASE_UUID} - //TODO DELETE /elements/${CASE_UUID} - //TODO GET /elements/${PARAMETERS_UUID} - //TODO GET /elements/${PARAMETERS_UUID} - //TODO DELETE http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} - //TODO DELETE /elements/${PARAMETERS_UUID} - directoryService.expectGetElementsFilterUuid(); - filterService.expectDeleteFiltersFilterUuid(); - directoryService.expectDeleteElementsFilterUuid(); - directoryService.expectGetElementsPrivateStudyUuid(); - studyService.expectDeleteStudiesPrivateStudyUuid(); - directoryService.expectDeleteElementsPrivateStudyUuid(); - directoryService.expectGetElementsContingencyListUuid(); - contingencyListService.expectDeleteContingencyListsContingencyListUuid(); - directoryService.expectDeleteElementsContingencyListUuid(); - directoryService.expectGetElementsInvalidElementUuid(); - directoryService.expectDeleteElementsInvalidElementUuid(); - directoryService.expectGetElementsParentDirectoryUuid(); - directoryService.expectGetDirectoriesParentDirectoryUuidElements(); - directoryService.expectDeleteElementsParentDirectoryUuid(); - directoryService.expectGetElementsCaseUuid(); - caseService.expectDeleteCasesCaseUuid(); - directoryService.expectDeleteElementsCaseUuid(); - directoryService.expectGetElementsParametersUuid(); - directoryService.expectGetElementsParametersUuid(); // why? - parametersService.expectDeleteVoltageInitParametersParametersUuid(); - directoryService.expectDeleteElementsParametersUuid(); - expectNoMoreRestCall(); + @Test + void testDeleteElementPrivateStudy() throws Exception { + //TODO GET /elements/${PRIVATE_STUDY_UUID} + //TODO DELETE /studies/${PRIVATE_STUDY_UUID} + //TODO DELETE /elements/${PRIVATE_STUDY_UUID} + directoryService.expectGetElementsPrivateStudyUuid(); + studyService.expectDeleteStudiesPrivateStudyUuid(); + directoryService.expectDeleteElementsPrivateStudyUuid(); + expectNoMoreRestCall(); + + deleteElement(PRIVATE_STUDY_UUID); + } - deleteElement(FILTER_UUID); - deleteElement(PRIVATE_STUDY_UUID); - deleteElement(CONTINGENCY_LIST_UUID); - deleteElementInvalidType(INVALID_ELEMENT_UUID); - deleteElement(PARENT_DIRECTORY_UUID); - deleteElement(CASE_UUID); - deleteElement(PARAMETERS_UUID); - } + @Test + void testDeleteContingencyElement() throws Exception { + //TODO GET /elements/${CONTINGENCY_LIST_UUID} + //TODO DELETE /contingency-lists/${CONTINGENCY_LIST_UUID} + //TODO DELETE /elements/${CONTINGENCY_LIST_UUID} + directoryService.expectGetElementsContingencyListUuid(); + contingencyListService.expectDeleteContingencyListsContingencyListUuid(); + directoryService.expectDeleteElementsContingencyListUuid(); + expectNoMoreRestCall(); + + deleteElement(CONTINGENCY_LIST_UUID); + } - @Test - void testGetElementsMetadataWithoutFilter() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${PRIVATE_STUDY_UUID},${CONTINGENCY_LIST_UUID} - //TODO GET /studies/metadata?ids=${PRIVATE_STUDY_UUID} - //TODO GET /filters/metadata?ids=${FILTER_UUID} - //TODO GET /contingency-lists/metadata?ids=${CONTINGENCY_LIST_UUID} - directoryService.expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid(); - studyService.expectGetStudiesMetadataIdsPrivateStudyUuid(); - filterService.expectGetFiltersMetadataIdsFilterUuid(); - contingencyListService.expectGetContingencyListsMetadataIdsContingencyListUuid(); - expectNoMoreRestCall(); + @Test + void testDeleteInvalidElement() throws Exception { + //TODO GET /elements/${INVALID_ELEMENT_UUID} + //TODO DELETE /elements/${INVALID_ELEMENT_UUID} + directoryService.expectGetElementsInvalidElementUuid(); + directoryService.expectDeleteElementsInvalidElementUuid(); + expectNoMoreRestCall(); - mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) - .header("userId", USER1)) - .andExpectAll(status().isOk()); - } + mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", INVALID_ELEMENT_UUID).header("userId", USER1)) + .andExpect(status().is2xxSuccessful()); + } - private static final ElementAttributes filter1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA); - private static final ElementAttributes filter2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA_2); + @Test + void testDeleteParentDirectoryElement() throws Exception { + //TODO GET /elements/${PARENT_DIRECTORY_UUID} + //TODO GET /directories/${PARENT_DIRECTORY_UUID}/elements + //TODO DELETE /elements/${PARENT_DIRECTORY_UUID} + directoryService.expectGetElementsParentDirectoryUuid(); + directoryService.expectGetDirectoriesParentDirectoryUuidElements(); + directoryService.expectDeleteElementsParentDirectoryUuid(); + expectNoMoreRestCall(); + + deleteElement(PARENT_DIRECTORY_UUID); + } - @Test - void testGetElementsMetadataWithFilterNoEquipment() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER - //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} - directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); - filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); - expectNoMoreRestCall(); + @Test + void testDeleteCaseElement() throws Exception { + //TODO GET /elements/${CASE_UUID} + //TODO DELETE /cases/${CASE_UUID} + //TODO DELETE /elements/${CASE_UUID} + directoryService.expectGetElementsCaseUuid(); + caseService.expectDeleteCasesCaseUuid(); + directoryService.expectDeleteElementsCaseUuid(); + expectNoMoreRestCall(); + + deleteElement(CASE_UUID); + } - mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=&elementTypes=FILTER") - .header("userId", USER1)) - .andExpectAll( - status().isOk(), - content().string(mapper.writeValueAsString(List.of(filter1, filter2))) - ); + @Test + void testDeleteParametersElement() throws Exception { + //TODO GET /elements/${PARAMETERS_UUID} + //TODO GET /elements/${PARAMETERS_UUID} + //TODO DELETE http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} + //TODO DELETE /elements/${PARAMETERS_UUID} + directoryService.expectGetElementsParametersUuid(); + directoryService.expectGetElementsParametersUuid(); // why? + parametersService.expectDeleteVoltageInitParametersParametersUuid(); + directoryService.expectDeleteElementsParametersUuid(); + expectNoMoreRestCall(); + + deleteElement(PARAMETERS_UUID); + } } - @Test - void testGetElementsMetadataWithFilterGeneratorEquipment() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER - //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} - directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); - filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); - expectNoMoreRestCall(); + @DisplayName("tests get elements metadata") + @Nested + class ExploreTestGetElementsMetadata { + @Test + void testGetElementsMetadataWithoutFilter() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${PRIVATE_STUDY_UUID},${CONTINGENCY_LIST_UUID} + //TODO GET /studies/metadata?ids=${PRIVATE_STUDY_UUID} + //TODO GET /filters/metadata?ids=${FILTER_UUID} + //TODO GET /contingency-lists/metadata?ids=${CONTINGENCY_LIST_UUID} + directoryService.expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid(); + studyService.expectGetStudiesMetadataIdsPrivateStudyUuid(); + filterService.expectGetFiltersMetadataIdsFilterUuid(); + contingencyListService.expectGetContingencyListsMetadataIdsContingencyListUuid(); + expectNoMoreRestCall(); + + mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) + .header("userId", USER1)) + .andExpectAll(status().isOk()); + } - mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=GENERATOR&elementTypes=FILTER") - .header("userId", USER1)) - .andExpectAll( - status().isOk(), - content().string("[]") + private static final ElementAttributes FILTER1 = new ElementAttributes(FILTER_UUID, FILTER_CONTINGENCY_LIST, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA); + private static final ElementAttributes FILTER2 = new ElementAttributes(FILTER_UUID_2, FILTER_CONTINGENCY_LIST_2, FILTER, new AccessRightsAttributes(true), USER1, 0L, null, SPECIFIC_METADATA_2); + + @Test + void testGetElementsMetadataWithFilterNoEquipment() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + expectNoMoreRestCall(); + + mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=&elementTypes=FILTER") + .header("userId", USER1)) + .andExpectAll( + status().isOk(), + content().string(mapper.writeValueAsString(List.of(FILTER1, FILTER2))) ); - } - - @Test - void testGetElementsMetadataWithFilterLineEquipment() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER - //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} - directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); - filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); - expectNoMoreRestCall(); + } - mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=LINE&elementTypes=FILTER") - .header("userId", USER1)) - .andExpectAll( - status().isOk(), - content().string(mapper.writeValueAsString(List.of(filter2))) + @Test + void testGetElementsMetadataWithFilterGeneratorEquipment() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + expectNoMoreRestCall(); + + mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=GENERATOR&elementTypes=FILTER") + .header("userId", USER1)) + .andExpectAll( + status().isOk(), + content().string("[]") ); - } - - @Test - void testDuplicateCase() throws Exception { - //TODO POST /cases?duplicateFrom=${CASE_UUID} - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - caseService.expectPostCasesNoIncorrectOrErrorFile(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()); - } - - @Test - void testDuplicateFilter() throws Exception { - //TODO POST /filters?duplicateFrom=${FILTER_UUID}&id=c49165e4-c6fa-4fd9-92ca-ff02c60e0927 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - filterService.expectPostFilters(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/filters?duplicateFrom={parentFilterId}&name={filterName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - FILTER_UUID, FILTER1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()); - } - - @Test - void testDuplicateScriptContingencyList() throws Exception { - //TODO POST /script-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=36a4a418-0e90-4493-80d1-128368a961e0 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostScriptContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + } - mockMvc.perform(post("/v1/explore/script-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()); + @Test + void testGetElementsMetadataWithFilterLineEquipment() throws Exception { + //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + expectNoMoreRestCall(); + + mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=LINE&elementTypes=FILTER") + .header("userId", USER1)) + .andExpectAll( + status().isOk(), + content().string(mapper.writeValueAsString(List.of(FILTER2))) + ); + } } - @Test - void testDuplicateFormContingencyList() throws Exception { - //TODO POST /form-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=b85d5ca6-08b7-480c-92df-d80678bccabf - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostFormContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + @DisplayName("tests duplicate elements") + @Nested + class ExploreTestDuplicate { + @Test + void testDuplicateCase() throws Exception { + //TODO POST /cases?duplicateFrom=${CASE_UUID} + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + caseService.expectPostCasesNoIncorrectOrErrorFile(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + CASE_UUID, CASE1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); + } - mockMvc.perform(post("/v1/explore/form-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()); - } + @Test + void testDuplicateFilter() throws Exception { + //TODO POST /filters?duplicateFrom=${FILTER_UUID}&id=c49165e4-c6fa-4fd9-92ca-ff02c60e0927 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + filterService.expectPostFilters(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/filters?duplicateFrom={parentFilterId}&name={filterName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + FILTER_UUID, FILTER1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); + } - @Test - void testDuplicateIdentifierContingencyList() throws Exception { - //TODO POST /identifier-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=6b8c828a-cd29-4685-b6c3-06e871c86e5d - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostIdentifierContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + @Test + void testDuplicateScriptContingencyList() throws Exception { + //TODO POST /script-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=36a4a418-0e90-4493-80d1-128368a961e0 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostScriptContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/script-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); + } - mockMvc.perform(post("/v1/explore/identifier-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()); - } + @Test + void testDuplicateFormContingencyList() throws Exception { + //TODO POST /form-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=b85d5ca6-08b7-480c-92df-d80678bccabf + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostFormContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/form-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); + } - @Test - void testDuplicateStudy() throws Exception { - //TODO POST /studies?duplicateFrom=${PUBLIC_STUDY_UUID}&studyUuid=5ecab065-afd8-4dcf-908c-d20d206c3e32 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - studyService.expectPostStudies(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); + @Test + void testDuplicateIdentifierContingencyList() throws Exception { + //TODO POST /identifier-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=6b8c828a-cd29-4685-b6c3-06e871c86e5d + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + contingencyListService.expectPostIdentifierContingencyLists(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/identifier-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + CONTINGENCY_LIST_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); + } - mockMvc.perform(post("/v1/explore/studies?duplicateFrom={parentStudyUuid}&studyName={studyName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", - PUBLIC_STUDY_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()); + @Test + void testDuplicateStudy() throws Exception { + //TODO POST /studies?duplicateFrom=${PUBLIC_STUDY_UUID}&studyUuid=5ecab065-afd8-4dcf-908c-d20d206c3e32 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + studyService.expectPostStudies(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/studies?duplicateFrom={parentStudyUuid}&studyName={studyName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", + PUBLIC_STUDY_UUID, STUDY1, "description", PARENT_DIRECTORY_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()); + } } @Test @@ -648,67 +708,71 @@ void testChangeFilter() throws Exception { verifyFilterOrContingencyUpdateRequests("/v1/filters/"); } - @Test - void testModifyScriptContingencyList() throws Exception { - //TODO PUT /script-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - contingencyListService.expectPutScriptContingencyLists(); - directoryService.expectPutElements(); - expectNoMoreRestCall(); - - final String scriptContingency = "{\"script\":\"alert(\\\"script contingency\\\")\"}"; - final String name = "script name"; - mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) - .contentType(APPLICATION_JSON) - .content(scriptContingency) - .param("name", name) - .param("contingencyListType", ContingencyListType.SCRIPT.name()) - .header("userId", USER1)) - .andExpect(status().isOk()); - - verifyFilterOrContingencyUpdateRequests("/v1/script-contingency-lists"); - } - - @Test - void testModifyFormContingencyList() throws Exception { - //TODO PUT /form-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - contingencyListService.expectPutFormContingencyLists(); - directoryService.expectPutElements(); - expectNoMoreRestCall(); + @DisplayName("tests modify contingency list") + @Nested + class ExploreTestModifyContingencyList { + @Test + void testModifyScriptContingencyList() throws Exception { + //TODO PUT /script-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + contingencyListService.expectPutScriptContingencyLists(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + + final String scriptContingency = "{\"script\":\"alert(\\\"script contingency\\\")\"}"; + final String name = "script name"; + mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) + .contentType(APPLICATION_JSON) + .content(scriptContingency) + .param("name", name) + .param("contingencyListType", ContingencyListType.SCRIPT.name()) + .header("userId", USER1)) + .andExpect(status().isOk()); - final String formContingency = "{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}"; - final String name = "form contingency name"; - mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) - .contentType(APPLICATION_JSON) - .content(formContingency) - .param("name", name) - .param("contingencyListType", ContingencyListType.FORM.name()) - .header("userId", USER1)) - .andExpect(status().isOk()); + verifyFilterOrContingencyUpdateRequests("/v1/script-contingency-lists"); + } - verifyFilterOrContingencyUpdateRequests("/v1/form-contingency-lists/"); - } + @Test + void testModifyFormContingencyList() throws Exception { + //TODO PUT /form-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + contingencyListService.expectPutFormContingencyLists(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + + final String formContingency = "{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}"; + final String name = "form contingency name"; + mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) + .contentType(APPLICATION_JSON) + .content(formContingency) + .param("name", name) + .param("contingencyListType", ContingencyListType.FORM.name()) + .header("userId", USER1)) + .andExpect(status().isOk()); - @Test - void testModifyIdentifierContingencyList() throws Exception { - //TODO PUT /identifier-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - contingencyListService.expectPutIdentifierContingencyLists(); - directoryService.expectPutElements(); - expectNoMoreRestCall(); + verifyFilterOrContingencyUpdateRequests("/v1/form-contingency-lists/"); + } - final String identifierContingencyList = "{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}"; - final String name = "identifier contingencyList name"; - mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) - .contentType(APPLICATION_JSON) - .content(identifierContingencyList) - .param("name", name) - .param("contingencyListType", ContingencyListType.IDENTIFIERS.name()) - .header("userId", USER1)) - .andExpect(status().isOk()); + @Test + void testModifyIdentifierContingencyList() throws Exception { + //TODO PUT /identifier-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + contingencyListService.expectPutIdentifierContingencyLists(); + directoryService.expectPutElements(); + expectNoMoreRestCall(); + + final String identifierContingencyList = "{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}"; + final String name = "identifier contingencyList name"; + mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) + .contentType(APPLICATION_JSON) + .content(identifierContingencyList) + .param("name", name) + .param("contingencyListType", ContingencyListType.IDENTIFIERS.name()) + .header("userId", USER1)) + .andExpect(status().isOk()); - verifyFilterOrContingencyUpdateRequests("/v1/identifier-contingency-lists/"); + verifyFilterOrContingencyUpdateRequests("/v1/identifier-contingency-lists/"); + } } private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) throws UncheckedInterruptedException, AssertionError { From d14244a300bb892e7c5bbbc16ced22707e6e2d86 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 10:57:09 +0200 Subject: [PATCH 10/14] Move tests --- .../gridsuite/explore/server/ExploreTest.java | 146 +++++++++--------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index 8295bf57..f98a6104 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -231,6 +231,24 @@ void testCaseCreationError() throws Exception { .andExpect(status().isBadRequest()); } } + + @Test + void testCaseCreationErrorWithBadExtension() throws Exception { + //TODO POST /cases + caseService.expectPostCasesTestIncorrectFile(); + expectNoMoreRestCall(); + + try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_INCORRECT_FILE))) { + MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_INCORRECT_FILE, "text/xml", is); + + mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", + STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID) + .file(mockFile) + .header("userId", USER1) + .contentType(MediaType.MULTIPART_FORM_DATA)) + .andExpect(status().isUnprocessableEntity()); + } + } } @DisplayName("test creation contingency list") @@ -300,6 +318,38 @@ void testCreateIdentifierContingencyList() throws Exception { .andExpect(status().isOk()); } } + + @Test + void testCreateFilter() throws Exception { + //TODO POST /filters?id=b4a0ce8a-a1be-4e96-9e00-0a269811f9d0 + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + filterService.expectPostFiltersIdAny(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}", + "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Filter content\"}")) + .andExpect(status().isOk()); + } + + @Test + void testCreateParameters() throws Exception { + //TODO POST http://voltage_init_parameters/v1/parameters + //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements + parametersService.expectHttpVoltageInitAny(); + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + expectNoMoreRestCall(); + + mockMvc.perform(post("/v1/explore/parameters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", + "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) + .header("userId", USER1) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"content\": \"Parameters content\"}")) + .andExpect(status().isOk()); + } } @Test @@ -333,38 +383,6 @@ void testReplaceFormContingencyListWithScript() throws Exception { .andExpect(status().isOk()); } - @Test - void testCreateFilter() throws Exception { - //TODO POST /filters?id=b4a0ce8a-a1be-4e96-9e00-0a269811f9d0 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - filterService.expectPostFiltersIdAny(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}", - "contingencyListScriptName", "", PARENT_DIRECTORY_UUID, null) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Filter content\"}")) - .andExpect(status().isOk()); - } - - @Test - void testCreateParameters() throws Exception { - //TODO POST http://voltage_init_parameters/v1/parameters - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - parametersService.expectHttpVoltageInitAny(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); - expectNoMoreRestCall(); - - mockMvc.perform(post("/v1/explore/parameters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", - "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID) - .header("userId", USER1) - .contentType(MediaType.APPLICATION_JSON) - .content("{\"content\": \"Parameters content\"}")) - .andExpect(status().isOk()); - } - @Test void testUpdateParameters() throws Exception { //TODO PUT http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} @@ -580,6 +598,29 @@ void testGetElementsMetadataWithFilterLineEquipment() throws Exception { content().string(mapper.writeValueAsString(List.of(FILTER2))) ); } + + @Test + void testGetCaseMetadata() throws Exception { + //TODO GET /elements?ids=${CASE_UUID} + //TODO GET /cases/metadata?ids=${CASE_UUID} + directoryService.expectGetElementsIdsCaseUuid(); + caseService.expectGetCasesMetadataIdsCaseUuid(); + expectNoMoreRestCall(); + + MvcResult result = mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + CASE_UUID) + .header("userId", USER1)) + .andExpect(status().isOk()) + .andReturn(); + String res = result.getResponse().getContentAsString(); + assertThat(mapper.readValue(res, new TypeReference>() { })) + .as("elementsMetadata") + .hasSize(1) //TODO replace only when assertj updated + .extracting(mapper::writeValueAsString) + .first() + .asString() + .as("caseAttributesAsString") + .isEqualTo(mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null, CASE_SPECIFIC_METADATA))); + } } @DisplayName("tests duplicate elements") @@ -670,24 +711,6 @@ void testDuplicateStudy() throws Exception { } } - @Test - void testCaseCreationErrorWithBadExtension() throws Exception { - //TODO POST /cases - caseService.expectPostCasesTestIncorrectFile(); - expectNoMoreRestCall(); - - try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_INCORRECT_FILE))) { - MockMultipartFile mockFile = new MockMultipartFile("caseFile", TEST_INCORRECT_FILE, "text/xml", is); - - mockMvc.perform(multipart("/v1/explore/cases/{caseName}?description={description}&parentDirectoryUuid={parentDirectoryUuid}", - STUDY_ERROR_NAME, "description", PARENT_DIRECTORY_UUID) - .file(mockFile) - .header("userId", USER1) - .contentType(MediaType.MULTIPART_FORM_DATA)) - .andExpect(status().isUnprocessableEntity()); - } - } - @Test void testChangeFilter() throws Exception { //TODO PUT /filters/${FILTER_UUID} @@ -794,27 +817,4 @@ private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterP .extracting(RequestWithBody::getPath) .anyMatch(path -> path.startsWith("/v1/elements/"));*/ } - - @Test - void testGetMetadata() throws Exception { - //TODO GET /elements?ids=${CASE_UUID} - //TODO GET /cases/metadata?ids=${CASE_UUID} - directoryService.expectGetElementsIdsCaseUuid(); - caseService.expectGetCasesMetadataIdsCaseUuid(); - expectNoMoreRestCall(); - - MvcResult result = mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + CASE_UUID) - .header("userId", USER1)) - .andExpect(status().isOk()) - .andReturn(); - String res = result.getResponse().getContentAsString(); - assertThat(mapper.readValue(res, new TypeReference>() { })) - .as("elementsMetadata") - .hasSize(1) //TODO replace only when assertj updated - .extracting(mapper::writeValueAsString) - .first() - .asString() - .as("caseAttributesAsString") - .isEqualTo(mapper.writeValueAsString(new ElementAttributes(CASE_UUID, "case", "CASE", new AccessRightsAttributes(true), USER1, 0L, null, CASE_SPECIFIC_METADATA))); - } } From 8f44f2cda5bf830c4bf3b097f470e428ba999062 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 11:00:36 +0200 Subject: [PATCH 11/14] remove redundant check --- .../gridsuite/explore/server/ExploreTest.java | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index f98a6104..e6c99434 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -727,8 +727,6 @@ void testChangeFilter() throws Exception { .param("name", name) .header("userId", USER1)) .andExpect(status().isOk()); - - verifyFilterOrContingencyUpdateRequests("/v1/filters/"); } @DisplayName("tests modify contingency list") @@ -751,8 +749,6 @@ void testModifyScriptContingencyList() throws Exception { .param("contingencyListType", ContingencyListType.SCRIPT.name()) .header("userId", USER1)) .andExpect(status().isOk()); - - verifyFilterOrContingencyUpdateRequests("/v1/script-contingency-lists"); } @Test @@ -772,8 +768,6 @@ void testModifyFormContingencyList() throws Exception { .param("contingencyListType", ContingencyListType.FORM.name()) .header("userId", USER1)) .andExpect(status().isOk()); - - verifyFilterOrContingencyUpdateRequests("/v1/form-contingency-lists/"); } @Test @@ -793,28 +787,6 @@ void testModifyIdentifierContingencyList() throws Exception { .param("contingencyListType", ContingencyListType.IDENTIFIERS.name()) .header("userId", USER1)) .andExpect(status().isOk()); - - verifyFilterOrContingencyUpdateRequests("/v1/identifier-contingency-lists/"); } } - - private void verifyFilterOrContingencyUpdateRequests(String contingencyOrFilterPath) throws UncheckedInterruptedException, AssertionError { - /*TODO var requests = IntStream.range(0, 2).mapToObj(i -> { - try { - var request = server.takeRequest(100L, TimeUnit.MILLISECONDS); - if (request == null) { - throw new AssertionError("Expected 2 requests, got only " + i); - } - return new RequestWithBody(request.getPath(), request.getBody().readUtf8()); - } catch (InterruptedException e) { - throw new UncheckedInterruptedException(e); - } - }).collect(Collectors.toSet()); - assertThat(requests).as("elementAttributes updated") - .extracting(RequestWithBody::getPath) - .anyMatch(path -> path.startsWith(contingencyOrFilterPath)); - assertThat(requests).as("name updated") - .extracting(RequestWithBody::getPath) - .anyMatch(path -> path.startsWith("/v1/elements/"));*/ - } } From f78ab712ca5152c74a652cb220f1ca28ed6eabb5 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 13:02:11 +0200 Subject: [PATCH 12/14] test cleanup --- .../gridsuite/explore/server/ExploreTest.java | 299 ++++++------------ .../gridsuite/explore/server/TestConfig.java | 4 +- .../server/services/MockRemoteServices.java | 12 +- 3 files changed, 110 insertions(+), 205 deletions(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index e6c99434..74c7fbbc 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.powsybl.commons.exceptions.UncheckedInterruptedException; import org.gridsuite.explore.server.dto.AccessRightsAttributes; import org.gridsuite.explore.server.dto.ElementAttributes; import org.gridsuite.explore.server.utils.ContingencyListType; @@ -30,7 +29,10 @@ import java.io.FileInputStream; import java.io.InputStream; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; import static org.assertj.core.api.Assertions.*; import static org.gridsuite.explore.server.services.MockRemoteServices.*; @@ -42,10 +44,8 @@ /** * @author Etienne Homer */ -//@TestExecutionListeners //(listeners = MockRestServiceServerResetTestExecutionListener.class) @AutoConfigureMockMvc //we want to test the controller @AutoConfigureWebClient @AutoConfigureCache //we mock http clients -//@DataJpaTest @AutoConfigureTestDatabase(replace = Replace.NONE) //reset datas between tests @SpringBootTest(classes = {ExploreApplication.class, TestConfig.class}) @ExtendWith(ExploreTestExtension.class) @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -110,32 +110,32 @@ void setup() { } @AfterEach - void teardownMockRestCaseService() { + void verifyRequestsMockRestCaseService() { mockRestCaseService.verify(); } @AfterEach - void teardownMockRestContingencyListService() { + void verifyRequestsMockRestContingencyListService() { mockRestContingencyListService.verify(); } @AfterEach - void teardownMockRestDirectoryService() { + void verifyRequestsMockRestDirectoryService() { mockRestDirectoryService.verify(); } @AfterEach - void teardownMockRestFilterService() { + void verifyRequestsMockRestFilterService() { mockRestFilterService.verify(); } @AfterEach - void teardownMockRestStudyService() { + void verifyRequestsMockRestStudyService() { mockRestStudyService.verify(); } @AfterEach - void teardownMockRestParametersService() { + void verifyRequestsMockRestParametersService() { final List errors = mockRestParametersServices.values().stream().filter(Objects::nonNull) .map(mockServer -> { try { @@ -165,10 +165,8 @@ class ExploreTestCreate { class ExploreTestCreateStudy { @Test void testCreateStudyFromExistingCase() throws Exception { - //TODO POST /studies/cases/${CASE_UUID}?studyUuid=7b504820-25b6-4ec1-a074-75899b7f058b&duplicateCase=false - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - studyService.expectPostStudies(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + studyService.expectPostStudies(); //POST /studies/cases/${CASE_UUID}?studyUuid=00000000-0000-0000-0000-000000000000&duplicateCase=false + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) @@ -180,8 +178,7 @@ void testCreateStudyFromExistingCase() throws Exception { @Test void testCreateStudyFromExistingCaseError() throws Exception { - //TODO POST /studies/cases/${NON_EXISTING_CASE_UUID}?studyUuid=ee9753e3-24f3-4ba9-9ea3-58fcf14e224a&duplicateCase=false - studyService.expectPostStudiesCasesNonExistingCaseUuid(); + studyService.expectPostStudiesCasesNonExistingCaseUuid(); //POST /studies/cases/${NON_EXISTING_CASE_UUID}?studyUuid=00000000-0000-0000-0000-000000000000&duplicateCase=false expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + NON_EXISTING_CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) @@ -196,10 +193,8 @@ void testCreateStudyFromExistingCaseError() throws Exception { class ExploreTestCreateCase { @Test void testCreateCase() throws Exception { - //TODO POST /cases - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - caseService.expectPostCasesNoIncorrectOrErrorFile(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + caseService.expectPostCasesNoIncorrectOrErrorFile(); //POST /cases + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE))) { @@ -216,8 +211,7 @@ void testCreateCase() throws Exception { @Test void testCaseCreationError() throws Exception { - //TODO POST /cases - caseService.expectPostCasesTestFileWithErrors(); + caseService.expectPostCasesTestFileWithErrors(); //POST /cases expectNoMoreRestCall(); try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_FILE_WITH_ERRORS))) { @@ -234,8 +228,7 @@ void testCaseCreationError() throws Exception { @Test void testCaseCreationErrorWithBadExtension() throws Exception { - //TODO POST /cases - caseService.expectPostCasesTestIncorrectFile(); + caseService.expectPostCasesTestIncorrectFile(); //POST /cases expectNoMoreRestCall(); try (InputStream is = new FileInputStream(ResourceUtils.getFile("classpath:" + TEST_INCORRECT_FILE))) { @@ -256,10 +249,8 @@ void testCaseCreationErrorWithBadExtension() throws Exception { class ExploreTestCreateScriptContingencyList { @Test void testCreateScriptContingencyList() throws Exception { - //TODO POST /script-contingency-lists?id=5d9c5d73-c033-4739-a3df-150d89da773b - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostScriptContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + contingencyListService.expectPostScriptContingencyLists(); //POST /script-contingency-lists?id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", @@ -272,10 +263,8 @@ void testCreateScriptContingencyList() throws Exception { @Test void testCreateScriptContingencyListError() throws Exception { - //TODO POST /script-contingency-lists?id=b6b6ffd8-907c-48b8-81e6-f14879745baa - //TODO POST /directories/${PARENT_DIRECTORY_WITH_ERROR_UUID}/elements - contingencyListService.expectPostScriptContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryWithErrorUuidElements(); + contingencyListService.expectPostScriptContingencyLists(); //POST /script-contingency-lists?id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryWithErrorUuidElements(); //POST /directories/${PARENT_DIRECTORY_WITH_ERROR_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/script-contingency-lists/{listName}?&parentDirectoryUuid={parentDirectoryUuid}&description={description}}", @@ -288,10 +277,8 @@ void testCreateScriptContingencyListError() throws Exception { @Test void testCreateFormContingencyList() throws Exception { - //TODO POST /form-contingency-lists?id=c3197b47-d3a9-4180-b8e7-0dd027adcf1b - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostFormContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + contingencyListService.expectPostFormContingencyLists(); //POST /form-contingency-lists?id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/form-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", @@ -304,10 +291,8 @@ void testCreateFormContingencyList() throws Exception { @Test void testCreateIdentifierContingencyList() throws Exception { - //TODO POST /identifier-contingency-lists?id=9e5fe771-1587-4d80-a6cb-e541da4febc5 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostIdentifierContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + contingencyListService.expectPostIdentifierContingencyLists(); //POST /identifier-contingency-lists?id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/identifier-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}", @@ -321,10 +306,8 @@ void testCreateIdentifierContingencyList() throws Exception { @Test void testCreateFilter() throws Exception { - //TODO POST /filters?id=b4a0ce8a-a1be-4e96-9e00-0a269811f9d0 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - filterService.expectPostFiltersIdAny(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + filterService.expectPostFiltersIdAny(); //POST /filters?id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}", @@ -337,10 +320,8 @@ void testCreateFilter() throws Exception { @Test void testCreateParameters() throws Exception { - //TODO POST http://voltage_init_parameters/v1/parameters - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - parametersService.expectHttpVoltageInitAny(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + parametersService.expectHttpVoltageInitAny(); //POST http://voltage_init_parameters/v1/parameters + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/parameters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", @@ -354,12 +335,9 @@ void testCreateParameters() throws Exception { @Test void testNewScriptFromFormContingencyList() throws Exception { - //TODO GET /elements/${CONTINGENCY_LIST_UUID} - //TODO POST /form-contingency-lists/${CONTINGENCY_LIST_UUID}/new-script?newId=0e61aaf8-8984-430b-9e19-2a004897a2eb - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - directoryService.expectGetElementsContingencyListUuid(); - contingencyListService.expectPostFormContingencyListsNewScript(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + directoryService.expectGetElementsContingencyListUuid(); //GET /elements/${CONTINGENCY_LIST_UUID} + contingencyListService.expectPostFormContingencyListsNewScript(); //POST /form-contingency-lists/${CONTINGENCY_LIST_UUID}/new-script?newId=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", @@ -370,12 +348,9 @@ void testNewScriptFromFormContingencyList() throws Exception { @Test void testReplaceFormContingencyListWithScript() throws Exception { - //TODO GET /elements/${CONTINGENCY_LIST_UUID} - //TODO POST /form-contingency-lists/${CONTINGENCY_LIST_UUID}/replace-with-script - //TODO POST /elements/${CONTINGENCY_LIST_UUID}/notification?type=UPDATE_DIRECTORY - directoryService.expectGetElementsContingencyListUuid(); - contingencyListService.expectPostFormContingencyLists(); - directoryService.expectHttpElementsContingencyListUuidNotificationTypeUpdateDirectory(); + directoryService.expectGetElementsContingencyListUuid(); //GET /elements/${CONTINGENCY_LIST_UUID} + contingencyListService.expectPostFormContingencyLists(); //POST /form-contingency-lists/${CONTINGENCY_LIST_UUID}/replace-with-script + directoryService.expectHttpElementsContingencyListUuidNotificationTypeUpdateDirectory(); //POST /elements/${CONTINGENCY_LIST_UUID}/notification?type=UPDATE_DIRECTORY expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/form-contingency-lists/{id}/replace-with-script", CONTINGENCY_LIST_UUID) @@ -385,8 +360,7 @@ void testReplaceFormContingencyListWithScript() throws Exception { @Test void testUpdateParameters() throws Exception { - //TODO PUT http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} - parametersService.expectHttpVoltageInitAny(); + parametersService.expectHttpVoltageInitAny(); //PUT http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} expectNoMoreRestCall(); mockMvc.perform(put("/v1/explore/parameters/{id}?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}", @@ -399,12 +373,9 @@ void testUpdateParameters() throws Exception { @Test void testNewScriptFromFilter() throws Exception { - //TODO GET /elements/${FILTER_UUID} - //TODO POST /filters/${FILTER_UUID}/new-script?newId=ef4be392-6346-4cce-997f-7520224e050a - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - directoryService.expectGetElementsFilterUuid(); - filterService.expectPostFiltersNewScript(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + directoryService.expectGetElementsFilterUuid(); //GET /elements/${FILTER_UUID} + filterService.expectPostFiltersNewScript(); //POST /filters/${FILTER_UUID}/new-script?newId=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/filters/{id}/new-script/{scriptName}?parentDirectoryUuid={parentDirectoryUuid}", @@ -415,12 +386,9 @@ void testNewScriptFromFilter() throws Exception { @Test void testReplaceFilterWithScript() throws Exception { - //TODO GET /elements/${FILTER_UUID} - //TODO PUT /filters/${FILTER_UUID}/replace-with-script - //TODO POST /elements/${FILTER_UUID}/notification?type=UPDATE_DIRECTORY - directoryService.expectGetElementsFilterUuid(); - filterService.expectPutFiltersReplaceWithScript(); - directoryService.expectHttpElementsFilterUuidNotificationTypeUpdateDirectory(); + directoryService.expectGetElementsFilterUuid(); //GET /elements/${FILTER_UUID} + filterService.expectPutFiltersReplaceWithScript(); //PUT /filters/${FILTER_UUID}/replace-with-script + directoryService.expectHttpElementsFilterUuidNotificationTypeUpdateDirectory(); //POST /elements/${FILTER_UUID}/notification?type=UPDATE_DIRECTORY expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/filters/{id}/replace-with-script", FILTER_UUID).header("userId", USER1)) @@ -437,12 +405,9 @@ private void deleteElement(UUID elementUUid) throws Exception { @Test void testDeleteFilterElement() throws Exception { - //TODO GET /elements/${FILTER_UUID} - //TODO DELETE /filters/${FILTER_UUID} - //TODO DELETE /elements/${FILTER_UUID} - directoryService.expectGetElementsFilterUuid(); - filterService.expectDeleteFiltersFilterUuid(); - directoryService.expectDeleteElementsFilterUuid(); + directoryService.expectGetElementsFilterUuid(); //GET /elements/${FILTER_UUID} + filterService.expectDeleteFiltersFilterUuid(); //DELETE /filters/${FILTER_UUID} + directoryService.expectDeleteElementsFilterUuid(); //DELETE /elements/${FILTER_UUID} expectNoMoreRestCall(); deleteElement(FILTER_UUID); @@ -450,12 +415,9 @@ void testDeleteFilterElement() throws Exception { @Test void testDeleteElementPrivateStudy() throws Exception { - //TODO GET /elements/${PRIVATE_STUDY_UUID} - //TODO DELETE /studies/${PRIVATE_STUDY_UUID} - //TODO DELETE /elements/${PRIVATE_STUDY_UUID} - directoryService.expectGetElementsPrivateStudyUuid(); - studyService.expectDeleteStudiesPrivateStudyUuid(); - directoryService.expectDeleteElementsPrivateStudyUuid(); + directoryService.expectGetElementsPrivateStudyUuid(); //GET /elements/${PRIVATE_STUDY_UUID} + studyService.expectDeleteStudiesPrivateStudyUuid(); //DELETE /studies/${PRIVATE_STUDY_UUID} + directoryService.expectDeleteElementsPrivateStudyUuid(); //DELETE /elements/${PRIVATE_STUDY_UUID} expectNoMoreRestCall(); deleteElement(PRIVATE_STUDY_UUID); @@ -463,12 +425,9 @@ void testDeleteElementPrivateStudy() throws Exception { @Test void testDeleteContingencyElement() throws Exception { - //TODO GET /elements/${CONTINGENCY_LIST_UUID} - //TODO DELETE /contingency-lists/${CONTINGENCY_LIST_UUID} - //TODO DELETE /elements/${CONTINGENCY_LIST_UUID} - directoryService.expectGetElementsContingencyListUuid(); - contingencyListService.expectDeleteContingencyListsContingencyListUuid(); - directoryService.expectDeleteElementsContingencyListUuid(); + directoryService.expectGetElementsContingencyListUuid(); //GET /elements/${CONTINGENCY_LIST_UUID} + contingencyListService.expectDeleteContingencyListsContingencyListUuid(); //DELETE /contingency-lists/${CONTINGENCY_LIST_UUID} + directoryService.expectDeleteElementsContingencyListUuid(); //DELETE /elements/${CONTINGENCY_LIST_UUID} expectNoMoreRestCall(); deleteElement(CONTINGENCY_LIST_UUID); @@ -476,10 +435,8 @@ void testDeleteContingencyElement() throws Exception { @Test void testDeleteInvalidElement() throws Exception { - //TODO GET /elements/${INVALID_ELEMENT_UUID} - //TODO DELETE /elements/${INVALID_ELEMENT_UUID} - directoryService.expectGetElementsInvalidElementUuid(); - directoryService.expectDeleteElementsInvalidElementUuid(); + directoryService.expectGetElementsInvalidElementUuid(); //GET /elements/${INVALID_ELEMENT_UUID} + directoryService.expectDeleteElementsInvalidElementUuid(); //DELETE /elements/${INVALID_ELEMENT_UUID} expectNoMoreRestCall(); mockMvc.perform(delete("/v1/explore/elements/{elementUuid}", INVALID_ELEMENT_UUID).header("userId", USER1)) @@ -488,12 +445,9 @@ void testDeleteInvalidElement() throws Exception { @Test void testDeleteParentDirectoryElement() throws Exception { - //TODO GET /elements/${PARENT_DIRECTORY_UUID} - //TODO GET /directories/${PARENT_DIRECTORY_UUID}/elements - //TODO DELETE /elements/${PARENT_DIRECTORY_UUID} - directoryService.expectGetElementsParentDirectoryUuid(); - directoryService.expectGetDirectoriesParentDirectoryUuidElements(); - directoryService.expectDeleteElementsParentDirectoryUuid(); + directoryService.expectGetElementsParentDirectoryUuid(); //GET /elements/${PARENT_DIRECTORY_UUID} + directoryService.expectGetDirectoriesParentDirectoryUuidElements(); //GET /directories/${PARENT_DIRECTORY_UUID}/elements + directoryService.expectDeleteElementsParentDirectoryUuid(); //DELETE /elements/${PARENT_DIRECTORY_UUID} expectNoMoreRestCall(); deleteElement(PARENT_DIRECTORY_UUID); @@ -501,12 +455,9 @@ void testDeleteParentDirectoryElement() throws Exception { @Test void testDeleteCaseElement() throws Exception { - //TODO GET /elements/${CASE_UUID} - //TODO DELETE /cases/${CASE_UUID} - //TODO DELETE /elements/${CASE_UUID} - directoryService.expectGetElementsCaseUuid(); - caseService.expectDeleteCasesCaseUuid(); - directoryService.expectDeleteElementsCaseUuid(); + directoryService.expectGetElementsCaseUuid(); //GET /elements/${CASE_UUID} + caseService.expectDeleteCasesCaseUuid(); //DELETE /cases/${CASE_UUID} + directoryService.expectDeleteElementsCaseUuid(); //DELETE /elements/${CASE_UUID} expectNoMoreRestCall(); deleteElement(CASE_UUID); @@ -514,14 +465,10 @@ void testDeleteCaseElement() throws Exception { @Test void testDeleteParametersElement() throws Exception { - //TODO GET /elements/${PARAMETERS_UUID} - //TODO GET /elements/${PARAMETERS_UUID} - //TODO DELETE http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} - //TODO DELETE /elements/${PARAMETERS_UUID} - directoryService.expectGetElementsParametersUuid(); - directoryService.expectGetElementsParametersUuid(); // why? - parametersService.expectDeleteVoltageInitParametersParametersUuid(); - directoryService.expectDeleteElementsParametersUuid(); + directoryService.expectGetElementsParametersUuid(); //GET /elements/${PARAMETERS_UUID} + directoryService.expectGetElementsParametersUuid(); // why? //GET /elements/${PARAMETERS_UUID} + parametersService.expectDeleteVoltageInitParametersParametersUuid(); //DELETE http://voltage_init_parameters/v1/parameters/${PARAMETERS_UUID} + directoryService.expectDeleteElementsParametersUuid(); //DELETE /elements/${PARAMETERS_UUID} expectNoMoreRestCall(); deleteElement(PARAMETERS_UUID); @@ -533,14 +480,10 @@ void testDeleteParametersElement() throws Exception { class ExploreTestGetElementsMetadata { @Test void testGetElementsMetadataWithoutFilter() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${PRIVATE_STUDY_UUID},${CONTINGENCY_LIST_UUID} - //TODO GET /studies/metadata?ids=${PRIVATE_STUDY_UUID} - //TODO GET /filters/metadata?ids=${FILTER_UUID} - //TODO GET /contingency-lists/metadata?ids=${CONTINGENCY_LIST_UUID} - directoryService.expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid(); - studyService.expectGetStudiesMetadataIdsPrivateStudyUuid(); - filterService.expectGetFiltersMetadataIdsFilterUuid(); - contingencyListService.expectGetContingencyListsMetadataIdsContingencyListUuid(); + directoryService.expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid(); //GET /elements?ids=${FILTER_UUID},${PRIVATE_STUDY_UUID},${CONTINGENCY_LIST_UUID} + studyService.expectGetStudiesMetadataIdsPrivateStudyUuid(); //GET /studies/metadata?ids=${PRIVATE_STUDY_UUID} + filterService.expectGetFiltersMetadataIdsFilterUuid(); //GET /filters/metadata?ids=${FILTER_UUID} + contingencyListService.expectGetContingencyListsMetadataIdsContingencyListUuid(); //GET /contingency-lists/metadata?ids=${CONTINGENCY_LIST_UUID} expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + PRIVATE_STUDY_UUID + "," + CONTINGENCY_LIST_UUID) @@ -553,10 +496,8 @@ void testGetElementsMetadataWithoutFilter() throws Exception { @Test void testGetElementsMetadataWithFilterNoEquipment() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER - //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} - directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); - filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); //GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); //GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=&elementTypes=FILTER") @@ -569,10 +510,8 @@ void testGetElementsMetadataWithFilterNoEquipment() throws Exception { @Test void testGetElementsMetadataWithFilterGeneratorEquipment() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER - //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} - directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); - filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); //GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); //GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=GENERATOR&elementTypes=FILTER") @@ -585,10 +524,8 @@ void testGetElementsMetadataWithFilterGeneratorEquipment() throws Exception { @Test void testGetElementsMetadataWithFilterLineEquipment() throws Exception { - //TODO GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER - //TODO GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} - directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); - filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); + directoryService.expectGetElementsIdsFilterUuidFilterUuid2ElementtypesFilter(); //GET /elements?ids=${FILTER_UUID},${FILTER_UUID_2}&elementTypes=FILTER + filterService.expectGetFiltersMetadataIdsFilterUuidFilterUuid2(); //GET /filters/metadata?ids=${FILTER_UUID},${FILTER_UUID_2} expectNoMoreRestCall(); mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + FILTER_UUID + "," + FILTER_UUID_2 + "&equipmentTypes=LINE&elementTypes=FILTER") @@ -601,10 +538,8 @@ void testGetElementsMetadataWithFilterLineEquipment() throws Exception { @Test void testGetCaseMetadata() throws Exception { - //TODO GET /elements?ids=${CASE_UUID} - //TODO GET /cases/metadata?ids=${CASE_UUID} - directoryService.expectGetElementsIdsCaseUuid(); - caseService.expectGetCasesMetadataIdsCaseUuid(); + directoryService.expectGetElementsIdsCaseUuid(); //GET /elements?ids=${CASE_UUID} + caseService.expectGetCasesMetadataIdsCaseUuid(); //GET /cases/metadata?ids=${CASE_UUID} expectNoMoreRestCall(); MvcResult result = mockMvc.perform(get("/v1/explore/elements/metadata?ids=" + CASE_UUID) @@ -628,10 +563,8 @@ void testGetCaseMetadata() throws Exception { class ExploreTestDuplicate { @Test void testDuplicateCase() throws Exception { - //TODO POST /cases?duplicateFrom=${CASE_UUID} - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - caseService.expectPostCasesNoIncorrectOrErrorFile(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + caseService.expectPostCasesNoIncorrectOrErrorFile(); //POST /cases?duplicateFrom=${CASE_UUID} + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/cases?duplicateFrom={parentCaseUuid}&caseName={caseName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", @@ -642,10 +575,8 @@ void testDuplicateCase() throws Exception { @Test void testDuplicateFilter() throws Exception { - //TODO POST /filters?duplicateFrom=${FILTER_UUID}&id=c49165e4-c6fa-4fd9-92ca-ff02c60e0927 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - filterService.expectPostFilters(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + filterService.expectPostFilters(); //POST /filters?duplicateFrom=${FILTER_UUID}&id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/filters?duplicateFrom={parentFilterId}&name={filterName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", @@ -656,10 +587,8 @@ void testDuplicateFilter() throws Exception { @Test void testDuplicateScriptContingencyList() throws Exception { - //TODO POST /script-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=36a4a418-0e90-4493-80d1-128368a961e0 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostScriptContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + contingencyListService.expectPostScriptContingencyLists(); //POST /script-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/script-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", @@ -670,10 +599,8 @@ void testDuplicateScriptContingencyList() throws Exception { @Test void testDuplicateFormContingencyList() throws Exception { - //TODO POST /form-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=b85d5ca6-08b7-480c-92df-d80678bccabf - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostFormContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + contingencyListService.expectPostFormContingencyLists(); //POST /form-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/form-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", @@ -684,10 +611,8 @@ void testDuplicateFormContingencyList() throws Exception { @Test void testDuplicateIdentifierContingencyList() throws Exception { - //TODO POST /identifier-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=6b8c828a-cd29-4685-b6c3-06e871c86e5d - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - contingencyListService.expectPostIdentifierContingencyLists(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + contingencyListService.expectPostIdentifierContingencyLists(); //POST /identifier-contingency-lists?duplicateFrom=${CONTINGENCY_LIST_UUID}&id=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/identifier-contingency-lists?duplicateFrom={parentListId}&listName={listName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", @@ -698,10 +623,8 @@ void testDuplicateIdentifierContingencyList() throws Exception { @Test void testDuplicateStudy() throws Exception { - //TODO POST /studies?duplicateFrom=${PUBLIC_STUDY_UUID}&studyUuid=5ecab065-afd8-4dcf-908c-d20d206c3e32 - //TODO POST /directories/${PARENT_DIRECTORY_UUID}/elements - studyService.expectPostStudies(); - directoryService.expectPostDirectoriesParentDirectoryUuidElements(); + studyService.expectPostStudies(); //POST /studies?duplicateFrom=${PUBLIC_STUDY_UUID}&studyUuid=00000000-0000-0000-0000-000000000000 + directoryService.expectPostDirectoriesParentDirectoryUuidElements(); //POST /directories/${PARENT_DIRECTORY_UUID}/elements expectNoMoreRestCall(); mockMvc.perform(post("/v1/explore/studies?duplicateFrom={parentStudyUuid}&studyName={studyName}&description={description}&parentDirectoryUuid={parentDirectoryUuid}", @@ -713,18 +636,14 @@ void testDuplicateStudy() throws Exception { @Test void testChangeFilter() throws Exception { - //TODO PUT /filters/${FILTER_UUID} - //TODO PUT /elements/${FILTER_UUID} - filterService.expectPutFilters(); - directoryService.expectPutElements(); + filterService.expectPutFilters(); //PUT /filters/${FILTER_UUID} + directoryService.expectPutElements(); //PUT /elements/${FILTER_UUID} expectNoMoreRestCall(); - final String filter = "{\"type\":\"CRITERIA\",\"equipmentFilterForm\":{\"equipmentType\":\"BATTERY\",\"name\":\"test bbs\",\"countries\":[\"BS\"],\"nominalVoltage\":{\"type\":\"LESS_THAN\",\"value1\":545430,\"value2\":null},\"freeProperties\":{\"region\":[\"north\"],\"totallyFree\":[\"6555\"],\"tso\":[\"ceps\"]}}}"; - final String name = "filter name"; mockMvc.perform(put("/v1/explore/filters/{id}", FILTER_UUID) .contentType(APPLICATION_JSON) - .content(filter) - .param("name", name) + .content("{\"type\":\"CRITERIA\",\"equipmentFilterForm\":{\"equipmentType\":\"BATTERY\",\"name\":\"test bbs\",\"countries\":[\"BS\"],\"nominalVoltage\":{\"type\":\"LESS_THAN\",\"value1\":545430,\"value2\":null},\"freeProperties\":{\"region\":[\"north\"],\"totallyFree\":[\"6555\"],\"tso\":[\"ceps\"]}}}") + .param("name", "filter name") .header("userId", USER1)) .andExpect(status().isOk()); } @@ -734,18 +653,14 @@ void testChangeFilter() throws Exception { class ExploreTestModifyContingencyList { @Test void testModifyScriptContingencyList() throws Exception { - //TODO PUT /script-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - contingencyListService.expectPutScriptContingencyLists(); - directoryService.expectPutElements(); + contingencyListService.expectPutScriptContingencyLists(); //PUT /script-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + directoryService.expectPutElements(); //PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} expectNoMoreRestCall(); - final String scriptContingency = "{\"script\":\"alert(\\\"script contingency\\\")\"}"; - final String name = "script name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) .contentType(APPLICATION_JSON) - .content(scriptContingency) - .param("name", name) + .content("{\"script\":\"alert(\\\"script contingency\\\")\"}") + .param("name", "script name") .param("contingencyListType", ContingencyListType.SCRIPT.name()) .header("userId", USER1)) .andExpect(status().isOk()); @@ -753,18 +668,14 @@ void testModifyScriptContingencyList() throws Exception { @Test void testModifyFormContingencyList() throws Exception { - //TODO PUT /form-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - contingencyListService.expectPutFormContingencyLists(); - directoryService.expectPutElements(); + contingencyListService.expectPutFormContingencyLists(); //PUT /form-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + directoryService.expectPutElements(); //PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} expectNoMoreRestCall(); - final String formContingency = "{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}"; - final String name = "form contingency name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) .contentType(APPLICATION_JSON) - .content(formContingency) - .param("name", name) + .content("{\"equipmentType\":\"LINE\",\"name\":\"contingency EN update1\",\"countries1\":[\"AL\"],\"countries2\":[],\"nominalVoltage1\":{\"type\":\"EQUALITY\",\"value1\":45340,\"value2\":null},\"nominalVoltage2\":null,\"freeProperties1\":{},\"freeProperties2\":{}}") + .param("name", "form contingency name") .param("contingencyListType", ContingencyListType.FORM.name()) .header("userId", USER1)) .andExpect(status().isOk()); @@ -772,18 +683,14 @@ void testModifyFormContingencyList() throws Exception { @Test void testModifyIdentifierContingencyList() throws Exception { - //TODO PUT /identifier-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - //TODO PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} - contingencyListService.expectPutIdentifierContingencyLists(); - directoryService.expectPutElements(); + contingencyListService.expectPutIdentifierContingencyLists(); //PUT /identifier-contingency-lists/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} + directoryService.expectPutElements(); //PUT /elements/${SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID} expectNoMoreRestCall(); - final String identifierContingencyList = "{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}"; - final String name = "identifier contingencyList name"; mockMvc.perform(put("/v1/explore/contingency-lists/{id}", SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID) .contentType(APPLICATION_JSON) - .content(identifierContingencyList) - .param("name", name) + .content("{\"identifierContingencyList\":{\"type\":\"identifier\",\"version\":\"1.0\",\"identifiableType\":\"LINE\",\"identifiers\":[{\"type\":\"LIST\",\"identifierList\":[{\"type\":\"ID_BASED\",\"identifier\":\"34\"},{\"type\":\"ID_BASED\",\"identifier\":\"qs\"}]}]},\"type\":\"IDENTIFIERS\"}") + .param("name", "identifier contingencyList name") .param("contingencyListType", ContingencyListType.IDENTIFIERS.name()) .header("userId", USER1)) .andExpect(status().isOk()); diff --git a/src/test/java/org/gridsuite/explore/server/TestConfig.java b/src/test/java/org/gridsuite/explore/server/TestConfig.java index 1675d0a6..64abab90 100644 --- a/src/test/java/org/gridsuite/explore/server/TestConfig.java +++ b/src/test/java/org/gridsuite/explore/server/TestConfig.java @@ -34,7 +34,7 @@ public MockServerRestTemplateCustomizer mockServerRestTemplateCustomizer() { @SuppressWarnings("OptionalGetWithoutIsPresent") private static RestTemplate getRestTemplate(final Class clazz, final T service) throws IllegalAccessException { - Field rtField = Arrays.stream(clazz.getDeclaredFields()).filter(f -> RestTemplate.class.equals(f.getType())).findAny().get(); + final Field rtField = Arrays.stream(clazz.getDeclaredFields()).filter(f -> RestTemplate.class.equals(f.getType())).findAny().get(); rtField.setAccessible(true); return (RestTemplate) rtField.get(service); } @@ -67,7 +67,7 @@ public MockRestServiceServer mockRestSrvStudyService(MockServerRestTemplateCusto @SuppressWarnings({"unchecked", "OptionalGetWithoutIsPresent"}) @Bean public Map mockRestSrvParametersService(MockServerRestTemplateCustomizer customizer, ParametersService parametersService) throws IllegalAccessException { - Field rtField = Arrays.stream(ParametersService.class.getDeclaredFields()).filter(f -> Map.class.equals(f.getType())).findAny().get(); + final Field rtField = Arrays.stream(ParametersService.class.getDeclaredFields()).filter(f -> Map.class.equals(f.getType())).findAny().get(); rtField.setAccessible(true); return ((Map) rtField.get(parametersService)).entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, diff --git a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java index 75f183da..104f3cd0 100644 --- a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java +++ b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java @@ -71,7 +71,6 @@ public final class MockRemoteServices { "format", "XIIDM" ); - @SuppressWarnings({"unused"}) @AllArgsConstructor private abstract static class AbstractMockRestService { protected final MockRestServiceServer mockServer; @@ -100,7 +99,7 @@ public void expectDeleteAnything() { * @see CaseService * @see MockRestServiceServer */ - @SuppressWarnings({"deprecation", "unused"}) + @SuppressWarnings({"deprecation"}) public static class MockCaseService extends AbstractMockRestService { public MockCaseService(MockRestServiceServer mockServer, ObjectMapper mapper) { super(mockServer, mapper); @@ -203,7 +202,7 @@ public void expectDeleteCasesCaseUuid() { * @see ContingencyListService * @see MockRestServiceServer */ - @SuppressWarnings({"deprecation", "unused"}) + @SuppressWarnings({"deprecation"}) public static class MockContingencyListService extends AbstractMockRestService { public MockContingencyListService(MockRestServiceServer mockServer, ObjectMapper mapper) { super(mockServer, mapper); @@ -367,7 +366,7 @@ public void expectDeleteContingencyListsContingencyListUuid() { * @see DirectoryService * @see MockRestServiceServer */ - @SuppressWarnings({"deprecation", "unused"}) + @SuppressWarnings({"deprecation"}) public static class MockDirectoryService extends AbstractMockRestService { public MockDirectoryService(MockRestServiceServer mockServer, ObjectMapper mapper) { super(mockServer, mapper); @@ -772,7 +771,7 @@ public void expectDeleteElementsParametersUuid() { * @see FilterService * @see MockRestServiceServer */ - @SuppressWarnings({"deprecation", "unused"}) + @SuppressWarnings({"deprecation"}) public static class MockFilterService extends AbstractMockRestService { public MockFilterService(MockRestServiceServer mockServer, ObjectMapper mapper) { super(mockServer, mapper); @@ -908,7 +907,7 @@ public void expectDeleteFiltersFilterUuid() { * @see StudyService * @see MockRestServiceServer */ - @SuppressWarnings({"deprecation", "unused"}) + @SuppressWarnings({"deprecation"}) public static class MockStudyService extends AbstractMockRestService { public MockStudyService(MockRestServiceServer mockServer, ObjectMapper mapper) { super(mockServer, mapper); @@ -997,7 +996,6 @@ public void expectDeleteStudiesPrivateStudyUuid() { } } - @SuppressWarnings("unused") public static class MockParametersService extends AbstractMockRestService { private final Map mockServers; From 564144c3aca54138701031f2f7566f1e746c0292 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 12:19:32 +0200 Subject: [PATCH 13/14] add `userId` in test expectation --- .../gridsuite/explore/server/ExploreTest.java | 2 +- .../server/services/MockRemoteServices.java | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/gridsuite/explore/server/ExploreTest.java b/src/test/java/org/gridsuite/explore/server/ExploreTest.java index 74c7fbbc..8f1a0cd5 100644 --- a/src/test/java/org/gridsuite/explore/server/ExploreTest.java +++ b/src/test/java/org/gridsuite/explore/server/ExploreTest.java @@ -171,7 +171,7 @@ void testCreateStudyFromExistingCase() throws Exception { mockMvc.perform(post("/v1/explore/studies/" + STUDY1 + "/cases/" + CASE_UUID + "?description=desc&parentDirectoryUuid=" + PARENT_DIRECTORY_UUID) .param("duplicateCase", "false") - .header("userId", "userId") + .header("userId", USER1) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } diff --git a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java index 104f3cd0..3a85f489 100644 --- a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java +++ b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java @@ -186,6 +186,7 @@ public void expectGetCasesMetadataIdsCaseUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /cases/$CASE_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -193,6 +194,7 @@ public void expectGetCasesMetadataIdsCaseUuid() { public void expectDeleteCasesCaseUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/cases/" + CASE_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } } @@ -230,6 +232,7 @@ public void expectGetContingencyListsMetadataIdsContingencyListUuid() { *
HTTP request
*
method = {@code POST}
*
uri = {@code /script-contingency-lists?id=$PARENT_DIRECTORY_WITH_ERROR_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -237,6 +240,7 @@ public void expectGetContingencyListsMetadataIdsContingencyListUuid() { public void expectPostScriptContingencyListsIdParentDirectoryWithErrorUuid() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo("/script-contingency-lists?id=" + PARENT_DIRECTORY_WITH_ERROR_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withServerError()); } @@ -305,6 +309,7 @@ public void expectPostFormContingencyListsNewScript() { *
HTTP request
*
method = {@code PUT}
*
uri = {@code /script-contingency-lists/*}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -312,6 +317,7 @@ public void expectPostFormContingencyListsNewScript() { public void expectPutScriptContingencyLists() { mockServer.expect(method(HttpMethod.PUT)) .andExpect(requestTo(Matchers.startsWith("/script-contingency-lists/"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -320,6 +326,7 @@ public void expectPutScriptContingencyLists() { *
HTTP request
*
method = {@code PUT}
*
uri = {@code /form-contingency-lists/*}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -327,6 +334,7 @@ public void expectPutScriptContingencyLists() { public void expectPutFormContingencyLists() { mockServer.expect(method(HttpMethod.PUT)) .andExpect(requestTo(Matchers.startsWith("/form-contingency-lists/"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -335,6 +343,7 @@ public void expectPutFormContingencyLists() { *
HTTP request
*
method = {@code PUT}
*
uri = {@code /identifier-contingency-lists/*}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -342,6 +351,7 @@ public void expectPutFormContingencyLists() { public void expectPutIdentifierContingencyLists() { mockServer.expect(method(HttpMethod.PUT)) .andExpect(requestTo(Matchers.startsWith("/identifier-contingency-lists/"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -350,6 +360,7 @@ public void expectPutIdentifierContingencyLists() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /contingency-lists/$CONTINGENCY_LIST_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -357,6 +368,7 @@ public void expectPutIdentifierContingencyLists() { public void expectDeleteContingencyListsContingencyListUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/contingency-lists/" + CONTINGENCY_LIST_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } } @@ -382,6 +394,7 @@ public MockDirectoryService(MockRestServiceServer mockServer, ObjectMapper mappe *
HTTP request
*
method = {@code POST}
*
uri = {@code /directories/$PARENT_DIRECTORY_UUID/elements}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
header: content-type = {@code application/json;charset=UTF-8}
@@ -391,6 +404,7 @@ public MockDirectoryService(MockRestServiceServer mockServer, ObjectMapper mappe public void expectPostDirectoriesParentDirectoryUuidElements() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo("/directories/" + PARENT_DIRECTORY_UUID + "/elements")) + .andExpect(header("userId", USER1)) .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(privateStudyAttributesAsString)); } @@ -399,6 +413,7 @@ public void expectPostDirectoriesParentDirectoryUuidElements() { *
HTTP request
*
method = {@code POST}
*
uri = {@code /directories/$PARENT_DIRECTORY_WITH_ERROR_UUID/elements}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 500 Internal Server Error}
* @@ -406,6 +421,7 @@ public void expectPostDirectoriesParentDirectoryUuidElements() { public void expectPostDirectoriesParentDirectoryWithErrorUuidElements() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo("/directories/" + PARENT_DIRECTORY_WITH_ERROR_UUID + "/elements")) + .andExpect(header("userId", USER1)) .andRespond(withServerError()); } @@ -430,6 +446,7 @@ public void expectGetElementsContingencyListUuid() { *
*
HTTP request
*
uri = {@code /elements/$CONTINGENCY_LIST_UUID/notification?type=UPDATE_DIRECTORY}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
header: content-type = {@code application/json;charset=UTF-8}
@@ -439,6 +456,7 @@ public void expectGetElementsContingencyListUuid() { public void expectHttpElementsContingencyListUuidNotificationTypeUpdateDirectory() { //TODO missing method mockServer.expect(requestTo("/elements/" + CONTINGENCY_LIST_UUID + "/notification?type=UPDATE_DIRECTORY")) + .andExpect(header("userId", USER1)) .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(formContingencyListAttributesAsString)); } @@ -480,6 +498,7 @@ public void expectGetElementsFilterUuid() { *
*
HTTP request
*
uri = {@code /elements/$FILTER_UUID/notification?type=UPDATE_DIRECTORY}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
header: content-type = {@code application/json;charset=UTF-8}
@@ -489,6 +508,7 @@ public void expectGetElementsFilterUuid() { public void expectHttpElementsFilterUuidNotificationTypeUpdateDirectory() { //TODO missing method mockServer.expect(requestTo("/elements/" + FILTER_UUID + "/notification?type=UPDATE_DIRECTORY")) + .andExpect(header("userId", USER1)) .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(filterAttributesAsString)); } @@ -531,6 +551,7 @@ public void expectGetElementsPrivateStudyUuid() { *
HTTP request
*
method = {@code GET}
*
uri = {@code /elements/$PUBLIC_STUDY_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
header: content-type = {@code application/json;charset=UTF-8}
@@ -540,6 +561,7 @@ public void expectGetElementsPrivateStudyUuid() { public void expectGetElementsPublicStudyUuid() { mockServer.expect(method(HttpMethod.GET)) .andExpect(requestTo("/elements/" + PUBLIC_STUDY_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8).body(jsonify(new ElementAttributes(PUBLIC_STUDY_UUID, STUDY1, "STUDY", new AccessRightsAttributes(false), USER1, 0, null)))); } @@ -599,6 +621,7 @@ public void expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid() *
HTTP request
*
method = {@code PUT}
*
uri = {@code /elements/}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
header: content-type = {@code application/json;charset=UTF-8}
@@ -607,6 +630,7 @@ public void expectGetElementsIdsFilterUuidPrivateStudyUuidContingencyListUuid() public void expectPutElements() { mockServer.expect(method(HttpMethod.PUT)) .andExpect(requestTo(Matchers.startsWith("/elements/"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8)); //TODO missing body content } @@ -632,6 +656,7 @@ public void expectGetElementsInvalidElementUuid() { *
HTTP request
*
method = {@code DELGETETE}
*
uri = {@code /directories/$PARENT_DIRECTORY_UUID/elements}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
header: content-type = {@code application/json;charset=UTF-8}
@@ -640,6 +665,7 @@ public void expectGetElementsInvalidElementUuid() { public void expectGetDirectoriesParentDirectoryUuidElements() { mockServer.expect(method(HttpMethod.GET)) .andExpect(requestTo("/directories/" + PARENT_DIRECTORY_UUID + "/elements")) + .andExpect(header("userId", USER1)) .andRespond(withSuccess().contentType(APPLICATION_JSON_UTF8)); //TODO missing body content } @@ -665,6 +691,7 @@ public void expectGetElementsParentDirectoryUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$INVALID_ELEMENT_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
@@ -672,6 +699,7 @@ public void expectGetElementsParentDirectoryUuid() { public void expectDeleteElementsInvalidElementUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + INVALID_ELEMENT_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -680,6 +708,7 @@ public void expectDeleteElementsInvalidElementUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$PRIVATE_STUDY_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
*
@@ -687,6 +716,7 @@ public void expectDeleteElementsInvalidElementUuid() { public void expectDeleteElementsPrivateStudyUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + PRIVATE_STUDY_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -695,6 +725,7 @@ public void expectDeleteElementsPrivateStudyUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$FILTER_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -702,6 +733,7 @@ public void expectDeleteElementsPrivateStudyUuid() { public void expectDeleteElementsFilterUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + FILTER_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -710,6 +742,7 @@ public void expectDeleteElementsFilterUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$CONTINGENCY_LIST_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -717,6 +750,7 @@ public void expectDeleteElementsFilterUuid() { public void expectDeleteElementsContingencyListUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + CONTINGENCY_LIST_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -725,6 +759,7 @@ public void expectDeleteElementsContingencyListUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$PARENT_DIRECTORY_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -732,6 +767,7 @@ public void expectDeleteElementsContingencyListUuid() { public void expectDeleteElementsParentDirectoryUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + PARENT_DIRECTORY_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -740,6 +776,7 @@ public void expectDeleteElementsParentDirectoryUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$CASE_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -747,6 +784,7 @@ public void expectDeleteElementsParentDirectoryUuid() { public void expectDeleteElementsCaseUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + CASE_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -755,6 +793,7 @@ public void expectDeleteElementsCaseUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /elements/$PARAMETERS_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -762,6 +801,7 @@ public void expectDeleteElementsCaseUuid() { public void expectDeleteElementsParametersUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/elements/" + PARAMETERS_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } } @@ -814,6 +854,7 @@ public void expectPostFiltersNewScript() { *
HTTP request
*
method = {@code POST}
*
uri = {@code /filters*}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -821,6 +862,7 @@ public void expectPostFiltersNewScript() { public void expectPostFilters() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo(Matchers.startsWith("/filters"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -844,6 +886,7 @@ public void expectPostFiltersIdAny() { *
HTTP request
*
method = {@code PUT}
*
uri = {@code /filters/*\/replace-with-script}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -851,6 +894,7 @@ public void expectPostFiltersIdAny() { public void expectPutFiltersReplaceWithScript() { mockServer.expect(method(HttpMethod.PUT)) .andExpect(requestTo(Matchers.matchesPattern("^/filters/.+/replace-with-script"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -859,6 +903,7 @@ public void expectPutFiltersReplaceWithScript() { *
HTTP request
*
method = {@code PUT}
*
uri = {@code /filters/*}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -866,6 +911,7 @@ public void expectPutFiltersReplaceWithScript() { public void expectPutFilters() { mockServer.expect(method(HttpMethod.PUT)) .andExpect(requestTo(Matchers.startsWith("/filters/"))) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } @@ -891,6 +937,7 @@ public void expectGetFiltersMetadataIdsFilterUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /filters/$FILTER_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -898,6 +945,7 @@ public void expectGetFiltersMetadataIdsFilterUuid() { public void expectDeleteFiltersFilterUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/filters/" + FILTER_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } } @@ -918,6 +966,7 @@ public MockStudyService(MockRestServiceServer mockServer, ObjectMapper mapper) { *
HTTP request
*
method = {@code POST}
*
uri = {@code /studies/cases/$NON_EXISTING_CASE_UUID(/*)?}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 404 Not Found}
* @@ -925,6 +974,7 @@ public MockStudyService(MockRestServiceServer mockServer, ObjectMapper mapper) { public void expectPostStudiesCasesNonExistingCaseUuid() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo(Matchers.startsWith("/studies/cases/" + NON_EXISTING_CASE_UUID))) + .andExpect(header("userId", USER1)) .andRespond(withStatus(HttpStatus.NOT_FOUND)); } @@ -934,6 +984,7 @@ public void expectPostStudiesCasesNonExistingCaseUuid() { *
HTTP request
*
method = {@code POST}
*
uri = {@code /studies*}
+ *
header: userId = {@code $USER1}
*
body = {@code contains(filename=$TEST_FILE_WITH_ERRORS)}
*
HTTP response
*
status = {@code 409 Conflict}
@@ -942,6 +993,7 @@ public void expectPostStudiesCasesNonExistingCaseUuid() { public void expectPostStudiesTestFileWithErrors() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo(Matchers.startsWith("/studies"))) + .andExpect(header("userId", USER1)) .andExpect(MockRestRequestMatchers.content().string(Matchers.containsString("filename=\"" + TEST_FILE_WITH_ERRORS + "\""))) .andRespond(withStatus(HttpStatus.CONFLICT)); } @@ -951,6 +1003,7 @@ public void expectPostStudiesTestFileWithErrors() { *
HTTP request
*
method = {@code POST}
*
uri = {@code /studies*}
+ *
header: userId = {@code $USER1}
*
body = {@code not_contains(filename=$TEST_FILE_WITH_ERRORS)}
*
HTTP response
*
status = {@code 200 OK}
@@ -959,6 +1012,7 @@ public void expectPostStudiesTestFileWithErrors() { public void expectPostStudies() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo(Matchers.startsWith("/studies"))) + .andExpect(header("userId", USER1)) .andExpect(MockRestRequestMatchers.content().string(Matchers.not(Matchers.containsString("filename=\"" + TEST_FILE_WITH_ERRORS + "\"")))) .andRespond(withSuccess()); } @@ -985,6 +1039,7 @@ public void expectGetStudiesMetadataIdsPrivateStudyUuid() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code /studies/$PRIVATE_STUDY_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -992,6 +1047,7 @@ public void expectGetStudiesMetadataIdsPrivateStudyUuid() { public void expectDeleteStudiesPrivateStudyUuid() { mockServer.expect(method(HttpMethod.DELETE)) .andExpect(requestTo("/studies/" + PRIVATE_STUDY_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } } @@ -1029,6 +1085,7 @@ public void expectHttpVoltageInitAny() { *
HTTP request
*
method = {@code DELETE}
*
uri = {@code http://voltage_init_parameters/parameters/$PARAMETERS_UUID}
+ *
header: userId = {@code $USER1}
*
HTTP response
*
status = {@code 200 OK}
* @@ -1037,6 +1094,7 @@ public void expectDeleteVoltageInitParametersParametersUuid() { mockServers.get(ParametersType.VOLTAGE_INIT_PARAMETERS) .expect(method(HttpMethod.DELETE)) .andExpect(requestTo("http://voltage_init_parameters/v1/parameters/" + PARAMETERS_UUID)) + .andExpect(header("userId", USER1)) .andRespond(withSuccess()); } } From 6bb598983cce11f343f6448f353b3325c4b634de Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Fri, 22 Sep 2023 15:00:48 +0200 Subject: [PATCH 14/14] fix test case with custom http status response --- .../gridsuite/explore/server/services/MockRemoteServices.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java index 3a85f489..59399ee2 100644 --- a/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java +++ b/src/test/java/org/gridsuite/explore/server/services/MockRemoteServices.java @@ -141,7 +141,7 @@ public void expectPostCasesTestIncorrectFile() { mockServer.expect(method(HttpMethod.POST)) .andExpect(requestTo(Matchers.startsWith("/cases"))) .andExpect(MockRestRequestMatchers.content().string(Matchers.containsString("filename=\"" + TEST_INCORRECT_FILE + "\""))) - .andRespond(withStatus(HttpStatus.CONFLICT).body("file with bad extension")); //TODO no content-type? + .andRespond(withStatus(HttpStatus.UNPROCESSABLE_ENTITY).body("file with bad extension")); //TODO no content-type? } /**