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
226 lines (219 loc) • 6.77 kB
JavaScript
const helper = require("node-red-node-test-helper");
const addTariff = require("../src/general-add-tariff.js");
const expect = require("chai").expect;
const cloneDeep = require("lodash.clonedeep");
const prices = {
source: "Test",
priceData: [
{
value: 0.2,
start: "2021-10-11T00:00:00.000+02:00",
},
{
value: 0.3,
start: "2021-10-11T01:00:00.000+02:00",
},
{
value: 0.1,
start: "2021-10-11T02:00:00.000+02:00",
},
{
value: 1.2345,
start: "2021-10-11T03:00:00.000+02:00",
},
{
value: 2.1,
start: "2021-10-12T00:00:00.000+02:00", // Tuesday
},
{
value: 2.2,
start: "2021-10-12T01:00:00.000+02:00",
},
],
};
helper.init(require.resolve("node-red"));
describe("general-add-tariff node", function () {
beforeEach(function (done) {
helper.startServer(done);
});
afterEach(function (done) {
helper.unload().then(function () {
helper.stopServer(done);
});
});
it("should be loaded", function (done) {
const flow = [{ id: "n1", type: "ps-general-add-tariff", name: "test name" }];
helper.load(addTariff, flow, function () {
const n1 = helper.getNode("n1");
expect(n1).to.have.property("name", "test name");
done();
});
});
it("should add to price and config", function (done) {
const flow = [
{
id: "n1",
type: "ps-general-add-tariff",
name: "Add tariff",
wires: [["n2"]],
periods: [
{ start: "01", value: "0.50" },
{ start: "03", value: "0.80" },
],
days: { Mon: true, Tue: true, Wed: true, Thu: true, Fri: true, Sat: true, Sun: true },
},
{ id: "n2", type: "helper" },
];
const result = cloneDeep(prices);
result.priceData[0].value = 1.0;
result.priceData[1].value = 0.8;
result.priceData[2].value = 0.6;
result.priceData[3].value = 2.0345;
result.priceData[4].value = 2.9;
result.priceData[5].value = 2.7;
result.config = { abc: 123 };
helper.load(addTariff, flow, function () {
const n1 = helper.getNode("n1");
const n2 = helper.getNode("n2");
n2.on("input", function (msg) {
expect(msg).to.have.deep.property("payload", result);
done();
});
const payload = cloneDeep(prices);
payload.config = { abc: 123 };
n1.receive({ payload });
});
});
it("should add to price only for correct days", function (done) {
const flow = [
{
id: "n1",
type: "ps-general-add-tariff",
name: "Add tariff",
wires: [["n2"]],
periods: [
{ start: "01", value: "0.50" },
{ start: "03", value: "0.80" },
],
days: { Mon: true, Tue: false, Wed: true, Thu: true, Fri: true, Sat: true, Sun: true },
},
{ id: "n2", type: "helper" },
];
const result = cloneDeep(prices);
result.priceData[0].value = 1.0;
result.priceData[1].value = 0.8;
result.priceData[2].value = 0.6;
result.priceData[3].value = 2.0345;
result.priceData[4].value = 2.1;
result.priceData[5].value = 2.2;
result.config = { abc: 123 };
helper.load(addTariff, flow, function () {
const n1 = helper.getNode("n1");
const n2 = helper.getNode("n2");
n2.on("input", function (msg) {
expect(msg).to.have.deep.property("payload", result);
done();
});
const payload = cloneDeep(prices);
payload.config = { abc: 123 };
n1.receive({ payload });
});
});
it("should add to price when only first day is valid", function (done) {
const flow = [
{
id: "n1",
type: "ps-general-add-tariff",
name: "Add tariff",
wires: [["n2"]],
periods: [
{ start: "01", value: "0.50" },
{ start: "03", value: "0.80" },
],
days: { Mon: true, Tue: true, Wed: true, Thu: true, Fri: true, Sat: true, Sun: true },
validFrom: "2021-10-11",
validTo: "2021-10-11",
},
{ id: "n2", type: "helper" },
];
const result = cloneDeep(prices);
console.log(JSON.stringify(result, null, 2));
result.priceData[0].value = 1.0;
result.priceData[1].value = 0.8;
result.priceData[2].value = 0.6;
result.priceData[3].value = 2.0345;
result.priceData[4].value = 2.1;
result.priceData[5].value = 2.2;
helper.load(addTariff, flow, function () {
const n1 = helper.getNode("n1");
const n2 = helper.getNode("n2");
n2.on("input", function (msg) {
expect(msg).to.have.deep.property("payload", result);
done();
});
n1.receive({ payload: prices });
});
});
it("should add to price when only last day is valid", function (done) {
const flow = [
{
id: "n1",
type: "ps-general-add-tariff",
name: "Add tariff",
wires: [["n2"]],
periods: [
{ start: "01", value: "0.50" },
{ start: "03", value: "0.80" },
],
days: { Mon: true, Tue: true, Wed: true, Thu: true, Fri: true, Sat: true, Sun: true },
validFrom: "2021-10-12",
},
{ id: "n2", type: "helper" },
];
const result = cloneDeep(prices);
result.priceData[0].value = 0.2;
result.priceData[1].value = 0.3;
result.priceData[2].value = 0.1;
result.priceData[3].value = 1.2345;
result.priceData[4].value = 2.9;
result.priceData[5].value = 2.7;
helper.load(addTariff, flow, function () {
const n1 = helper.getNode("n1");
const n2 = helper.getNode("n2");
n2.on("input", function (msg) {
expect(msg).to.have.deep.property("payload", result);
done();
});
n1.receive({ payload: prices });
});
});
it("should add to price when only one period", function (done) {
const flow = [
{
id: "n1",
type: "ps-general-add-tariff",
name: "Add tariff",
wires: [["n2"]],
periods: [{ start: "01", value: "0.50" }],
days: { Mon: true, Tue: true, Wed: true, Thu: true, Fri: true, Sat: true, Sun: true },
},
{ id: "n2", type: "helper" },
];
const result = cloneDeep(prices);
result.priceData[0].value = 0.7;
result.priceData[1].value = 0.8;
result.priceData[2].value = 0.6;
result.priceData[3].value = 1.7345;
result.priceData[4].value = 2.6;
result.priceData[5].value = 2.7;
helper.load(addTariff, flow, function () {
const n1 = helper.getNode("n1");
const n2 = helper.getNode("n2");
n2.on("input", function (msg) {
expect(msg).to.have.deep.property("payload", result);
done();
});
n1.receive({ payload: prices });
});
});
});