Skip to content

Commit 5a0d1ed

Browse files
author
Dennis Labordus
committed
Last unit tests.
Signed-off-by: Dennis Labordus <[email protected]>
1 parent 5690ac7 commit 5a0d1ed

File tree

4 files changed

+334
-5
lines changed

4 files changed

+334
-5
lines changed

src/compas/CompasSave.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,14 +188,20 @@ export default class CompasSaveElement extends CompasExistsIn(LitElement) {
188188
`;
189189
}
190190

191-
render(): TemplateResult {
191+
private renderLabelsPart(): TemplateResult {
192192
const sclElement = this.doc.documentElement;
193193
let privateElement = getPrivate(sclElement, COMPAS_SCL_PRIVATE_TYPE);
194194
if (!privateElement) {
195195
privateElement = createPrivate(sclElement, COMPAS_SCL_PRIVATE_TYPE);
196196
sclElement.prepend(privateElement);
197197
}
198198

199+
return html`<compas-labels-field
200+
.privateElement="${privateElement}"
201+
></compas-labels-field>`;
202+
}
203+
204+
render(): TemplateResult {
199205
return html`
200206
<wizard-divider></wizard-divider>
201207
<section>
@@ -210,9 +216,7 @@ export default class CompasSaveElement extends CompasExistsIn(LitElement) {
210216
<wizard-divider></wizard-divider>
211217
<section>
212218
<h3>${translate('compas.save.labelsTitle')}</h3>
213-
<compas-labels-field
214-
.privateElement="${privateElement}"
215-
></compas-labels-field>
219+
${this.renderLabelsPart()}
216220
</section>
217221
`;
218222
}
Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<SCL xmlns:compas="https://www.lfenergy.org/compas/extension/v1" xmlns="http://www.iec.ch/61850/2003/SCL" version="2007" revision="B" release="4">
3+
<Private type="compas_scl">
4+
<compas:SclName>ied_utrecht_station235</compas:SclName>
5+
<compas:SclFileType>CID</compas:SclFileType>
6+
</Private>
7+
<Header id="380b5e70-4753-4b59-b5b4-d51ceb26a30c" version="3.0.0" revision="Revision" toolID="toolID" nameStructure="IEDName"/>
8+
<IED name="IED_NAME">
9+
<AccessPoint name="AP_NAME">
10+
<Server>
11+
<Authentication/>
12+
<LDevice inst="LDPO">
13+
<LN0 lnClass="LLN0" inst="" lnType="LN2">
14+
<Inputs>
15+
<ExtRef intAddr="INTADDR" pDO="DO1" desc="DESC1"/>
16+
<ExtRef intAddr="INTADDR" pDO="DO2" desc="DESC2"/>
17+
</Inputs>
18+
</LN0>
19+
<LN lnClass="PIOC" inst="1" lnType="LN1">
20+
<Inputs>
21+
<ExtRef intAddr="INTADDR" pDO="DO1" desc="DESC1"/>
22+
<ExtRef intAddr="INTADDR" pDO="DO2" desc="DESC2"/>
23+
</Inputs>
24+
</LN>
25+
<LN lnClass="PIOC" inst="2" lnType="LN1">
26+
<Inputs>
27+
<ExtRef intAddr="INTADDR" pDO="DO1" desc="DESC1"/>
28+
<ExtRef intAddr="INTADDR" pDO="DO2" desc="DESC2"/>
29+
</Inputs>
30+
</LN>
31+
</LDevice>
32+
</Server>
33+
</AccessPoint>
34+
</IED>
35+
<DataTypeTemplates>
36+
<LNodeType lnClass="LLN0" id="LN2">
37+
<DO name="Beh" type="DO1" transient="false"/>
38+
<DO name="FACntRs" type="DO2" transient="true"/>
39+
<DO name="StrVal" type="DO3" transient="false"/>
40+
</LNodeType>
41+
<LNodeType lnClass="PIOC" id="LN1">
42+
<DO name="Beh" type="DO1" transient="false"/>
43+
<DO name="FACntRs" type="DO2" transient="true"/>
44+
<DO name="StrVal" type="DO3" transient="false"/>
45+
</LNodeType>
46+
<LNodeType lnClass="CSWI" id="LN3">
47+
<DO name="Mod" type="OpenSCD_ENCMod"/>
48+
<DO name="Beh" type="OpenSCD_ENSBeh"/>
49+
<DO name="Health" type="OpenSCD_ENSHealth"/>
50+
<DO name="NamPlt" type="OpenSCD_LPLnoLD"/>
51+
<DO name="LocKey" type="OpenSCD_SPSsimple"/>
52+
<DO name="Loc" type="OpenSCD_SPSsimple"/>
53+
<DO name="Pos" type="OpenSCD_DPC"/>
54+
</LNodeType>
55+
<DOType cdc="WYE" id="DO1">
56+
<DA fc="DC" dchg="false" qchg="false" dupd="false" name="dataNs" bType="VisString255">
57+
<Val>IEC 61850-7-3:2007B</Val>
58+
</DA>
59+
<DA fc="CF" dchg="true" qchg="false" dupd="false" name="smpRate" bType="INT32U"/>
60+
</DOType>
61+
<DOType cdc="WYE" id="DO2">
62+
<SDO name="phsBHar" type="DO4"/>
63+
<DA fc="CF" dchg="true" qchg="false" dupd="true" name="angRef" bType="Enum" type="PhaseAngleReferenceKind"/>
64+
</DOType>
65+
<DOType cdc="WYE" id="DO3">
66+
<SDO name="neutHar" type="DO4"/>
67+
<DA fc="CF" dchg="true" qchg="false" dupd="false" name="smpRate" bType="INT32U"/>
68+
<DA fc="ST" dchg="false" qchg="false" dupd="false" name="origin" bType="Struct" type="DA3"/>
69+
</DOType>
70+
<DOType cdc="WYE" id="DO4">
71+
<DA fc="DC" dchg="false" qchg="false" dupd="false" name="configRev" bType="VisString255" valKind="RO" valImport="false"/>
72+
</DOType>
73+
<DOType cdc="ENS" id="OpenSCD_ENCMod">
74+
<DA fc="ST" dchg="true" name="origin" bType="Enum" type="OpenSCD_Originator"/>
75+
<DA fc="ST" dchg="true" name="stVal" bType="Enum" type="BehaviourModeKind"/>
76+
<DA fc="ST" qchg="true" name="q" bType="Quality"/>
77+
<DA fc="ST" name="t" bType="Timestamp"/>
78+
<DA fc="CF" name="ctlModel" bType="Enum" type="CtlModelKind">
79+
<Val>sbo-with-enhanced-security</Val>
80+
</DA>
81+
<DA fc="CF" name="sboTimeout" bType="INT32U">
82+
<Val>30000</Val>
83+
</DA>
84+
<DA fc="CF" name="operTimeout" bType="INT32U">
85+
<Val>600</Val>
86+
</DA>
87+
<DA fc="CO" name="SBOw" bType="Struct" type="OpenSCD_OpenSBOw"/>
88+
<DA fc="CO" name="Oper" bType="Struct" type="OpenSCD_OpenSBOw"/>
89+
<DA fc="CO" name="Cancel" bType="Struct" type="OpenSCD_Cancel"/>
90+
</DOType>
91+
<DOType cdc="ENS" id="OpenSCD_ENSBeh">
92+
<DA fc="ST" dchg="true" name="stVal" bType="Enum" type="BehaviourModeKind"/>
93+
<DA fc="ST" qchg="true" name="q" bType="Quality"/>
94+
<DA fc="ST" name="t" bType="Timestamp"/>
95+
</DOType>
96+
<DOType cdc="ENS" id="OpenSCD_ENSHealth">
97+
<DA fc="ST" dchg="true" name="stVal" bType="Enum" type="HealthKind"/>
98+
<DA fc="ST" qchg="true" name="q" bType="Quality"/>
99+
<DA fc="ST" name="t" bType="Timestamp"/>
100+
</DOType>
101+
<DOType cdc="LPL" id="OpenSCD_LPLnoLD">
102+
<DA fc="DC" name="vendor" bType="VisString255" valKind="RO"/>
103+
<DA fc="DC" name="swRev" bType="VisString255" valKind="RO"/>
104+
<DA fc="DC" name="d" bType="VisString255" valKind="RO"/>
105+
<DA fc="DC" name="configRev" bType="VisString255" valKind="RO"/>
106+
</DOType>
107+
<DOType cdc="SPS" id="OpenSCD_SPSsimple">
108+
<DA fc="ST" dchg="true" name="stVal" bType="BOOLEAN"/>
109+
<DA fc="ST" qchg="true" name="q" bType="Quality"/>
110+
<DA fc="ST" name="t" bType="Timestamp"/>
111+
<DA fc="DC" name="d" bType="VisString255"/>
112+
</DOType>
113+
<DOType cdc="DPC" id="OpenSCD_DPC">
114+
<DA fc="ST" dchg="true" name="origin" bType="Enum" type="OpenSCD_Originator"/>
115+
<DA fc="ST" dchg="true" name="stVal" bType="Enum" type="BehaviourModeKind"/>
116+
<DA fc="ST" qchg="true" name="q" bType="Quality"/>
117+
<DA fc="ST" name="t" bType="Timestamp"/>
118+
<DA fc="CF" name="ctlModel" bType="Enum" type="CtlModelKind">
119+
<Val>sbo-with-enhanced-security</Val>
120+
</DA>
121+
<DA fc="CF" name="sboTimeout" bType="INT32U">
122+
<Val>30000</Val>
123+
</DA>
124+
<DA fc="CF" name="operTimeout" bType="INT32U">
125+
<Val>600</Val>
126+
</DA>
127+
<DA fc="CO" name="pulseConfig" bType="Struct" type="OpenSCD_PulseConfig"/>
128+
<DA fc="CO" name="SBOw" bType="Struct" type="OpenSCD_OpenSBOw"/>
129+
<DA fc="CO" name="Oper" bType="Struct" type="OpenSCD_OpenSBOw"/>
130+
<DA fc="CO" name="Cancel" bType="Struct" type="OpenSCD_Cancel"/>
131+
</DOType>
132+
<DAType id="DA1">
133+
<BDA name="operTm" bType="Timestamp"/>
134+
<BDA name="origin" bType="Struct" type="DA3"/>
135+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
136+
</DAType>
137+
<DAType id="DA2">
138+
<BDA name="T" bType="Timestamp"/>
139+
<BDA name="ctlVal" bType="Enum" type="RecCycModKind"/>
140+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
141+
</DAType>
142+
<DAType id="DA3">
143+
<BDA name="Check" bType="Check"/>
144+
<BDA name="Test" bType="BOOLEAN"/>
145+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
146+
</DAType>
147+
<DAType id="OpenSCD_Originator">
148+
<BDA name="orCat" bType="Enum" type="OriginatorCategoryKind"/>
149+
<BDA name="orIdent" bType="Octet64"/>
150+
</DAType>
151+
<DAType id="OpenSCD_OpenSBOw">
152+
<BDA name="ctlVal" bType="BOOLEAN"/>
153+
<BDA name="origin" bType="Struct" type="OpenSCD_Originator"/>
154+
<BDA name="ctlNum" bType="INT8U"/>
155+
<BDA name="T" bType="Timestamp"/>
156+
<BDA name="Test" bType="BOOLEAN"/>
157+
<BDA name="Check" bType="Check"/>
158+
<ProtNs>IEC 61850-8-1:2003</ProtNs>
159+
</DAType>
160+
<DAType id="OpenSCD_Cancel">
161+
<BDA name="ctlVal" bType="BOOLEAN"/>
162+
<BDA name="origin" bType="Struct" type="OpenSCD_Originator"/>
163+
<BDA name="ctlNum" bType="INT8U"/>
164+
<BDA name="T" bType="Timestamp"/>
165+
<BDA name="Test" bType="BOOLEAN"/>
166+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
167+
</DAType>
168+
<DAType id="OpenSCD_PulseConfig">
169+
<BDA name="cmdQual" bType="Enum" type="OutputSignalKind"/>
170+
<BDA name="onDur" bType="INT32U"/>
171+
<BDA name="offDur" bType="INT32U"/>
172+
<BDA name="numPls" bType="INT32U"/>
173+
</DAType>
174+
<EnumType id="RecCycModKind">
175+
<EnumVal ord="1">Completed</EnumVal>
176+
<EnumVal ord="2">Cancelled</EnumVal>
177+
<EnumVal ord="3">New adjustments</EnumVal>
178+
<EnumVal ord="4">AnotherValue</EnumVal>
179+
</EnumType>
180+
<EnumType id="PhaseAngleReferenceKind">
181+
<EnumVal ord="0">Va</EnumVal>
182+
<EnumVal ord="1">Vb</EnumVal>
183+
<EnumVal ord="2">Vc</EnumVal>
184+
<EnumVal ord="3">Aa</EnumVal>
185+
<EnumVal ord="4">Ab</EnumVal>
186+
<EnumVal ord="5">Ac</EnumVal>
187+
<EnumVal ord="6">Vab</EnumVal>
188+
<EnumVal ord="7">Vbc</EnumVal>
189+
<EnumVal ord="8">Vca</EnumVal>
190+
<EnumVal ord="9">AnotherValue</EnumVal>
191+
</EnumType>
192+
<EnumType id="OriginatorCategoryKind">
193+
<EnumVal ord="0">not-supported</EnumVal>
194+
<EnumVal ord="1">bay-control</EnumVal>
195+
<EnumVal ord="2">station-control</EnumVal>
196+
<EnumVal ord="3">remote-control</EnumVal>
197+
<EnumVal ord="4">automatic-bay</EnumVal>
198+
<EnumVal ord="5">automatic-station</EnumVal>
199+
<EnumVal ord="6">automatic-remote</EnumVal>
200+
<EnumVal ord="7">maintenance</EnumVal>
201+
<EnumVal ord="8">process</EnumVal>
202+
</EnumType>
203+
<EnumType id="BehaviourModeKind">
204+
<EnumVal ord="1">on</EnumVal>
205+
<EnumVal ord="2">blocked</EnumVal>
206+
<EnumVal ord="3">test</EnumVal>
207+
<EnumVal ord="4">test/blocked</EnumVal>
208+
<EnumVal ord="5">off</EnumVal>
209+
</EnumType>
210+
<EnumType id="CtlModelKind">
211+
<EnumVal ord="0">status-only</EnumVal>
212+
<EnumVal ord="1">direct-with-normal-security</EnumVal>
213+
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
214+
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
215+
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
216+
</EnumType>
217+
<EnumType id="HealthKind">
218+
<EnumVal ord="1">Ok</EnumVal>
219+
<EnumVal ord="2">Warning</EnumVal>
220+
<EnumVal ord="3">Alarm</EnumVal>
221+
</EnumType>
222+
<EnumType id="OutputSignalKind">
223+
<EnumVal ord="0">pulse</EnumVal>
224+
<EnumVal ord="1">persistent</EnumVal>
225+
<EnumVal ord="2">persistent-feedback</EnumVal>
226+
</EnumType>
227+
</DataTypeTemplates>
228+
</SCL>

test/unit/compas/CompasSave.test.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@ import { expect, fixtureSync, html, waitUntil } from '@open-wc/testing';
22
import sinon from 'sinon';
33

44
import { CompasExistsInElement } from '../../../src/compas/CompasExistsIn.js';
5+
import { CompasLabelsFieldElement } from '../../../src/compas/CompasLabelsField.js';
56
import CompasSaveElement from '../../../src/compas/CompasSave.js';
67

78
import '../../../src/compas/CompasSave.js';
89

10+
import { addLabel } from './CompasLabelsField.test';
11+
import { TextField } from '@material/mwc-textfield';
12+
913
describe('compas-save', () => {
1014
let element: CompasSaveElement & CompasExistsInElement;
1115
let doc: Document;
1216
const docName = 'station123.scd';
1317
const docId = '6a45ae97-5605-44f8-b4e6-25305bc6c036';
1418

1519
beforeEach(async () => {
16-
doc = await fetch('/test/testfiles/compas/test-scd.cid')
20+
doc = await fetch('/test/testfiles/compas/save-compas.scd')
1721
.then(response => response.text())
1822
.then(str => new DOMParser().parseFromString(str, 'application/xml'));
1923
});
@@ -54,6 +58,18 @@ describe('compas-save', () => {
5458
await waitUntil(() => element.existInCompas !== undefined);
5559
});
5660

61+
it('when the name textfield is rendered then the value will be the stripped filename', () => {
62+
const textField = <TextField>(
63+
element.shadowRoot!.querySelector('div#content > mwc-textfield#name')!
64+
);
65+
66+
expect(textField.value).to.be.equal('station123');
67+
});
68+
69+
it('when changing labels then SCL Document contains change', async () => {
70+
await validateAddingLabels();
71+
});
72+
5773
it('looks like the latest snapshot', async () => {
5874
await expect(element).shadowDom.to.equalSnapshot();
5975
});
@@ -77,6 +93,10 @@ describe('compas-save', () => {
7793
await waitUntil(() => element.existInCompas !== undefined);
7894
});
7995

96+
it('when changing labels then SCL Document contains change', async () => {
97+
await validateAddingLabels();
98+
});
99+
80100
it('looks like the latest snapshot', async () => {
81101
await expect(element).shadowDom.to.equalSnapshot();
82102
});
@@ -85,4 +105,22 @@ describe('compas-save', () => {
85105
afterEach(() => {
86106
sinon.restore();
87107
});
108+
109+
async function validateAddingLabels() {
110+
const labelsField = <CompasLabelsFieldElement>(
111+
element.shadowRoot!.querySelector('compas-labels-field')!
112+
);
113+
114+
await addLabel(labelsField, 'New Label');
115+
await element.updateComplete;
116+
117+
element['updateLabels']();
118+
119+
const labelElements = Array.from(
120+
element.doc.querySelectorAll(
121+
'SCL > Private[type="compas_scl"] > Labels > Label'
122+
)
123+
);
124+
expect(labelElements.length).to.be.equal(1);
125+
}
88126
});

0 commit comments

Comments
 (0)