UNPKG

node-hue-api

Version:
270 lines (195 loc) 7.61 kB
'use strict'; const expect = require('chai').expect , v3Api = require('../v3').v3.api , discovery = require('../index').discovery , testValues = require('../../test/support/testValues.js') //TODO move these , model = require('@peter-murray/hue-bridge-model').model , Sensor = model.Sensor , CLIPOpenClose = model.CLIPOpenClose ; describe('Hue API #sensors', () => { let hue; before(() => { return discovery.nupnpSearch() .then(searchResults => { const localApi = v3Api.createLocal(searchResults[0].ipaddress); return localApi.connect(testValues.username) .then(api => { hue = api; }); }); }); function createClipOpenCloseSensor(name) { const sensor = new CLIPOpenClose(); sensor.name = name; sensor.modelid = 'software'; sensor.swversion = '1.0'; sensor.uniqueid = '00:00:00:01'; sensor.manufacturername = 'software'; sensor.config = { url: 'http://developers.meethue.com' }; return sensor; } describe('#getAll()', () => { it('should get all sensors', async () => { const sensors = await hue.sensors.getAll(); expect(sensors).to.be.instanceOf(Array); // The first sensor is usually the daylight sensor expect(sensors[0]).to.have.property('id').to.equal(1); expect(sensors[0]).to.have.property('name', 'Daylight'); expect(sensors[0]).to.have.property('type', 'Daylight'); expect(sensors[0]).to.have.property('modelid', 'PHDL00'); expect(sensors[0]).to.have.property('manufacturername', 'Signify Netherlands B.V.'); expect(sensors[0]).to.have.property('swversion', '1.0'); }); }); describe('#get()', () => { it('should get daylight sensor', async () => { const result = await hue.sensors.getSensor(1); expect(result).to.be.instanceOf(Sensor); expect(result).to.have.property('id').to.equal(1); expect(result).to.have.property('name', 'Daylight'); }); }); describe('#searchForNew()', () => { it('should start a search for new sensors', async () => { const result = await hue.sensors.searchForNew(); expect(result).to.be.true; }); }); describe('#getNewSensors()', () => { it('should return new sensors', async () => { const result = await hue.sensors.getNew(); expect(result).to.have.property('lastscan'); //TODO could check it is one of the expected strings, none, active or a timestamp expect(result).to.have.property('sensors').to.be.instanceof(Array); }); }); describe('#createSensor()', () => { let createdSensor; afterEach('remove the created sensor', async () => { if (createdSensor) { await hue.sensors.deleteSensor(createdSensor); } }); it('should create a new sensor', async () => { const sensor = createClipOpenCloseSensor('testSoftwareSensor') , result = await hue.sensors.createSensor(sensor) ; createdSensor = await hue.sensors.getSensor(result.id); expect(result).to.have.property('id').to.be.greaterThan(0); expect(createdSensor).to.have.property('name').to.equal(sensor.name); expect(createdSensor).to.have.property('modelid').to.equal(sensor.modelid); expect(createdSensor).to.have.property('swversion').to.equal(sensor.swversion); expect(createdSensor).to.have.property('uniqueid').to.equal(sensor.uniqueid); expect(createdSensor).to.have.property('manufacturername').to.equal(sensor.manufacturername); }); }); describe('#reanmeSensor()', () => { let sensorId; beforeEach('', async () => { const sensor = createClipOpenCloseSensor('updateNameTest') , result = await hue.sensors.createSensor(sensor) ; sensorId = result.id; }); afterEach('', async () => { await hue.sensors.deleteSensor(sensorId); }); it('should update the name on an existing sensor', async () => { const initialSensor = await hue.sensors.getSensor(sensorId) , newName = `newName-${Date.now()}` ; // Raname the sensor expect(initialSensor.name).to.not.equal(newName); initialSensor.name = newName; const result = await hue.sensors.renameSensor(initialSensor) , sensor = await hue.sensors.getSensor(sensorId) ; expect(result).to.be.true; expect(sensor).to.have.property('name').to.equal(newName); }); }); describe('#rename()', () => { let sensor; beforeEach('', async () => { const newSensor = createClipOpenCloseSensor('updateNameTest'); sensor = await hue.sensors.createSensor(newSensor); }); afterEach('', async () => { if (sensor) { await hue.sensors.deleteSensor(sensor); } }); it('should update the name on an existing sensor', async () => { sensor.name = `newName-${Date.now()}`; const result = await hue.sensors.renameSensor(sensor) , updatedSensor = await hue.sensors.getSensor(sensor) ; expect(result).to.be.true; expect(updatedSensor).to.have.property('name').to.equal(sensor.name); }); }); describe('#updateSensorConfig', () => { let sensorId; beforeEach('', async () => { const sensor = createClipOpenCloseSensor('testSensorConfig') , result = await hue.sensors.createSensor(sensor) ; sensorId = result.id; }); afterEach('', async () => { await hue.sensors.deleteSensor(sensorId); }); it('should update the config', async () => { const sensor = await hue.sensors.getSensor(sensorId); expect(sensor).to.have.property('on'); const initalOnState = sensor.on; // Update some configuration values sensor.on = !initalOnState; const result = await hue.sensors.updateSensorConfig(sensor) , updatedSensor = await hue.sensors.getSensor(sensor.id) ; expect(result).to.be.true; expect(updatedSensor).to.have.property('on', !initalOnState); }); }); describe('#updateSensorState', () => { let sensorId; beforeEach('', async () => { const sensor = createClipOpenCloseSensor('testSensorConfig') , result = await hue.sensors.createSensor(sensor) ; sensorId = result.id; }); afterEach('', async () => { await hue.sensors.deleteSensor(sensorId); }); it('should update the state', async function () { const sensor = await hue.sensors.getSensor(sensorId); expect(sensor).to.have.property('open', false); // Update some state values sensor.open = true; const result = await hue.sensors.updateSensorState(sensor) , updatedSensor = await hue.sensors.getSensor(sensor.id) ; expect(result).to.have.property('open').to.be.true; expect(updatedSensor).to.have.property('open', true); expect(updatedSensor).to.have.property('lastupdated').to.exist; }); it('should update a subset of states when filtered', async () => { const sensor = await hue.sensors.getSensor(sensorId); expect(sensor).to.have.property('open', false); // Update some state values sensor.open = true; // Prevent any state updates to be performed const result = await hue.sensors.updateSensorState(sensor, []) , updatedSensor = await hue.sensors.getSensor(sensor.id) ; expect(Object.keys(result)).to.have.length(0); expect(updatedSensor).to.have.property('open', false); expect(updatedSensor).to.have.property('lastupdated').to.exist; }); }); });