From 26a5e76180759fb212d5485879f70c4711d71df4 Mon Sep 17 00:00:00 2001 From: Jakob Vogelsang Date: Thu, 16 Dec 2021 08:47:03 +0100 Subject: [PATCH] feat(zeroline/ied-editor): add show report action --- src/zeroline/ied-editor.ts | 24 +++++-- .../ied-editor-wizarding-integration.test.ts | 66 +++++++++++++++++++ .../__snapshots__/ied-editor.test.snap.js | 8 +++ test/unit/zeroline/ied-editor.test.ts | 11 ++++ 4 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 test/integration/zeroline/ied-editor-wizarding-integration.test.ts diff --git a/src/zeroline/ied-editor.ts b/src/zeroline/ied-editor.ts index bdff48db51..1d7ed473c9 100644 --- a/src/zeroline/ied-editor.ts +++ b/src/zeroline/ied-editor.ts @@ -13,9 +13,10 @@ import { Fab } from '@material/mwc-fab'; import '../action-icon.js'; import { createClientLnWizard } from '../wizards/clientln.js'; -import { gooseIcon } from '../icons.js'; +import { gooseIcon, reportIcon } from '../icons.js'; import { newWizardEvent } from '../foundation.js'; import { selectGseControlWizard } from '../wizards/gsecontrol.js'; +import { selectReportControlWizard } from '../wizards/reportcontrol.js'; /** [[`SubstationEditor`]] subeditor for a child-less `IED` element. */ @customElement('ied-editor') @@ -31,11 +32,8 @@ export class IedEditor extends LitElement { @query('.connectreport') connectReport!: Fab; - private openCommunicationMapping(): void { - const sendingIeds = Array.from( - this.element.closest('SCL')?.querySelectorAll('IED') ?? [] - ); - const wizard = createClientLnWizard(sendingIeds, this.element); + private openReportControlSelection(): void { + const wizard = selectReportControlWizard(this.element); if (wizard) this.dispatchEvent(newWizardEvent(wizard)); } @@ -44,6 +42,14 @@ export class IedEditor extends LitElement { if (wizard) this.dispatchEvent(newWizardEvent(wizard)); } + private openCommunicationMapping(): void { + const sendingIeds = Array.from( + this.element.closest('SCL')?.querySelectorAll('IED') ?? [] + ); + const wizard = createClientLnWizard(sendingIeds, this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + render(): TemplateResult { return html`${gooseIcon}${reportIcon} `; } diff --git a/test/integration/zeroline/ied-editor-wizarding-integration.test.ts b/test/integration/zeroline/ied-editor-wizarding-integration.test.ts new file mode 100644 index 0000000000..ba67a52b1e --- /dev/null +++ b/test/integration/zeroline/ied-editor-wizarding-integration.test.ts @@ -0,0 +1,66 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import '../../../src/zeroline/ied-editor.js'; +import { FilteredList } from '../../../src/filtered-list.js'; +import { IedEditor } from '../../../src/zeroline/ied-editor.js'; + +describe('IED editor component wizarding editing integration', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let iededitor: IedEditor; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + const ied = doc.querySelector('IED[name="IED2"]'); + + parent = ( + await fixture( + html`` + ) + ); + iededitor = parent.querySelector('ied-editor'); + await parent.updateComplete; + }); + + it('opens select wizard showing GSEControl of one IED', async () => { + (( + iededitor.shadowRoot?.querySelector('mwc-fab[class="selectgse"]') + )).click(); + await parent.updateComplete; + + expect(parent.wizardUI.dialog).to.exist; + const gseControlList = ( + parent.wizardUI.dialog?.querySelector('filtered-list') + ); + await gseControlList.updateComplete; + + expect(gseControlList.items.length).to.equal( + doc.querySelectorAll('IED[name="IED2"] GSEControl').length + ); + }); + + it('opens select wizard showing ReportControl of one IED', async () => { + (( + iededitor.shadowRoot?.querySelector('mwc-fab[class="selectreport"]') + )).click(); + await parent.updateComplete; + + expect(parent.wizardUI.dialog).to.exist; + const reportControlList = ( + parent.wizardUI.dialog?.querySelector('filtered-list') + ); + await reportControlList.updateComplete; + + expect(reportControlList.items.length).to.equal( + doc.querySelectorAll('IED[name="IED2"] ReportControl').length + ); + }); +}); diff --git a/test/unit/zeroline/__snapshots__/ied-editor.test.snap.js b/test/unit/zeroline/__snapshots__/ied-editor.test.snap.js index 16b24bc053..bc4418885d 100644 --- a/test/unit/zeroline/__snapshots__/ied-editor.test.snap.js +++ b/test/unit/zeroline/__snapshots__/ied-editor.test.snap.js @@ -22,6 +22,14 @@ snapshots["A component to visualize SCL element IED looks like the latest snapsh + + + + `; /* end snapshot A component to visualize SCL element IED looks like the latest snapshot */ diff --git a/test/unit/zeroline/ied-editor.test.ts b/test/unit/zeroline/ied-editor.test.ts index 34aca2e04b..7bc385c672 100644 --- a/test/unit/zeroline/ied-editor.test.ts +++ b/test/unit/zeroline/ied-editor.test.ts @@ -50,6 +50,17 @@ describe('A component to visualize SCL element IED', () => { expect(wizardEvent.args[0][0].detail.wizard[0].title).to.contain('select'); }); + it('triggers select wizard for ReportControl element on action button click', async () => { + (( + element.shadowRoot?.querySelector('mwc-fab[class="selectreport"]') + )).click(); + + await element.requestUpdate(); + + expect(wizardEvent).to.have.be.calledOnce; + expect(wizardEvent.args[0][0].detail.wizard[0].title).to.contain('select'); + }); + it('triggers create wizard for ClientLN element on action button click', async () => { (( element.shadowRoot?.querySelector('mwc-fab[class="connectreport"]')