diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplate.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplate.java index 966bfa367..f16c6dc2d 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplate.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplate.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import org.lfenergy.compas.scl2007b4.model.*; +import org.lfenergy.compas.sct.commons.scl.ied.AbstractLNAdapter; import org.lfenergy.compas.sct.commons.util.SclConstructorHelper; import java.util.ArrayList; @@ -50,12 +51,25 @@ public class ResumedDataTemplate { @NonNull private DaTypeName daName = new DaTypeName(""); + /** + * Constructor + */ + public ResumedDataTemplate(AbstractLNAdapter lnAdapter, String doName, String daName) { + this.lnClass = lnAdapter.getLNClass(); + this.lnInst = lnAdapter.getLNInst(); + this.prefix = lnAdapter.getPrefix(); + this.lnType = lnAdapter.getLnType(); + this.doName = new DoTypeName(doName); + this.daName = new DaTypeName(daName); + } + /** * Copies summarized DataTypeTemplate information to another one + * * @param dtt input * @return Updated ResumedDataTemplate object */ - public static ResumedDataTemplate copyFrom(ResumedDataTemplate dtt){ + public static ResumedDataTemplate copyFrom(ResumedDataTemplate dtt) { ResumedDataTemplate resumedDataTemplate = new ResumedDataTemplate(); resumedDataTemplate.prefix = dtt.prefix; resumedDataTemplate.lnClass = dtt.lnClass; diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapter.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapter.java index 451e8d6a5..b48255600 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapter.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapter.java @@ -6,6 +6,7 @@ import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.ExtrefTarget; +import org.lfenergy.compas.sct.commons.dto.ResumedDataTemplate; import org.lfenergy.compas.sct.commons.dto.SclReportItem; import org.lfenergy.compas.sct.commons.scl.ObjectReference; import org.lfenergy.compas.sct.commons.scl.SclElementAdapter; @@ -109,36 +110,45 @@ public AbstractDAIAdapter toAdapter(TDAI childTDAI) { * @return a filled SclReportItem if an error occurs, empty SclReportItem otherwise */ public Optional updateDaiFromExtRef(List tExtRefs) { + Optional optionalSclReportItem; Optional tExtRefMinOptional = tExtRefs.stream().min(EXTREF_DESC_SUFFIX_COMPARATOR); - if (tExtRefMinOptional.isPresent() && extractDescSuffix(tExtRefMinOptional.get().getDesc()) == 1) { TExtRef tExtRefMin = tExtRefMinOptional.get(); - findDataAdapterByName(DA_NAME_SET_SRC_REF) - .orElse(addDAI(DA_NAME_SET_SRC_REF, true)) - .setVal(createInRefValNominalString(tExtRefMin)); + String valueSrcRef = createInRefValNominalString(tExtRefMin); + optionalSclReportItem = updateDAI(DA_NAME_SET_SRC_REF, valueSrcRef); if (tExtRefMin.isSetSrcCBName()) { - findDataAdapterByName(DA_NAME_SET_SRC_CB) - .orElse(addDAI(DA_NAME_SET_SRC_CB, true)) - .setVal(createInRefValTestString(tExtRefMin)); + String valueSrcCb = createInRefValTestString(tExtRefMin); + optionalSclReportItem = updateDAI(DA_NAME_SET_SRC_CB, valueSrcCb); } Optional tExtRefMaxOptional = tExtRefs.stream().max(EXTREF_DESC_SUFFIX_COMPARATOR); if (tExtRefMaxOptional.isPresent() && extractDescSuffix(tExtRefMaxOptional.get().getDesc()) > 1) { TExtRef tExtRefMax = tExtRefMaxOptional.get(); - findDataAdapterByName(DA_NAME_SET_TST_REF) - .orElse(addDAI(DA_NAME_SET_TST_REF, true)) - .setVal(createInRefValNominalString(tExtRefMax)); + String valueTstRef = createInRefValNominalString(tExtRefMax); + optionalSclReportItem = updateDAI(DA_NAME_SET_TST_REF, valueTstRef); if (tExtRefMax.isSetSrcCBName()) { - findDataAdapterByName(DA_NAME_SET_TST_CB) - .orElse(addDAI(DA_NAME_SET_TST_CB, true)) - .setVal(createInRefValTestString(tExtRefMax)); + String valueTstCb = createInRefValTestString(tExtRefMax); + optionalSclReportItem = updateDAI(DA_NAME_SET_TST_CB, valueTstCb); } } } else { - return Optional.of(SclReportItem.warning(getXPath(), "The DOI %s can't be bound with an ExtRef".formatted(getXPath()))); + optionalSclReportItem = Optional.of(SclReportItem.warning(getXPath(), "The DOI %s can't be bound with an ExtRef".formatted(getXPath()))); } + return optionalSclReportItem; + } + + private Optional updateDAI(String daName, String value) { + ResumedDataTemplate daiFilterSrcRef = new ResumedDataTemplate(getParentAdapter(), getName(), daName); + Optional foundDais = getParentAdapter().getDAI(daiFilterSrcRef, true).stream().findFirst(); + if (foundDais.isEmpty()) { + return Optional.of(SclReportItem.warning(getXPath() + "/DAI@name=\"" + daName + "\"/Val", "The DAI cannot be updated")); + } + ResumedDataTemplate filterForUpdate = foundDais.get(); + filterForUpdate.setVal(value); + getParentAdapter().updateDAI(filterForUpdate); return Optional.empty(); + } private static int extractDescSuffix(String desc) throws NumberFormatException { diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplateTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplateTest.java index 585484f4e..988f9e0b1 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplateTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplateTest.java @@ -8,9 +8,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.lfenergy.compas.scl2007b4.model.TFCEnum; -import org.lfenergy.compas.scl2007b4.model.TPredefinedCDCEnum; -import org.lfenergy.compas.scl2007b4.model.TVal; +import org.lfenergy.compas.scl2007b4.model.*; +import org.lfenergy.compas.sct.commons.scl.ied.LNAdapter; import java.util.List; import java.util.Map; @@ -275,4 +274,27 @@ void setVal_should_replace_reference_val(){ assertThat(rDTT.getDaName().getDaiValues()).hasSize(1) .isEqualTo(Map.of(0L, "newValue")); } + + @Test + void constructorTest() { + // Given + TLN tln = new TLN(); + tln.setLnType("T1"); + tln.getLnClass().add(TLLN0Enum.LLN_0.value()); + tln.setPrefix("P1"); + LNAdapter lnAdapter = new LNAdapter(null, tln); + // When + ResumedDataTemplate expected = new ResumedDataTemplate(lnAdapter, "do", "da"); + // Then + assertThat(expected.getLnClass()).isEqualTo(TLLN0Enum.LLN_0.value()); + assertThat(expected.getLnType()).isEqualTo("T1"); + assertThat(expected.getPrefix()).isEqualTo("P1"); + assertThat(expected.getDoName().getName()).isEqualTo("do"); + assertThat(expected.getDoName().getName()).isEqualTo("do"); + assertThat(expected.getDoName().getStructNames()).isEmpty(); + assertThat(expected.getDaName().getName()).isEqualTo("da"); + assertThat(expected.getDaName().getDaiValues()).isEmpty(); + assertThat(expected.getDaName().isValImport()).isFalse(); + assertThat(expected.getDaName().isUpdatable()).isFalse(); + } } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/SclServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/SclServiceTest.java index ca831e518..9a68a0073 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/SclServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/SclServiceTest.java @@ -1090,7 +1090,7 @@ private Optional getLDeviceStatusValue(SCL scl, String iedName, String ldI @ParameterizedTest(name = "{0}") @CsvSource({ "Test update setSrcRef Value,LD_WITH_1_InRef,InRef2,setSrcRef,IED_NAME1LD_WITH_1_InRef/PRANCR1.Do11.sdo11", - "Test update setSrcCB Value,LD_WITH_1_InRef,InRef2,setSrcCB,IED_NAME1LD_WITH_1_InRef/prefixANCR1.GSE1", + "Test update setSrcCB Value,LD_WITH_1_InRef,InRef2,setSrcCB,OLD_VAL", "Test update setSrcRef Value,LD_WITH_3_InRef,InRef3,setSrcRef,IED_NAME1LD_WITH_3_InRef/PRANCR1.Do11.sdo11", "Test update setSrcCB Value,LD_WITH_3_InRef,InRef3,setSrcCB,IED_NAME1LD_WITH_3_InRef/prefixANCR1.GSE1", "Test update setTstRef Value,LD_WITH_3_InRef,InRef3,setTstRef,IED_NAME1LD_WITH_3_InRef/PRANCR1.Do11.sdo11", @@ -1105,6 +1105,7 @@ void updateDoInRef_shouldReturnUpdatedFile(String testName, String ldInst, Strin // Then assertThat(sclReport.isSuccess()).isTrue(); + SclTestMarshaller.assertIsMarshallable(sclReport.getSclRootAdapter().currentElem); assertThat(getValFromDaiName(sclReport.getSclRootAdapter().getCurrentElem(), "IED_NAME1", ldInst, doName, daName) .map(TVal::getValue)) .hasValue(expected); @@ -1208,6 +1209,4 @@ void analyzeDataGroups_should_return_errors_messages() { "There are too much GOOSE Control Blocks for the IED IED_NAME2: 3 > 2 max", "There are too much SMV Control Blocks for the IED IED_NAME2: 3 > 1 max"); } - - } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapterTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapterTest.java index fd02a8617..0aa5081a0 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapterTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/DOIAdapterTest.java @@ -7,6 +7,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.assertj.core.groups.Tuple; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.DaTypeName; import org.lfenergy.compas.sct.commons.dto.DoTypeName; @@ -15,6 +16,7 @@ import org.lfenergy.compas.sct.commons.scl.SclRootAdapter; import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; import org.lfenergy.compas.sct.commons.util.CommonConstants; +import org.mockito.junit.jupiter.MockitoExtension; import java.util.*; @@ -22,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.lfenergy.compas.sct.commons.util.SclConstructorHelper.newVal; +@ExtendWith(MockitoExtension.class) class DOIAdapterTest { @Test @@ -183,7 +186,7 @@ void DAIAdapter_update_when_valImport_is_set_to_false_but_da_is_Mod_StVal_should } @Test - void testFindDeepestMatch() throws Exception { + void testFindDeepestMatch() { // Given SCL scd = SclTestMarshaller.getSCLFromFile("/ied-test-schema-conf/ied_unit_test.xml"); SclRootAdapter sclRootAdapter = new SclRootAdapter(scd); @@ -215,7 +218,6 @@ void testFindDeepestMatch() throws Exception { assertThat(pair.getLeft()).isInstanceOf(SDIAdapter.DAIAdapter.class); } - private DOIAdapter.DAIAdapter initInnerDAIAdapter(String doName, String daName) { TDOI tdoi = new TDOI(); tdoi.setName(doName); @@ -302,8 +304,7 @@ void findDataAdapterByName_should_return_DAIAdapter_when_DA_name_dont_exist() { @Test void updateDaiFromExtRef_should_update_setSrcXX_values_when_ExtRef_desc_suffix_ends_with_1() { // Given - DOIAdapter.DAIAdapter daiAdapter = initInnerDAIAdapter("Do", "da"); - DOIAdapter doiAdapter = daiAdapter.getParentAdapter(); + DOIAdapter doiAdapter = createDOIAdapterInScl(); TDAI daiSrcRef = new TDAI(); daiSrcRef.setName(DOIAdapter.DA_NAME_SET_SRC_REF); TDAI daiSrcCb = new TDAI(); @@ -331,8 +332,7 @@ private static Optional getDaiValOfDoi(DOIAdapter doiAdapter, String daNam @Test void updateDaiFromExtRef_should_update_setSrcRef_value_but_not_setSrcCB_when_ExtRef_dont_contains_CB() { // Given - DOIAdapter.DAIAdapter daiAdapter = initInnerDAIAdapter("Do", "da"); - DOIAdapter doiAdapter = daiAdapter.getParentAdapter(); + DOIAdapter doiAdapter = createDOIAdapterInScl(); TDAI daiSrcRef = new TDAI(); daiSrcRef.setName(DOIAdapter.DA_NAME_SET_SRC_REF); doiAdapter.getCurrentElem().getSDIOrDAI().add(daiSrcRef); @@ -353,8 +353,7 @@ void updateDaiFromExtRef_should_update_setSrcRef_value_but_not_setSrcCB_when_Ext @Test void updateDaiFromExtRef_should_update_setSrcXX_and_setTstXX_values_when_ExtRef_desc_suffix_ends_with_1_and_3() { // Given - DOIAdapter.DAIAdapter daiAdapter = initInnerDAIAdapter("Do", "da"); - DOIAdapter doiAdapter = daiAdapter.getParentAdapter(); + DOIAdapter doiAdapter = createDOIAdapterInScl(); TDAI daiSrcRef = new TDAI(); daiSrcRef.setName(DOIAdapter.DA_NAME_SET_SRC_REF); doiAdapter.getCurrentElem().getSDIOrDAI().add(daiSrcRef); @@ -406,8 +405,7 @@ private static TExtRef givenExtRef(int num, boolean withCbName) { @Test void updateDaiFromExtRef_should_update_only_setSrcRef_and_setTstRef_values_when_ExtRef_desc_suffix_ends_with_1_and_3_without_CB() { // Given - DOIAdapter.DAIAdapter daiAdapter = initInnerDAIAdapter("Do", "da"); - DOIAdapter doiAdapter = daiAdapter.getParentAdapter(); + DOIAdapter doiAdapter = createDOIAdapterInScl(); TDAI daiSrcRef = new TDAI(); daiSrcRef.setName(DOIAdapter.DA_NAME_SET_SRC_REF); doiAdapter.getCurrentElem().getSDIOrDAI().add(daiSrcRef); @@ -468,8 +466,7 @@ void updateDaiFromExtRef_should_return_warning_report_when_none_ExtRef_endin_wit @Test void updateDaiFromExtRef_should_create_DAI_when_no_DAI_name_setSrcRef() { // Given - DOIAdapter.DAIAdapter daiAdapter = initInnerDAIAdapter("Do", "da"); - DOIAdapter doiAdapter = daiAdapter.getParentAdapter(); + DOIAdapter doiAdapter = createDOIAdapterInScl(); TExtRef extRef1 = givenExtRef(1, false); @@ -504,8 +501,7 @@ void updateDaiFromExtRef_should_return_filled_ReportItem_when_no_ExtRef_in_LNode @Test void updateDaiFromExtRef_should_compose_correct_name_when_optional_ExtRef_attributes_are_missing() { // Given - DOIAdapter.DAIAdapter daiAdapter = initInnerDAIAdapter("Do", "da"); - DOIAdapter doiAdapter = daiAdapter.getParentAdapter(); + DOIAdapter doiAdapter = createDOIAdapterInScl(); TDAI daiSrcRef = new TDAI(); daiSrcRef.setName(DOIAdapter.DA_NAME_SET_SRC_REF); doiAdapter.getCurrentElem().getSDIOrDAI().add(daiSrcRef); @@ -569,4 +565,65 @@ void updateDaiFromExtRef_should_throw_exception_when_ExtRef_desc_dont_end_with__ assertThatThrownBy(() -> doiAdapter.updateDaiFromExtRef(extRefList)) .isInstanceOf(NumberFormatException.class); } + + private DOIAdapter createDOIAdapterInScl() { + TDOI tdoi = new TDOI(); + tdoi.setName("InRef"); + + LN0 ln0 = new LN0(); + ln0.setLnType("T1"); + ln0.getDOI().add(tdoi); + TLDevice tlDevice = new TLDevice(); + tlDevice.setInst("Inst"); + tlDevice.setLN0(ln0); + TServer tServer = new TServer(); + tServer.getLDevice().add(tlDevice); + TAccessPoint tAccessPoint = new TAccessPoint(); + tAccessPoint.setName("AP_NAME"); + tAccessPoint.setServer(tServer); + TIED tied = new TIED(); + tied.setName("IED_NAME"); + tied.getAccessPoint().add(tAccessPoint); + //SCL file + SCL scd = new SCL(); + scd.getIED().add(tied); + THeader tHeader = new THeader(); + tHeader.setRevision("1"); + scd.setHeader(tHeader); + // DataTypeTemplate + TLNodeType tlNodeType = new TLNodeType(); + tlNodeType.setId("T1"); + tlNodeType.getLnClass().add("LLN0"); + TDO tdo = new TDO(); + tdo.setName("InRef"); + tdo.setType("REF"); + tlNodeType.getDO().add(tdo); + TDOType tdoType = new TDOType(); + tdoType.setId("REF"); + TDA tda1 = createDa(DOIAdapter.DA_NAME_SET_SRC_REF); + TDA tda2 = createDa(DOIAdapter.DA_NAME_SET_SRC_CB); + TDA tda3 = createDa(DOIAdapter.DA_NAME_SET_TST_REF); + TDA tda4 = createDa(DOIAdapter.DA_NAME_SET_TST_CB); + tdoType.getSDOOrDA().addAll(List.of(tda1, tda2, tda3, tda4)); + + TDataTypeTemplates tDataTypeTemplates = new TDataTypeTemplates(); + tDataTypeTemplates.getLNodeType().add(tlNodeType); + tDataTypeTemplates.getDOType().add(tdoType); + scd.setDataTypeTemplates(tDataTypeTemplates); + + SclRootAdapter sclRootAdapter = new SclRootAdapter(scd); + LN0Adapter ln0Adapter = sclRootAdapter.getIEDAdapterByName("IED_NAME").getLDeviceAdapterByLdInst("Inst").getLN0Adapter(); + + DOIAdapter doiAdapter = new DOIAdapter(ln0Adapter, tdoi); + return doiAdapter; + } + + private TDA createDa(String daName) { + TDA tda1 = new TDA(); + tda1.setName(daName); + tda1.setValImport(true); + tda1.setBType(TPredefinedBasicTypeEnum.OBJ_REF); + tda1.setFc(TFCEnum.SP); + return tda1; + } } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/LN0AdapterTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/LN0AdapterTest.java index 0829dbcba..f7b9a243b 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/LN0AdapterTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/LN0AdapterTest.java @@ -29,8 +29,7 @@ import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Named.named; import static org.lfenergy.compas.scl2007b4.model.TSampledValueControl.SmvOpts; -import static org.lfenergy.compas.sct.commons.testhelpers.SclHelper.findLn0; -import static org.lfenergy.compas.sct.commons.testhelpers.SclHelper.getDaiValue; +import static org.lfenergy.compas.sct.commons.testhelpers.SclHelper.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -312,17 +311,17 @@ void testGetDOIAdapters() { @Test void findDoiAdapterByName_should_find_DOI(){ // Given - LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi1"); + LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi2"); // When - Optional result = ln0Adapter.findDoiAdapterByName("doi1"); + Optional result = ln0Adapter.findDoiAdapterByName("doi2"); // Then - assertThat(result).map(DOIAdapter::getName).hasValue("doi1"); + assertThat(result).map(DOIAdapter::getName).hasValue("doi2"); } @Test void findDoiAdapterByName_should_return_empty(){ // Given - LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi1"); + LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi3"); // When Optional result = ln0Adapter.findDoiAdapterByName("doi2"); // Then @@ -332,17 +331,17 @@ void findDoiAdapterByName_should_return_empty(){ @Test void getDOIAdapterByName_should_return_DOI(){ // Given - LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi1"); + LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi4"); // When - DOIAdapter result = ln0Adapter.getDOIAdapterByName("doi1"); + DOIAdapter result = ln0Adapter.getDOIAdapterByName("doi4"); // Then - assertThat(result.getName()).isEqualTo("doi1"); + assertThat(result.getName()).isEqualTo("doi4"); } @Test void getDOIAdapterByName_should_throw_exception(){ // Given - LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi1"); + LN0Adapter ln0Adapter = createLn0AdapterWithDoi("doi5"); // When & Then assertThatThrownBy(() -> ln0Adapter.getDOIAdapterByName("doi2")) .isInstanceOf(ScdException.class); @@ -1052,7 +1051,42 @@ void updateDoInRef_should_update_setSrcRef_and_setSrcCB_and_setTstRef_and_setTst } @Test - void streamControlBlocks_should_return_all_GSEControlBlocks(){ + void updateDoInRef_should_not_update_setSrcRef_and_setSrcCB_and_setTstRef_and_setTstCB_when_ExtRef_desc_matches_and_dais_not_updatable() { + // Given + SCL scd = SclTestMarshaller.getSCLFromFile("/scd-test-update-inref/scd_update_inref_test.xml"); + SclRootAdapter sclRootAdapter = new SclRootAdapter(scd); + LN0Adapter sourceLn0 = findLn0(sclRootAdapter, "IED_NAME1", "LD_WITH_3_InRef"); + String doiNameInRef = "InRef3"; + findDai(sourceLn0, "InRef3" + "." + DOIAdapter.DA_NAME_SET_SRC_REF).update(0L, "OLD_VAL"); + findDai(sourceLn0, "InRef3" + "." + DOIAdapter.DA_NAME_SET_TST_REF).update(0L, "OLD_VAL"); + findDai(sourceLn0, "InRef3" + "." + DOIAdapter.DA_NAME_SET_SRC_REF).getCurrentElem().setValImport(false); + findDai(sourceLn0, "InRef3" + "." + DOIAdapter.DA_NAME_SET_SRC_CB).getCurrentElem().setValImport(false); + findDai(sourceLn0, "InRef3" + "." + DOIAdapter.DA_NAME_SET_TST_REF).getCurrentElem().setValImport(false); + findDai(sourceLn0, "InRef3" + "." + DOIAdapter.DA_NAME_SET_TST_CB).getCurrentElem().setValImport(false); + String expectedVal = "OLD_VAL"; + + // When + List sclReportItems = sourceLn0.updateDoInRef(); + // Then + + String finalSetSrcRef = getDaiValue(sourceLn0, doiNameInRef, DOIAdapter.DA_NAME_SET_SRC_REF); + String finalSetSrcCB = getDaiValue(sourceLn0, doiNameInRef, DOIAdapter.DA_NAME_SET_SRC_CB); + String finalSetTstRef = getDaiValue(sourceLn0, doiNameInRef, DOIAdapter.DA_NAME_SET_TST_REF); + String finalSetTstCB = getDaiValue(sourceLn0, doiNameInRef, DOIAdapter.DA_NAME_SET_TST_CB); + + assertThat(finalSetSrcRef).isEqualTo(expectedVal); + assertThat(finalSetSrcCB).isEqualTo(expectedVal); + assertThat(finalSetTstRef).isEqualTo(expectedVal); + assertThat(finalSetTstCB).isEqualTo(expectedVal); + assertThat(sclReportItems) + .hasSize(1) + .extracting(SclReportItem::getMessage) + .containsExactly("The DAI cannot be updated"); + } + + + @Test + void streamControlBlocks_should_return_all_GSEControlBlocks() { // Given IEDAdapter iedAdapter = mock(IEDAdapter.class); TLDevice tlDevice = new TLDevice(); diff --git a/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_issue_231_test_ok.xml b/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_issue_231_test_ok.xml index fbbbd0dfd..638411315 100644 --- a/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_issue_231_test_ok.xml +++ b/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_issue_231_test_ok.xml @@ -17,8 +17,8 @@ LD_WITH_1_InRef_DOI_InRef2 - - + + OLD_VAL @@ -41,11 +41,11 @@ LD_WITH_3_InRef_DOI_InRef3 - + OLD_VAL - - + + OLD_VAL @@ -138,6 +138,7 @@ + @@ -146,10 +147,10 @@ - - - - + + + + diff --git a/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_test.xml b/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_test.xml index 3a26f7493..8cc947077 100644 --- a/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_test.xml +++ b/sct-commons/src/test/resources/scd-test-update-inref/scd_update_inref_test.xml @@ -27,7 +27,7 @@ LD_WITH_1_InRef_DOI_InRef2 - + OLD_VAL @@ -51,11 +51,11 @@ LD_WITH_3_InRef_DOI_InRef3 - + OLD_VAL - - + + OLD_VAL @@ -132,12 +132,12 @@ LD_WITH_1_InRef_without_cbName_DOI_InRef7 - + OLD_VAL - - + + - + + + + + + + + - - - - - - - - + + + + + + \ No newline at end of file