UNPKG

node-red-contrib-power-saver

Version:

A module for Node-RED that you can use to turn on and off a switch based on power prices

128 lines (120 loc) 4.55 kB
const expect = require("chai").expect; const cloneDeep = require("lodash.clonedeep"); const helper = require("node-red-node-test-helper"); const prices = require("./data/converted-prices.json"); const { testPlan, equalHours } = require("./test-utils"); const { makeFlow, makePayload } = require("./schedule-merger-test-utils"); const scheduleMerger = require("../src/schedule-merger.js"); const { allOff, someOn } = require("./data/merge-schedule-data.js"); helper.init(require.resolve("node-red")); describe("send command as input to schedule merger", () => { beforeEach(function (done) { helper.startServer(done); }); afterEach(function (done) { helper.unload().then(function () { helper.stopServer(done); }); }); it("should send schedule on command", function (done) { const flow = makeFlow("OR"); let pass = 1; helper.load(scheduleMerger, flow, function () { const n1 = helper.getNode("n1"); const n2 = helper.getNode("n2"); n2.on("input", function (msg) { switch (pass) { case 1: pass++; expect(equalHours(someOn, msg.payload.hours, ["price", "onOff", "start"])).to.equal(true); n1.warn.should.not.be.called; n1.receive({ payload: { commands: { sendSchedule: true } } }); break; case 2: expect(equalHours(someOn, msg.payload.hours, ["price", "onOff", "start"])).to.equal(true); done(); break; } }); n1.receive({ payload: makePayload("s1", someOn) }); n1.receive({ payload: makePayload("s2", allOff) }); }); }); it("should send output on command", function (done) { const flow = makeFlow("OR"); let pass = 1; helper.load(scheduleMerger, flow, function () { const n1 = helper.getNode("n1"); const n2 = helper.getNode("n2"); const n3 = helper.getNode("n3"); const n4 = helper.getNode("n4"); let countOn = 0; let countOff = 0; n2.on("input", function (msg) { switch (pass) { case 1: pass++; expect(equalHours(someOn, msg.payload.hours, ["price", "onOff", "start"])).to.equal(true); n1.warn.should.not.be.called; n1.receive({ payload: { commands: { sendOutput: true }, time: "2021-06-20T01:05:00.000+02:00" } }); setTimeout(() => { console.log("countOn = " + countOn + ", countOff = " + countOff); expect(countOn).to.equal(1); expect(countOff).to.equal(1); done(); }, 50); break; } }); n3.on("input", function (msg) { countOn++; expect(msg).to.have.deep.property("payload", true); }); n4.on("input", function (msg) { countOff++; expect(msg).to.have.deep.property("payload", false); }); n1.receive({ payload: makePayload("s1", someOn) }); n1.receive({ payload: makePayload("s2", allOff) }); }); }); it("should reset on command", function (done) { const flow = makeFlow("OR"); helper.load(scheduleMerger, flow, function () { const n1 = helper.getNode("n1"); const n2 = helper.getNode("n2"); n2.on("input", function (msg) { expect(equalHours(someOn, msg.payload.hours, ["price", "onOff", "start"])).to.equal(true); n1.warn.should.not.be.called; n1.receive({ payload: { commands: { reset: true } } }); done(); }); n1.receive({ payload: makePayload("s1", someOn) }); n1.receive({ payload: makePayload("s2", allOff) }); }); }); it("should replan on command", function (done) { const flow = makeFlow("OR"); let pass = 1; helper.load(scheduleMerger, flow, function () { const n1 = helper.getNode("n1"); const n2 = helper.getNode("n2"); n2.on("input", function (msg) { switch (pass) { case 1: pass++; expect(equalHours(someOn, msg.payload.hours, ["price", "onOff", "start"])).to.equal(true); n1.warn.should.not.be.called; n1.receive({ payload: { commands: { replan: true }, time: "2021-06-19T00:00:00.000+02:00" } }); break; case 2: expect(equalHours(someOn, msg.payload.hours, ["price", "onOff", "start"])).to.equal(true); done(); break; } }); n1.receive({ payload: makePayload("s1", someOn) }); n1.receive({ payload: makePayload("s2", allOff) }); }); }); });