distribute-event.spec.js 13 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. 'use strict';
  2. const { expect } = require('chai');
  3. const { parse, serialize } = require('../../../../xml/event/distribute-event');
  4. const { epriXml } = require('./xml-responses');
  5. const { epriEvent1, generatedEvent1, generatedEvent2 } = require('./js-responses');
  6. describe('Distribute event', function() {
  7. describe('serialize', function() {
  8. let serializedResponse;
  9. before(async () => {
  10. serializedResponse = await serialize(generatedEvent2);
  11. });
  12. it ('successfully serializes valid message', function() {
  13. expect(serializedResponse).to.eql('<oadr2b:oadrPayload xmlns:oadr2b="http://openadr.org/oadr-2.0b/2012/07"><oadr2b:oadrSignedObject><oadr2b:oadrDistributeEvent xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110" ei:schemaVersion="2.0b"><ei:eiResponse xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110"><ei:responseCode>200</ei:responseCode><ei:responseDescription>OK</ei:responseDescription><pyld:requestID xmlns:pyld="http://docs.oasis-open.org/ns/energyinterop/201110/payloads">9383fc5946cb0e14ef5a</pyld:requestID></ei:eiResponse><ei:vtnID xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110">NANTUM_VTN</ei:vtnID><pyld:requestID xmlns:pyld="http://www.w3.org/2000/09/xmldsig#">81dc20dfea7df7a2bb9e</pyld:requestID><oadr2b:oadrEvent><ei:eiEvent xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110"><ei:eventDescriptor><ei:eventID>41836407d027a0aabcb3</ei:eventID><ei:modificationNumber>0</ei:modificationNumber><ei:eiMarketContext><emix:marketContext xmlns:emix="http://docs.oasis-open.org/ns/emix/2011/06">http://MarketContext1</emix:marketContext></ei:eiMarketContext><ei:createdDateTime>2020-04-14T16:06:39.000Z</ei:createdDateTime><ei:eventStatus>far</ei:eventStatus><ei:testEvent>false</ei:testEvent><ei:modificationReason></ei:modificationReason><ei:priority>0</ei:priority><ei:vtnComment></ei:vtnComment></ei:eventDescriptor><ei:eiActivePeriod><cal:properties xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:dtstart><cal:date-time>2020-04-14T16:21:00.000Z</cal:date-time></cal:dtstart><cal:duration><cal:duration>PT60M</cal:duration></cal:duration><cal:tolerance><cal:tolerate><cal:startafter>PT5M</cal:startafter></cal:tolerate></cal:tolerance><ei:x-eiNotification><cal:duration>PT5M</cal:duration></ei:x-eiNotification><ei:x-eiRampUp><cal:duration>PT10M</cal:duration></ei:x-eiRampUp><ei:x-eiRecovery><cal:duration>PT12M</cal:duration></ei:x-eiRecovery></cal:properties><cal:components xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ei:eiActivePeriod><ei:eiEventSignals><ei:eiEventSignal><strm:intervals xmlns:strm="urn:ietf:params:xml:ns:icalendar-2.0:stream"><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT10M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>1</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>50</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT15M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>2</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>55</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT25M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>3</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>60</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT10M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>4</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>65</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval></strm:intervals><ei:signalID>64ba02508ab099d6eae6</ei:signalID><ei:signalName>LOAD_CONTROL</ei:signalName><ei:signalType>x-loadControlCapacity</ei:signalType><ei:eiTarget><power:endDeviceAsset xmlns:power="http://docs.oasis-open.org/ns/emix/2011/06/power"><power:mrid>Energy_Management_System</power:mrid></power:endDeviceAsset></ei:eiTarget><ei:currentValue><ei:payloadFloat><ei:value>0</ei:value></ei:payloadFloat></ei:currentValue></ei:eiEventSignal><ei:eiEventSignal><strm:intervals xmlns:strm="urn:ietf:params:xml:ns:icalendar-2.0:stream"><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT60M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>0</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>5.55</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval></strm:intervals><ei:signalID>a5d7f2c75a526386fa41</ei:signalID><ei:signalName>ELECTRICITY_PRICE</ei:signalName><ei:signalType>price</ei:signalType><ei:currentValue><ei:payloadFloat><ei:value>0</ei:value></ei:payloadFloat></ei:currentValue></ei:eiEventSignal><ei:eiEventBaseline><ei:baselineID>72233284678ff05139f4</ei:baselineID><ei:baselineName>some baseline</ei:baselineName><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT10M</cal:duration></cal:duration><cal:dtstart xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:date-time>2020-04-14T16:50:00.000Z</cal:date-time></cal:dtstart><strm:intervals xmlns:strm="urn:ietf:params:xml:ns:icalendar-2.0:stream"><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT30M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>1</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>50</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT30M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>2</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>60</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval></strm:intervals><oadr2b:currencyPerKWh><oadr2b:itemDescription>currencyPerKWh</oadr2b:itemDescription><oadr2b:itemUnits>USD</oadr2b:itemUnits><scale:siScaleCode xmlns:scale="http://docs.oasis-open.org/ns/emix/2011/06/siscale">none</scale:siScaleCode></oadr2b:currencyPerKWh></ei:eiEventBaseline></ei:eiEventSignals><ei:eiTarget><ei:groupID>Test Target</ei:groupID><ei:venID>D8:1D:4B:20:5A:65:4C:50:32:FA</ei:venID></ei:eiTarget></ei:eiEvent><oadr2b:oadrResponseRequired>always</oadr2b:oadrResponseRequired></oadr2b:oadrEvent><oadr2b:oadrEvent><ei:eiEvent xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110"><ei:eventDescriptor><ei:eventID>b6c955285eb2006232ea</ei:eventID><ei:modificationNumber>0</ei:modificationNumber><ei:eiMarketContext><emix:marketContext xmlns:emix="http://docs.oasis-open.org/ns/emix/2011/06">http://MarketContext1</emix:marketContext></ei:eiMarketContext><ei:createdDateTime>2020-04-10T19:38:00.000Z</ei:createdDateTime><ei:eventStatus>completed</ei:eventStatus><ei:testEvent>false</ei:testEvent><ei:modificationReason></ei:modificationReason><ei:priority>0</ei:priority><ei:vtnComment></ei:vtnComment></ei:eventDescriptor><ei:eiActivePeriod><cal:properties xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:dtstart><cal:date-time>2020-04-10T19:08:00.000Z</cal:date-time></cal:dtstart><cal:duration><cal:duration>PT30M</cal:duration></cal:duration><cal:tolerance><cal:tolerate><cal:startafter>PT0M</cal:startafter></cal:tolerate></cal:tolerance><ei:x-eiNotification><cal:duration>PT0M</cal:duration></ei:x-eiNotification><ei:x-eiRampUp><cal:duration>PT0M</cal:duration></ei:x-eiRampUp><ei:x-eiRecovery><cal:duration>PT0M</cal:duration></ei:x-eiRecovery></cal:properties><cal:components xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ei:eiActivePeriod><ei:eiEventSignals><ei:eiEventSignal><strm:intervals xmlns:strm="urn:ietf:params:xml:ns:icalendar-2.0:stream"/><ei:signalID>38e550909d77bc37310d</ei:signalID><ei:signalName>BID_LOAD</ei:signalName><ei:signalType>level</ei:signalType><ei:currentValue><ei:payloadFloat><ei:value>0</ei:value></ei:payloadFloat></ei:currentValue><power:powerReal xmlns:power="http://docs.oasis-open.org/ns/emix/2011/06/power"><power:itemDescription>RealPower</power:itemDescription><power:itemUnits>W</power:itemUnits><scale:siScaleCode xmlns:scale="http://docs.oasis-open.org/ns/emix/2011/06/siscale">none</scale:siScaleCode><power:powerAttributes><power:hertz>60</power:hertz><power:voltage>120</power:voltage><power:ac>true</power:ac></power:powerAttributes></power:powerReal></ei:eiEventSignal><ei:eiEventSignal><strm:intervals xmlns:strm="urn:ietf:params:xml:ns:icalendar-2.0:stream"><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT30M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>0</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>5.5</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval></strm:intervals><ei:signalID>94a93415888d31b6d84e</ei:signalID><ei:signalName>ELECTRICITY_PRICE</ei:signalName><ei:signalType>price</ei:signalType><ei:currentValue><ei:payloadFloat><ei:value>5.5</ei:value></ei:payloadFloat></ei:currentValue></ei:eiEventSignal></ei:eiEventSignals><ei:eiTarget><ei:venID>D8:1D:4B:20:5A:65:4C:50:32:FA</ei:venID></ei:eiTarget></ei:eiEvent><oadr2b:oadrResponseRequired>always</oadr2b:oadrResponseRequired></oadr2b:oadrEvent><oadr2b:oadrEvent><ei:eiEvent xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110"><ei:eventDescriptor><ei:eventID>16b3c052f1b636ede15e</ei:eventID><ei:modificationNumber>0</ei:modificationNumber><ei:eiMarketContext><emix:marketContext xmlns:emix="http://docs.oasis-open.org/ns/emix/2011/06">http://MarketContext1</emix:marketContext></ei:eiMarketContext><ei:createdDateTime>2020-04-10T20:54:00.000Z</ei:createdDateTime><ei:eventStatus>completed</ei:eventStatus><ei:testEvent>false</ei:testEvent><ei:modificationReason></ei:modificationReason><ei:priority>0</ei:priority><ei:vtnComment></ei:vtnComment></ei:eventDescriptor><ei:eiActivePeriod><cal:properties xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:dtstart><cal:date-time>2020-04-10T20:34:00.000Z</cal:date-time></cal:dtstart><cal:duration><cal:duration>PT20M</cal:duration></cal:duration><cal:tolerance><cal:tolerate><cal:startafter>PT0M</cal:startafter></cal:tolerate></cal:tolerance><ei:x-eiNotification><cal:duration>PT0M</cal:duration></ei:x-eiNotification><ei:x-eiRampUp><cal:duration>PT0M</cal:duration></ei:x-eiRampUp><ei:x-eiRecovery><cal:duration>PT0M</cal:duration></ei:x-eiRecovery></cal:properties><cal:components xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ei:eiActivePeriod><ei:eiEventSignals><ei:eiEventSignal><strm:intervals xmlns:strm="urn:ietf:params:xml:ns:icalendar-2.0:stream"><ei:interval><cal:duration xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:duration>PT20M</cal:duration></cal:duration><cal:uid xmlns:cal="urn:ietf:params:xml:ns:icalendar-2.0"><cal:text>0</cal:text></cal:uid><ei:signalPayload><ei:payloadFloat><ei:value>50</ei:value></ei:payloadFloat></ei:signalPayload></ei:interval></strm:intervals><ei:signalID>e6e7b114b6298cd9d055</ei:signalID><ei:signalName>ENERGY_PRICE</ei:signalName><ei:signalType>price</ei:signalType><ei:currentValue><ei:payloadFloat><ei:value>50</ei:value></ei:payloadFloat></ei:currentValue></ei:eiEventSignal></ei:eiEventSignals><ei:eiTarget><ei:venID>D8:1D:4B:20:5A:65:4C:50:32:FA</ei:venID></ei:eiTarget></ei:eiEvent><oadr2b:oadrResponseRequired>always</oadr2b:oadrResponseRequired></oadr2b:oadrEvent></oadr2b:oadrDistributeEvent></oadr2b:oadrSignedObject></oadr2b:oadrPayload>');
  14. });
  15. });
  16. describe('parse', function() {
  17. let parsedResponse;
  18. before(async () => {
  19. parsedResponse = await parse(epriXml);
  20. });
  21. it ('successfully parses valid message', function() {
  22. expect(parsedResponse).to.eql(epriEvent1);
  23. });
  24. it ('successfully parses serialized value #1', async function() {
  25. const serialized = serialize(generatedEvent1);
  26. const parsedResponse = await parse(serialized);
  27. expect(parsedResponse).to.eql(generatedEvent1);
  28. });
  29. it ('successfully parses serialized value #2', async function() {
  30. const serialized = serialize(generatedEvent2);
  31. const parsedResponse = await parse(serialized);
  32. expect(parsedResponse).to.eql(generatedEvent2);
  33. });
  34. });
  35. });