UNPKG

node-red-contrib-amazon-echo

Version:

Alexa-controlled Node-RED nodes for the latest Amazon Echo devices.

600 lines (481 loc) 15.2 kB
var common = require("../../common.js"); var request = common.request; var nodeTestHelper = common.nodeTestHelper; var flow = common.flow; var amazonEchoHub = common.amazonEchoHub; var amazonEchoDevice = common.amazonEchoDevice; var apiURL = "http://localhost:" + flow[1].port; describe('Amazon Echo Hub', function() { it('switch off', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("payload", "off"); msg.should.have.property("on", false); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "on": false }, "changes": {} }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", on: false } }); } catch (e) { done(e); } }); }); it('switch on', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("payload", "on"); msg.should.have.property("on", true); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "on": true }, "changes": { "on": false } }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", on: true } }); } catch (e) { done(e); } }); }); it('brightness to 10%', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("on", false); msg.should.have.property("bri", 26); msg.should.have.property("percentage", 10); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "bri": 26 }, "changes": { "bri": 254, "percentage": 100 } }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", bri: 26 } }); } catch (e) { done(e); } }); }); it('color to warm white', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); bulb.on("input", function(msg) { try { msg.should.have.property("on", false); msg.should.have.property("colormode", "ct"); msg.should.have.property("ct", 383); msg.should.have.property("hue", 0); msg.should.have.property("sat", 254); msg.should.have.property("xy").and.eql([0.6484272236872118, 0.33085610147277794]); msg.should.have.property("rgb").and.eql([254, 0, 0]); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "ct": 383 }, "changes": { "ct": 199 } }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", ct: 383 } }); } catch (e) { done(e); } }); }); it('HS color to cyan', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("on", false); msg.should.have.property("colormode", "hs"); msg.should.have.property("hue", 7282); msg.should.have.property("sat", 96); msg.should.have.property("xy").and.eql([0.41095573566484234, 0.4163837804141732]); msg.should.have.property("rgb").and.eql([254, 222, 158]); msg.should.have.property("ct", 199); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "hue": 7282, "sat": 96 }, "changes": { "hue": 0, "sat": 254, "xy": [0.6484272236872118, 0.33085610147277794], "rgb": [254, 0, 0], "colormode": "ct" } }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", hue: 7282, sat: 96 } }); } catch (e) { done(e); } }); }); it('XY color to cyan', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("on", false); msg.should.have.property("colormode", "hs"); msg.should.have.property("hue", 7282); msg.should.have.property("sat", 96); msg.should.have.property("xy").and.eql([0.4, 0.4]); msg.should.have.property("rgb").and.eql([255, 223, 159]); msg.should.have.property("ct", 199); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "xy": [0.4, 0.4] }, "changes": { "hue": 0, "sat": 254, "xy": [0.6484272236872118, 0.33085610147277794], "rgb": [254, 0, 0], "colormode": "ct" } }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", xy: [0.4, 0.4] } }); } catch (e) { done(e); } }); }); it('RGB color to cyan', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("on", false); msg.should.have.property("colormode", "hs"); msg.should.have.property("hue", 7282); msg.should.have.property("sat", 96); msg.should.have.property("xy").and.eql([0.4106395702541955, 0.4161860248589845]); msg.should.have.property("rgb").and.eql([255, 223, 159]); msg.should.have.property("ct", 199); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "rgb": [255, 223, 159] }, "changes": { "hue": 0, "sat": 254, "xy": [0.6484272236872118, 0.33085610147277794], "rgb": [254, 0, 0], "colormode": "ct" } }); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", rgb: [255, 223, 159] } }); } catch (e) { done(e); } }); }); it('meta details', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("payload", "off"); msg.should.have.property("on", false); msg.meta.insert.details.date.should.be.instanceOf(Date); delete msg.meta.insert.details["date"]; msg.meta.insert.should.have.property("by", "input"); msg.meta.insert.details.should.not.have.property("ip"); msg.meta.insert.details.should.not.have.property("user_agent"); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", on: false } }); } catch (e) { done(e); } }); }); it('input topic', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("topic", "input-topic"); msg.should.have.property("payload", "off"); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", on: false }, topic: "input-topic" }); } catch (e) { done(e); } }); }); it('device topic', function(done) { flow[2].topic = "device-topic"; nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msg.should.have.property("topic", "device-topic"); msg.should.have.property("payload", "off"); done(); } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", on: false }, topic: "input-topic" }); } catch (e) { done(e); } }); }); it('should not process input', function(done) { flow[1].processinput = 0; nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); setTimeout(function() { done(); }, 50); hn.on("input", function(msg) { done("Unexpected message for the configured process input state"); }); hub.receive({ payload: { nodeid: "00000000.000002", on: true } }); } catch (e) { done(e); } }); }); it('should process input', function(done) { flow[1].processinput = 1; nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { done("Unexpected message for the configured process input state"); }); hub.receive({ payload: { nodeid: "00000000.000002", on: true } }); request(apiURL) .get('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002') .set('Accept', 'application/json') .end(function(err, res) { // Status res.status.should.equal(200); // Body res.body.state.should.have.property("on", true); done(); }); } catch (e) { done(e); } }); }); it('should process and output on state change', function(done) { flow[1].processinput = 3; nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var msgCount = 0; var hub = nodeTestHelper.getNode("00000000.000001"); var bulb = nodeTestHelper.getNode("00000000.000002"); var hn = nodeTestHelper.getNode("00000000.0000f0"); hn.on("input", function(msg) { try { msgCount++; if (msgCount == 1) { msg.should.have.property("on", true); msg.should.have.property("bri", 254); } if (msgCount == 2) { msg.should.have.property("on", true); msg.should.have.property("bri", 100); done(); } } catch (e) { done(e); } }); hub.receive({ payload: { nodeid: "00000000.000002", on: false } }); hub.receive({ payload: { nodeid: "00000000.000002", on: true } }); hub.receive({ payload: { nodeid: "00000000.000002", on: true } }); hub.receive({ payload: { nodeid: "00000000.000002", bri: 100 } }); } catch (e) { done(e); } }); }); });