UNPKG

node-red-contrib-amazon-echo

Version:

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

470 lines (392 loc) 12.6 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('Philips Hue REST API ', function() { it('description', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { request(apiURL) .get('/description.xml') .set('Accept', 'application/xml') .end(function(err, res) { // Status res.status.should.equal(200); // Body res.text.should.not.be.empty().and.match(/Philips hue bridge 2012/); done(); }); } catch (e) { done(e); } }); }); it('registration', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { request(apiURL) .post('/api') .set('Accept', 'application/json') .end(function(err, res) { // Status res.status.should.equal(200); // Body res.body.should.be.deepEqual([{ success: { username: 'c6260f982b43a226b5542b967f612ce' } }]); done(); }); } catch (e) { done(e); } }); }); it('get state', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { request(apiURL) .get('/api/c6260f982b43a226b5542b967f612ce') .set('Accept', 'application/json') .end(function(err, res) { // Status res.status.should.equal(200); // Body res.body.lights['00000000000002'].state.should.have.property("on", false); done(); }); } catch (e) { done(e); } }); }); it('get lights', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { request(apiURL) .get('/api/c6260f982b43a226b5542b967f612ce/lights') .set('Accept', 'application/json') .end(function(err, res) { // Status res.status.should.equal(200); // Body res.body['00000000000002'].state.should.have.property("on", false); done(); }); } catch (e) { done(e); } }); }); it('get light state', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { 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", false); done(); }); } catch (e) { done(e); } }); }); it('switch off', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("000000000.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); } }); request(apiURL) .put('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002/state') .set('Accept', 'application/json') .send({ on: false }) .end(function(err, res) { // Status res.status.should.equal(200); // Body ({ success: { '/lights/1/state/on': false } }).should.be.oneOf(res.body); }); } catch (e) { done(e); } }); }); it('switch on', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("000000000.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); } }); request(apiURL) .put('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002/state') .set('Accept', 'application/json') .send({ on: true }) .end(function(err, res) { // Status res.status.should.equal(200); // Body ({ success: { '/lights/1/state/on': true } }).should.be.oneOf(res.body); }); } catch (e) { done(e); } }); }); it('brightness to 10%', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("000000000.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); } }); request(apiURL) .put('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002/state') .set('Accept', 'application/json') .send({ bri: 26 }) .end(function(err, res) { // Status res.status.should.equal(200); // Body ({ success: { '/lights/1/state/bri': 26 } }).should.be.oneOf(res.body); }); } catch (e) { done(e); } }); }); it('color to warm white', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("000000000.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", "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); } }); request(apiURL) .put('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002/state') .set('Accept', 'application/json') .send({ ct: 383 }) .end(function(err, res) { // Status res.status.should.equal(200); // Body ({ success: { '/lights/1/state/ct': 383 } }).should.be.oneOf(res.body); }); } catch (e) { done(e); } }); }); it('HS color to cyan', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("000000000.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", 32768); msg.should.have.property("sat", 254); msg.should.have.property("xy").and.eql([0.31363952617905655, 0.3295237237240357]); msg.should.have.property("rgb").and.eql([0, 254, 254]); msg.should.have.property("ct", 199); delete msg.meta["insert"]; msg.should.have.property("meta").which.is.deepEqual({ "input": { "hue": 32768, "sat": 254 }, "changes": { "hue": 0, "xy": [0.6484272236872118, 0.33085610147277794], "rgb": [254, 0, 0], "colormode": "ct" } }); done(); } catch (e) { done(e); } }); request(apiURL) .put('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002/state') .set('Accept', 'application/json') .send({ hue: 32768, sat: 254 }) .end(function(err, res) { // Status res.status.should.equal(200); // Body ({ success: { '/lights/1/state/hue': 32768 } }).should.be.oneOf(res.body); ({ success: { '/lights/1/state/sat': 254 } }).should.be.oneOf(res.body); }); } catch (e) { done(e); } }); }); it('meta details', function(done) { nodeTestHelper.load([amazonEchoHub, amazonEchoDevice], flow, function() { try { var hub = nodeTestHelper.getNode("000000000.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", "alexa"); msg.meta.insert.should.have.property("details").which.is.deepEqual({ "ip": "::ffff:127.0.0.1", "user_agent": "Dalvik/2.1.0 (Linux; U; Android 7.1.2; AEODN Build/NS6533)" }); done(); } catch (e) { done(e); } }); request(apiURL) .put('/api/c6260f982b43a226b5542b967f612ce/lights/00000000000002/state') .set('User-Agent', 'Dalvik/2.1.0 (Linux; U; Android 7.1.2; AEODN Build/NS6533)') .set('Accept', 'application/json') .send({ on: false }) .end(function(err, res) { // Status res.status.should.equal(200); // Body ({ success: { '/lights/1/state/on': false } }).should.be.oneOf(res.body); }); } catch (e) { done(e); } }); }); });