474 lines
12 KiB
JavaScript
474 lines
12 KiB
JavaScript
|
|
"use strict";
|
||
|
|
|
||
|
|
var expect = require("chai").expect
|
||
|
|
, HueApi = require("..").HueApi
|
||
|
|
, hueScene = require("..").scene
|
||
|
|
, lightState = require("..").lightState
|
||
|
|
, testValues = require("./support/testValues.js")
|
||
|
|
;
|
||
|
|
|
||
|
|
describe("Hue API", function () {
|
||
|
|
|
||
|
|
var hue = new HueApi(testValues.host, testValues.username);
|
||
|
|
|
||
|
|
describe("get bridge scenes", function () {
|
||
|
|
|
||
|
|
function validateScenesResult(scenes) {
|
||
|
|
var scene;
|
||
|
|
|
||
|
|
expect(scenes).to.be.defined;
|
||
|
|
expect(scenes).to.be.instanceOf(Array);
|
||
|
|
|
||
|
|
scene = scenes[0];
|
||
|
|
expect(scene).to.have.property("id");
|
||
|
|
expect(scene).to.have.property("name");
|
||
|
|
expect(scene).to.have.property("lights").to.be.instanceOf(Array);
|
||
|
|
expect(scene).to.have.property("owner");
|
||
|
|
expect(scene).to.have.property("locked");
|
||
|
|
expect(scene).to.have.property("lastupdated");
|
||
|
|
expect(scene).to.have.property("picture");
|
||
|
|
expect(scene).to.have.property("appdata");
|
||
|
|
}
|
||
|
|
|
||
|
|
function testPromise(fnName, done) {
|
||
|
|
hue[fnName].call(hue)
|
||
|
|
.then(validateScenesResult)
|
||
|
|
.then(done)
|
||
|
|
.done();
|
||
|
|
}
|
||
|
|
|
||
|
|
function testCallback(fnName, done) {
|
||
|
|
hue[fnName].apply(hue, [function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateScenesResult(result);
|
||
|
|
done();
|
||
|
|
}
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
describe("#scenes", function () {
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
testPromise("scenes", done);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
testCallback("scenes", done);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("#getScenes", function () {
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
testPromise("getScenes", done);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
testCallback("getScenes", done);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
describe("get a scene", function () {
|
||
|
|
|
||
|
|
describe("#scene()", function () {
|
||
|
|
|
||
|
|
var sceneId = testValues.validScene.id;
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.exist;
|
||
|
|
|
||
|
|
expect(result).to.have.property("id", sceneId);
|
||
|
|
expect(result).to.have.property("name", testValues.validScene.name);
|
||
|
|
expect(result).to.have.property("lights");
|
||
|
|
expect(result.lights).to.be.instanceOf(Array);
|
||
|
|
|
||
|
|
cb();
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.scene(sceneId)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.scene(sceneId, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("#getScene()", function () {
|
||
|
|
var sceneId = testValues.validScene.id;
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.exist;
|
||
|
|
|
||
|
|
expect(result).to.have.property("id", sceneId);
|
||
|
|
expect(result).to.have.property("name", testValues.validScene.name);
|
||
|
|
expect(result).to.have.property("lights");
|
||
|
|
expect(result.lights).to.be.instanceof(Array);
|
||
|
|
expect(result.lights).to.have.members(testValues.validScene.lights);
|
||
|
|
|
||
|
|
cb();
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.getScene(sceneId)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.getScene(sceneId, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
describe("create scene", function () {
|
||
|
|
|
||
|
|
describe("#createScene() with 1.2.x compatibility", function () {
|
||
|
|
|
||
|
|
var name = "node-hue-test-scene"
|
||
|
|
, lightIds = ["1", "2"]
|
||
|
|
;
|
||
|
|
|
||
|
|
describe("with name and lights", function () {
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.be.defined;
|
||
|
|
|
||
|
|
expect(result).to.have.property("id");
|
||
|
|
cb();
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.createScene(lightIds, name)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.createScene(lightIds, name, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("#createScene() with 1.11.x compatibility", function () {
|
||
|
|
|
||
|
|
describe("with name, lights and transition", function () {
|
||
|
|
|
||
|
|
var name = "node-hue-scene-with-transition"
|
||
|
|
, lightIds = ["1"]
|
||
|
|
, transitionTime = 1000
|
||
|
|
, scene = hueScene.create()
|
||
|
|
.withName(name)
|
||
|
|
.withLights(lightIds)
|
||
|
|
.withTransitionTime(transitionTime)
|
||
|
|
;
|
||
|
|
|
||
|
|
function validateScene(cb) {
|
||
|
|
return function (createdScene) {
|
||
|
|
expect(createdScene).to.have.property("name", name);
|
||
|
|
expect(createdScene).to.have.property("lights").with.members(lightIds);
|
||
|
|
expect(createdScene).to.have.property("version", 2);
|
||
|
|
|
||
|
|
expect(createdScene).to.have.property("lightstates");
|
||
|
|
expect(createdScene.lightstates).to.have.property("1");
|
||
|
|
expect(createdScene.lightstates["1"]).to.have.property("transitiontime", transitionTime);
|
||
|
|
|
||
|
|
cb();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.createScene(scene)
|
||
|
|
.then(function (createdScene) {
|
||
|
|
expect(createdScene).to.have.property("id");
|
||
|
|
return hue.getScene(createdScene.id);
|
||
|
|
})
|
||
|
|
.then(validateScene(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.createScene(scene, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
expect(result).to.have.property("id");
|
||
|
|
|
||
|
|
hue.scene(result.id, function (err, createdScene) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateScene(done)(createdScene);
|
||
|
|
})
|
||
|
|
})
|
||
|
|
});
|
||
|
|
});
|
||
|
|
})
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
describe("modifying/updating scenes", function () {
|
||
|
|
|
||
|
|
var originalName = "nha-00"
|
||
|
|
, originalLightIds = [1, 2, 3]
|
||
|
|
, scene = hueScene.create().withName(originalName).withLights(originalLightIds)
|
||
|
|
, sceneId
|
||
|
|
;
|
||
|
|
|
||
|
|
beforeEach(function (done) {
|
||
|
|
hue.createScene(scene)
|
||
|
|
.then(function (createdScene) {
|
||
|
|
sceneId = createdScene.id;
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
afterEach(function(done) {
|
||
|
|
hue.deleteScene(sceneId)
|
||
|
|
.then(function() {
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("#modifyScene()", function () {
|
||
|
|
|
||
|
|
describe("update name", function () {
|
||
|
|
|
||
|
|
var updateScene = hueScene.create({name: "nha-01"});
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.exist;
|
||
|
|
expect(result).to.have.property("name", true);
|
||
|
|
cb();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.updateScene(sceneId, updateScene)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.updateScene(sceneId, updateScene, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("update lights", function() {
|
||
|
|
|
||
|
|
var updateScene = hueScene.create({lights: [4, 5, 6]});
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.exist;
|
||
|
|
expect(result).to.have.property("lights", true);
|
||
|
|
cb();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.updateScene(sceneId, updateScene)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.updateScene(sceneId, updateScene, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("update scene states to 'current'", function () {
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.exist;
|
||
|
|
expect(result).to.have.property("storelightstate", true);
|
||
|
|
cb();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.updateScene(sceneId, null, true)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.updateScene(sceneId, {}, true, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("update name and lights", function () {
|
||
|
|
|
||
|
|
var updateScene = hueScene.create({name: "nha-01", lights: [2]});
|
||
|
|
|
||
|
|
function validateResult(cb) {
|
||
|
|
return function (result) {
|
||
|
|
expect(result).to.exist;
|
||
|
|
expect(result).to.have.property("name", true);
|
||
|
|
expect(result).to.have.property("lights", true);
|
||
|
|
cb();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.updateScene(sceneId, updateScene)
|
||
|
|
.then(validateResult(done))
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.updateScene(sceneId, updateScene, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
validateResult(done)(result);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
describe("modifying scene light states", function () {
|
||
|
|
|
||
|
|
describe("#modifySceneLightState()", function () {
|
||
|
|
|
||
|
|
var originalName = "nha-05"
|
||
|
|
, originalLightIds = [1, 2]
|
||
|
|
, lightId = 1
|
||
|
|
, scene = hueScene.create().withName(originalName).withLights(originalLightIds)
|
||
|
|
, sceneId
|
||
|
|
;
|
||
|
|
|
||
|
|
beforeEach(function (done) {
|
||
|
|
hue.createScene(scene)
|
||
|
|
.then(function (createdScene) {
|
||
|
|
sceneId = createdScene.id;
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
afterEach(function(done) {
|
||
|
|
hue.deleteScene(sceneId)
|
||
|
|
.then(function() {
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("update existing", function () {
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
var state = lightState
|
||
|
|
.create()
|
||
|
|
.on()
|
||
|
|
.hue(0);
|
||
|
|
|
||
|
|
hue.modifySceneLightState(sceneId, lightId, state)
|
||
|
|
.then(function (results) {
|
||
|
|
expect(results).to.be.defined;
|
||
|
|
expect(results).to.have.property("on", true);
|
||
|
|
expect(results).to.have.property("hue", true);
|
||
|
|
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
var state = lightState
|
||
|
|
.create()
|
||
|
|
.on()
|
||
|
|
.hue(10000);
|
||
|
|
|
||
|
|
hue.setSceneLightState(sceneId, 2, state, function (err, results) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
|
||
|
|
expect(results).to.be.defined;
|
||
|
|
expect(results).to.have.property("on", true);
|
||
|
|
expect(results).to.have.property("hue", true);
|
||
|
|
|
||
|
|
done();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
describe("activating scenes", function () {
|
||
|
|
|
||
|
|
describe("#activateScene()", function () {
|
||
|
|
|
||
|
|
var scene = hueScene.create().withLights([1])
|
||
|
|
, sceneId
|
||
|
|
;
|
||
|
|
|
||
|
|
before(function (done) {
|
||
|
|
hue.createScene(scene)
|
||
|
|
.then(function (createdScene) {
|
||
|
|
sceneId = createdScene.id;
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
after(function(done) {
|
||
|
|
hue.deleteScene(sceneId)
|
||
|
|
.then(function() {
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #promise", function (done) {
|
||
|
|
hue.activateScene(sceneId)
|
||
|
|
.then(function (result) {
|
||
|
|
expect(result).to.be.true;
|
||
|
|
done();
|
||
|
|
})
|
||
|
|
.done();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("using #callback", function (done) {
|
||
|
|
hue.activateScene(sceneId, function (err, result) {
|
||
|
|
expect(err).to.be.null;
|
||
|
|
expect(result).to.be.true;
|
||
|
|
done();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
//TODO need more tests
|
||
|
|
});
|