diff --git a/src/main/java/org/gridsuite/modification/server/CompositeController.java b/src/main/java/org/gridsuite/modification/server/CompositeController.java index 88772e6ac..ab4367a12 100644 --- a/src/main/java/org/gridsuite/modification/server/CompositeController.java +++ b/src/main/java/org/gridsuite/modification/server/CompositeController.java @@ -88,9 +88,10 @@ public ResponseEntity createNetworkCompositeModification(@Parameter(descri @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The reference left in place of the composite modification")}) public ResponseEntity extractCompositeModificationToShare( @PathVariable("uuid") UUID compositeModificationUuid, - @Parameter(description = "Group the composite modification belongs to", required = true) @RequestParam("groupUuid") UUID groupUuid, - @Parameter(description = "New name of the shared composite modification") @RequestParam(value = "name", required = false) String name) { - return ResponseEntity.ok().body(networkModificationService.extractCompositeModificationToShare(groupUuid, compositeModificationUuid, name)); + @Parameter(description = "Group owning the composite modification", required = true) @RequestParam("groupUuid") UUID groupUuid, + @Parameter(description = "New name of the shared composite modification") @RequestParam(value = "name", required = false) String name, + @Parameter(description = "New name of the shared composite modification") @RequestParam(value = "description", required = false) String description) { + return ResponseEntity.ok().body(networkModificationService.extractCompositeModificationToShare(groupUuid, compositeModificationUuid, name, description)); } @GetMapping(value = "/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE) @@ -125,8 +126,9 @@ public ResponseEntity> duplicateCompositeModifications(@Paramete @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The composite modification has been updated")}) public ResponseEntity updateNetworkCompositeModification( @PathVariable("uuid") UUID compositeModificationUuid, - @Parameter(description = "New composite name") @RequestParam(value = "name", required = false) String name) { - networkModificationService.updateCompositeModification(compositeModificationUuid, name); + @Parameter(description = "New composite name") @RequestParam(value = "name", required = false) String name, + @Parameter(description = "New composite description") @RequestParam(value = "description", required = false) String description) { + networkModificationService.updateCompositeModification(compositeModificationUuid, name, description); return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index a6bb5654c..c1a98bb65 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -13,6 +13,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import org.gridsuite.modification.dto.ModificationInfos; +import org.gridsuite.modification.dto.ModificationReferenceInfos; import org.gridsuite.modification.modifications.AbstractModification; import org.gridsuite.modification.server.dto.*; import org.gridsuite.modification.server.dto.catalog.LineTypeInfos; @@ -327,8 +328,13 @@ public ResponseEntity hasModificationReferences( @ApiResponse(responseCode = "200", description = "The metadata of the network modifications has been successfully updated") public ResponseEntity updateNetworkModificationMetadata( @Parameter(description = "Network modifications UUIDs") @RequestParam("uuids") List networkModificationUuids, + @Parameter(description = "User id") @RequestParam("userId") String userId, @RequestBody ModificationInfos metadata) { - networkModificationService.updateNetworkModificationMetadata(networkModificationUuids, metadata); + if (metadata instanceof ModificationReferenceInfos modificationReferenceInfos) { + networkModificationService.updateModificationReferencedMetadata(networkModificationUuids, modificationReferenceInfos, userId); + } else { + networkModificationService.updateNetworkModificationMetadata(networkModificationUuids, metadata); + } return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/ElementAttributes.java b/src/main/java/org/gridsuite/modification/server/dto/ElementAttributes.java new file mode 100644 index 000000000..54831242c --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/ElementAttributes.java @@ -0,0 +1,24 @@ +/* + Copyright (c) 2026, 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.modification.server.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author Mathieu Deharbe + */ +@Getter +@AllArgsConstructor +public class ElementAttributes { + private String elementName; + private String description; + + public static ElementAttributes createElementAttributes(String elementName, String description) { + return new ElementAttributes(elementName, description); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/repositories/CompositeModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/CompositeModificationRepository.java index e1a94f6fc..f8f678f6f 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/CompositeModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/CompositeModificationRepository.java @@ -36,6 +36,11 @@ default void renameCompositeModification(CompositeModificationEntity compositeEn compositeEntity.setMessageValues(MAPPER.writeValueAsString(compositeEntity.toModificationInfos().getMapMessageValues())); } + @SneakyThrows + default void changeDescriptionOfCompositeModification(CompositeModificationEntity compositeEntity, String description) { + compositeEntity.setDescription(description); + } + @SneakyThrows default void generateModificationMessage(ModificationInfos modificationInfos) { if (modificationInfos.getMessageType() == null) { diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 0dfe85cc2..8c0f8c2fc 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -19,10 +19,7 @@ import org.gridsuite.modification.dto.tabular.TabularCreationInfos; import org.gridsuite.modification.dto.tabular.TabularModificationInfos; import org.gridsuite.modification.modifications.AbstractModification; -import org.gridsuite.modification.server.dto.CompositeInfos; -import org.gridsuite.modification.server.dto.ModificationContainerInfos; -import org.gridsuite.modification.server.dto.ModificationMetadata; -import org.gridsuite.modification.server.dto.ModificationReferenceData; +import org.gridsuite.modification.server.dto.*; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; import org.gridsuite.modification.server.entities.*; import org.gridsuite.modification.server.entities.equipment.modification.EquipmentModificationEntity; @@ -191,12 +188,15 @@ public void replaceCompositeModification(@NonNull UUID compositeUuid, @NonNull S compositeModificationRepository.renameCompositeModification(compositeEntity, name); } - public void updateCompositeModification(@NonNull UUID compositeUuid, String name) { + public void updateCompositeModification(@NonNull UUID compositeUuid, String name, String description) { CompositeModificationEntity compositeEntity = compositeModificationRepository.findById(compositeUuid) .orElseThrow(() -> getModificationNotFoundException(compositeUuid.toString())); if (name != null) { compositeModificationRepository.renameCompositeModification(compositeEntity, name); } + if (description != null) { + compositeModificationRepository.changeDescriptionOfCompositeModification(compositeEntity, description); + } } private List saveModificationsNonTransactional(@NonNull UUID groupUuid, List modifications) { @@ -552,7 +552,7 @@ private ModificationInfos loadModificationReference(ModificationEntity modificat .date(modificationEntity.getDate()) .stashed(modificationEntity.getStashed()) .activated(modificationEntity.getActivated()) - .description(modificationEntity.getDescription()) + .description(referencedEntity.getDescription()) .messageType(referencedEntity.getMessageType()) .messageValues(referencedEntity.getMessageValues()) .referencedId(referencedEntity.getId()) @@ -1022,6 +1022,31 @@ public void updateNetworkModificationMetadata(@NonNull List modificationUu } } + @Transactional + public Map updateModificationReferencedMetadata(@NonNull List modificationUuids, @NonNull ModificationReferenceInfos metadata) { + Map modificationToBeUpdatedInDirectory = new HashMap<>(); + for (UUID modificationUuid : modificationUuids) { + ModificationEntity modificationEntity = this.modificationRepository + .findById(modificationUuid) + .orElseThrow(() -> getModificationNotFoundException(modificationUuid.toString())); + if (metadata.getDescription() != null) { + // we need to update the referenced modification contained in the modificationEntity + assert modificationEntity instanceof ModificationReferenceEntity; + ModificationReferenceEntity modificationReferenceEntity = (ModificationReferenceEntity) modificationEntity; + ModificationEntity referencedModificationEntity = this.modificationRepository + .findById(modificationReferenceEntity.getReferencedId()) + .orElseThrow(() -> getModificationNotFoundException(modificationUuid.toString())); + referencedModificationEntity.setDescription(metadata.getDescription()); + modificationToBeUpdatedInDirectory.put(referencedModificationEntity.getId(), + new ElementAttributes(null, metadata.getDescription())); + } + if (metadata.getActivated() != null) { + updateActivated(modificationEntity, metadata.getActivated()); + } + } + return modificationToBeUpdatedInDirectory; + } + // TODO remove when activation for a sub modification (composite) is implemented : no need optimized load private void updateActivated(ModificationEntity entity, boolean activated) { entity.setActivated(activated); @@ -1348,7 +1373,7 @@ public List insertCompositeModifications( * @return the reference left in place of the composite modification */ @Transactional - public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name) { + public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name, String description) { getModificationGroup(groupUuid); // check if group exists ModificationEntity modificationEntity = getModificationEntity(modificationUuid); if (!(modificationEntity instanceof CompositeModificationEntity compositeEntity)) { @@ -1376,6 +1401,9 @@ public ModificationReferenceData extractCompositeModificationToShare(@NonNull UU if (name != null) { compositeModificationRepository.renameCompositeModification(compositeEntity, name); } + if (description != null) { + compositeModificationRepository.changeDescriptionOfCompositeModification(compositeEntity, description); + } return new ModificationReferenceData(referenceEntity.getId(), modificationUuid, containerEntity.isComposite() ? containerEntity.getId() : null); } diff --git a/src/main/java/org/gridsuite/modification/server/service/DirectoryService.java b/src/main/java/org/gridsuite/modification/server/service/DirectoryService.java index d513404e4..a9275308d 100644 --- a/src/main/java/org/gridsuite/modification/server/service/DirectoryService.java +++ b/src/main/java/org/gridsuite/modification/server/service/DirectoryService.java @@ -9,6 +9,7 @@ import lombok.Getter; import lombok.NonNull; import lombok.Setter; +import org.gridsuite.modification.server.dto.ElementAttributes; import org.gridsuite.modification.server.dto.ReferenceAttributes; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; @@ -23,6 +24,7 @@ */ @Service public class DirectoryService { + private static final String DIRECTORY_API_VERSION = "v1"; private static final String DELIMITER = "/"; public static final String HEADER_USER_ID = "userId"; @@ -33,11 +35,26 @@ public class DirectoryService { private final RestClient restClient; public DirectoryService(@Value("${gridsuite.services.directory-server.base-uri:http://directory-server/}") String directoryServerBaseUri, - RestClient restClient) { + RestClient restClient) { setDirectoryServerBaseUri(directoryServerBaseUri); this.restClient = restClient; } + public void updateElement(@NonNull UUID elementUuid, @NonNull ElementAttributes elementAttributes, String userId) { + var path = UriComponentsBuilder.fromPath( + DELIMITER + DIRECTORY_API_VERSION + DELIMITER + "elements/{elementUuid}") + .buildAndExpand(elementUuid) + .toUriString(); + + restClient.put() + .uri(getDirectoryServerBaseUri() + path) + .contentType(MediaType.APPLICATION_JSON) + .header(HEADER_USER_ID, userId) + .body(elementAttributes) + .retrieve() + .toBodilessEntity(); + } + /** * updates a reference from a shared modification in directory server so it points to a new container. * the row to update is identified by elementUuid (the referenced shared element) and referenceUuid (the modification-reference itself) diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 4fba2a475..5134133a1 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -20,10 +20,7 @@ import org.apache.commons.lang3.StringUtils; import org.gridsuite.filter.AbstractFilter; import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.dto.CompositeModificationInfos; -import org.gridsuite.modification.dto.EquipmentModificationInfos; -import org.gridsuite.modification.dto.GenerationDispatchInfos; -import org.gridsuite.modification.dto.ModificationInfos; +import org.gridsuite.modification.dto.*; import org.gridsuite.modification.error.NetworkModificationException; import org.gridsuite.modification.modifications.AbstractModification; import org.gridsuite.modification.server.dto.*; @@ -81,6 +78,8 @@ public class NetworkModificationService { private final FilterService filterService; + private final DirectoryService directoryService; + static final String NETWORK_UUID = "networkUuid.keyword"; static final String CREATED_EQUIPMENT_IDS = "createdEquipmentIds.fullascii"; static final String MODIFIED_EQUIPMENT_IDS = "modifiedEquipmentIds.fullascii"; @@ -97,7 +96,8 @@ public NetworkModificationService(NetworkStoreService networkStoreService, ModificationApplicationInfosService applicationInfosService, ElasticsearchOperations elasticsearchOperations, ModificationRepository modificationRepository, - FilterService filterService) { + FilterService filterService, + DirectoryService directoryService) { this.networkStoreService = networkStoreService; this.networkModificationRepository = networkModificationRepository; this.equipmentInfosService = equipmentInfosService; @@ -108,6 +108,7 @@ public NetworkModificationService(NetworkStoreService networkStoreService, this.elasticsearchOperations = elasticsearchOperations; this.modificationRepository = modificationRepository; this.filterService = filterService; + this.directoryService = directoryService; } public List getModificationGroups() { @@ -281,6 +282,16 @@ public void updateNetworkModificationMetadata(@NonNull List modificationUu networkModificationRepository.updateNetworkModificationMetadata(modificationUuids, metadata); } + @Transactional + public void updateModificationReferencedMetadata(@NonNull List modificationUuids, @NonNull ModificationReferenceInfos metadata, String userId) { + Map test = networkModificationRepository.updateModificationReferencedMetadata(modificationUuids, metadata); + if (!test.isEmpty()) { + test.forEach((elementUuid, elementAttributes) -> + directoryService.updateElement(elementUuid, elementAttributes, userId)); + } + + } + @Transactional public void updateRootNetworkApplicability(@NonNull List modificationUuids, @NonNull String rootNetworkTag, boolean applicable) { assertRootNetworkTagFits(rootNetworkTag); @@ -568,8 +579,8 @@ public UUID createNetworkCompositeModification(@NonNull List modificationU } @Transactional - public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name) { - return networkModificationRepository.extractCompositeModificationToShare(groupUuid, modificationUuid, name); + public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name, String description) { + return networkModificationRepository.extractCompositeModificationToShare(groupUuid, modificationUuid, name, description); } public Map duplicateCompositeModifications(List sourceModificationUuids) { @@ -577,8 +588,8 @@ public Map duplicateCompositeModifications(List sourceModifica } @Transactional - public void updateCompositeModification(@NonNull UUID compositeUuid, String name) { - networkModificationRepository.updateCompositeModification(compositeUuid, name); + public void updateCompositeModification(@NonNull UUID compositeUuid, String name, String description) { + networkModificationRepository.updateCompositeModification(compositeUuid, name, description); } @Transactional diff --git a/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java b/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java index 8fbbd1601..c3b3722ce 100644 --- a/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/CompositeControllerTest.java @@ -18,11 +18,7 @@ import org.gridsuite.modification.dto.EquipmentAttributeModificationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.ModificationReferenceInfos; -import org.gridsuite.modification.server.dto.ActionType; -import org.gridsuite.modification.server.dto.CompositeInfos; -import org.gridsuite.modification.server.dto.ModificationReferenceData; -import org.gridsuite.modification.server.dto.NetworkModificationResult; -import org.gridsuite.modification.server.dto.NetworkModificationsResult; +import org.gridsuite.modification.server.dto.*; import org.gridsuite.modification.server.entities.CompositeModificationEntity; import org.gridsuite.modification.server.entities.ModificationContainerType; import org.gridsuite.modification.server.entities.ModificationEntity; @@ -31,6 +27,7 @@ import org.gridsuite.modification.server.repositories.CompositeModificationRepository; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.repositories.NetworkModificationRepository; +import org.gridsuite.modification.server.service.DirectoryService; import org.gridsuite.modification.server.service.ReportService; import org.gridsuite.modification.server.utils.NetworkCreation; import org.gridsuite.modification.server.utils.TestUtils; @@ -99,6 +96,9 @@ class CompositeControllerTest { @MockitoBean private NetworkStoreService networkStoreService; + @MockitoBean + private DirectoryService directoryService; + private Network network; @BeforeEach @@ -439,6 +439,67 @@ void testExtractCompositeModificationToShare() throws Exception { .andExpect(status().isNotFound()); } + @Test + void testUpdateDescriptionOfSharedModification() throws Exception { + int modificationsNumber = 2; + List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, modificationsNumber); + + MvcResult mvcResult = mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE) + .queryParam("name", "composite name") + .queryParam("description", "composite description") + .content(mapper.writeValueAsString(modificationList.stream().map(ModificationInfos::getUuid).toList())) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); + UUID standaloneCompositeUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + + // the composite modification to share is inserted into the group, as a composite of its own + runRequestAsync( + mockMvc, + put(URI_COMPOSITE_NETWORK_MODIF_BASE + "/groups/" + TEST_GROUP_ID + "?action=INSERT") + .content(getJsonBodyModificationCompositeToBeInserted( + List.of(new CompositeInfos(standaloneCompositeUuid, "composite name", false, "composite description in the study")))) + .contentType(MediaType.APPLICATION_JSON), + status().isOk()); + ModificationInfos compositeInfos = networkModificationRepository.getModifications(TEST_GROUP_ID, true, true).getLast(); + assert compositeInfos instanceof CompositeModificationInfos; + assertEquals("composite description in the study", compositeInfos.getDescription()); + UUID compositeInGroupUuid = compositeInfos.getUuid(); + + mockMvc.perform(post(URI_COMPOSITE_NETWORK_MODIF_BASE + "/" + compositeInGroupUuid + "/share") + .queryParam("groupUuid", TEST_GROUP_ID.toString()) + .queryParam("name", "shared composite") + .queryParam("description", "shared description")) + .andExpect(status().isOk()) + .andReturn(); + + // the composite modification is shared as it was, keeping its own uuid, and a reference to it took its place + // in the group + List newModificationList = networkModificationRepository.getModifications(TEST_GROUP_ID, false, true); + assertEquals(modificationsNumber + 1, newModificationList.size()); + + ModificationReferenceInfos reference = assertInstanceOf(ModificationReferenceInfos.class, newModificationList.getLast()); + assertEquals(compositeInGroupUuid, reference.getReferencedId()); + assertEquals("shared composite", ((CompositeModificationInfos) reference.getReferencedInfos()).getName()); + assertEquals("shared description", reference.getReferencedInfos().getDescription()); + assertEquals(ModificationReferenceInfos.Type.BASIC, reference.getReferenceType()); + + // update metadata of shared composite + ModificationReferenceInfos metadata = new ModificationReferenceInfos(); + metadata.setDescription("new shared description"); + mockMvc.perform(put(URI_NETWORK_MODIF_BASE) + .queryParam("uuids", reference.getUuid().toString()) + .queryParam("userId", "userId") + .content(mapper.writeValueAsString(metadata)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); + + List updatedModificationList = networkModificationRepository.getModifications(TEST_GROUP_ID, false, true); + ModificationReferenceInfos updatedReference = assertInstanceOf(ModificationReferenceInfos.class, updatedModificationList.getLast()); + assertEquals("new shared description", updatedReference.getReferencedInfos().getDescription()); + } + @Test void testExtractNestedCompositeModificationToShare() throws Exception { // The tree is group -> composite P -> composite C -> composite G, built from the deepest one up, and we had some other modifications inside the composites diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index c43dc5259..0d39e53f6 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -489,6 +489,7 @@ void testDisableNetworkModifications() throws Exception { mockMvc.perform(put(URI_NETWORK_MODIF_BASE) .queryParam("groupUuid", TEST_GROUP_ID.toString()) .queryParam("uuids", uuidString) + .queryParam("userId", "userId") .content(mapper.writeValueAsString(metadata)) .contentType(MediaType.APPLICATION_JSON) ).andExpect(status().isOk()); @@ -588,6 +589,7 @@ void updateModificationDescription() throws Exception { mockMvc.perform(put(URI_NETWORK_MODIF_BASE) .queryParam("groupUuid", TEST_GROUP_ID.toString()) .queryParam("uuids", uuidString) + .queryParam("userId", "userId") .content(mapper.writeValueAsString(metadata)) .contentType(MediaType.APPLICATION_JSON) ).andExpect(status().isOk()); diff --git a/src/test/java/org/gridsuite/modification/server/service/DirectoryServiceTest.java b/src/test/java/org/gridsuite/modification/server/service/DirectoryServiceTest.java index 47e39a72a..a12bb248e 100644 --- a/src/test/java/org/gridsuite/modification/server/service/DirectoryServiceTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/DirectoryServiceTest.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.service; +import org.gridsuite.modification.server.dto.ElementAttributes; import org.gridsuite.modification.server.dto.ReferenceAttributes; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -18,7 +19,7 @@ import static org.gridsuite.modification.server.service.DirectoryService.HEADER_USER_ID; import static org.springframework.http.HttpMethod.PUT; import static org.springframework.test.web.client.match.MockRestRequestMatchers.*; -import static org.springframework.test.web.client.response.MockRestResponseCreators.*; +import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess; class DirectoryServiceTest { private static final String DIRECTORY_SERVER_BASE_URI = "http://directory-server-test"; @@ -60,6 +61,24 @@ void testUpdateElementReference() { directoryServer.verify(); } + @Test + void testUpdateElement() { + UUID elementUuid = UUID.randomUUID(); + String userId = "userId"; + ElementAttributes elementAttributes = ElementAttributes.createElementAttributes("name", "description"); + + String expectedUrl = DIRECTORY_SERVER_BASE_URI + "/v1/elements/" + elementUuid; + directoryServer.expect(requestTo(expectedUrl)) + .andExpect(method(PUT)) + .andExpect(header(HEADER_USER_ID, userId)) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andRespond(withSuccess()); + + directoryService.updateElement(elementUuid, elementAttributes, userId); + + directoryServer.verify(); + } + @Test void testCreateElementReference() { UUID elementUuid = UUID.randomUUID();