UNPKG

homebridge-fujitsu-airstage

Version:

A Homebridge plugin to control devices that use the Fujitsu Airstage API.

1,423 lines (1,238 loc) 79.2 kB
'use strict'; const assert = require('node:assert'); const { mock, test } = require('node:test'); const airstage = require('./../../src/airstage'); const clientWithAccessToken = new airstage.Client( 'us', 'United States', 'en', 'example@example.com', 'password', null, null, 'existingAccessToken', '2099-01-01', 'existingRefreshToken' ); const clientWithoutAccessToken = new airstage.Client( 'us', 'United States', 'en', 'example@example.com', 'password' ); test('airstage.Client#refreshTokenOrAuthenticate calls _apiClient.postUsersMeRefreshToken with success', (context, done) => { const expectedResponse = { 'accessToken': 'testAccessToken', 'expiresIn': 3600, 'refreshToken': 'testRefreshToken' }; context.mock.method( clientWithAccessToken._apiClient, 'postUsersMeRefreshToken', (refreshToken, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postUsersMeRefreshToken.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'existingRefreshToken'); }); clientWithAccessToken.refreshTokenOrAuthenticate((error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse); done(); }); }); test('airstage.Client#refreshTokenOrAuthenticate calls _apiClient.postUsersMeRefreshToken with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postUsersMeRefreshToken', (refreshToken, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postUsersMeRefreshToken.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'existingRefreshToken'); }); clientWithAccessToken.refreshTokenOrAuthenticate((error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#refreshTokenOrAuthenticate calls _apiClient.postUsersSignIn with success', (context, done) => { const expectedResponse = { 'accessToken': 'testAccessToken', 'expiresIn': 3600, 'refreshToken': 'testRefreshToken' }; context.mock.method( clientWithoutAccessToken._apiClient, 'postUsersSignIn', (email, password, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithoutAccessToken._apiClient.postUsersSignIn.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'example@example.com'); assert.strictEqual(mockedMethod.calls[0].arguments[1], 'password'); }); clientWithoutAccessToken.refreshTokenOrAuthenticate((error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse); done(); }); }); test('airstage.Client#refreshTokenOrAuthenticate calls _apiClient.postUsersSignIn with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithoutAccessToken._apiClient, 'postUsersSignIn', (email, password, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithoutAccessToken._apiClient.postUsersSignIn.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'example@example.com'); assert.strictEqual(mockedMethod.calls[0].arguments[1], 'password'); }); clientWithoutAccessToken.refreshTokenOrAuthenticate((error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#refreshTokenOrAuthenticate returns error', (context, done) => { const client = new airstage.Client( 'us', 'United States', 'en' ); context.mock.method( client._apiClient, 'postUsersMeRefreshToken' ); context.mock.method( client._apiClient, 'postUsersSignIn' ); context.after(() => { const mockedRefreshMethod = client._apiClient.postUsersMeRefreshToken.mock; const mockedAuthenticateMethod = client._apiClient.postUsersSignIn.mock; assert.strictEqual(mockedRefreshMethod.calls.length, 0); assert.strictEqual(mockedAuthenticateMethod.calls.length, 0); }); client.refreshTokenOrAuthenticate((error, result) => { assert.strictEqual(error, 'Could not refresh token or authenticate'); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#authenticate calls _apiClient.postUsersSignIn with success', (context, done) => { const expectedResponse = { 'accessToken': 'testAccessToken', 'expiresIn': 3600, 'refreshToken': 'testRefreshToken' }; context.mock.method( clientWithAccessToken._apiClient, 'postUsersSignIn', (email, password, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postUsersSignIn.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'example@example.com'); assert.strictEqual(mockedMethod.calls[0].arguments[1], 'password'); }); clientWithAccessToken.authenticate((error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse); done(); }); }); test('airstage.Client#authenticate calls _apiClient.postUsersSignIn with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postUsersSignIn', (email, password, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postUsersSignIn.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'example@example.com'); assert.strictEqual(mockedMethod.calls[0].arguments[1], 'password'); }); clientWithAccessToken.authenticate((error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#refreshToken calls _apiClient.postUsersMeRefreshToken with success', (context, done) => { const expectedResponse = { 'accessToken': 'testAccessToken', 'expiresIn': 3600, 'refreshToken': 'testRefreshToken' }; context.mock.method( clientWithAccessToken._apiClient, 'postUsersMeRefreshToken', (refreshToken, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postUsersMeRefreshToken.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'existingRefreshToken'); }); clientWithAccessToken.refreshToken((error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse); done(); }); }); test('airstage.Client#refreshToken calls _apiClient.postUsersMeRefreshToken with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postUsersMeRefreshToken', (refreshToken, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postUsersMeRefreshToken.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'existingRefreshToken'); }); clientWithAccessToken.refreshToken((error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getTemperatureScale calls _apiClient.getUsersMe with success', (context, done) => { const expectedResponse = { 'tempUnit': 'F' }; context.mock.method( clientWithAccessToken._apiClient, 'getUsersMe', (callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getUsersMe.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 1); }); clientWithAccessToken.resetUserMetadataCache(); clientWithAccessToken.getTemperatureScale((error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse.tempUnit); done(); }); }); test('airstage.Client#getTemperatureScale calls _apiClient.getUsersMe with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getUsersMe', (callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getUsersMe.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 1); }); clientWithAccessToken.resetUserMetadataCache(); clientWithAccessToken.getTemperatureScale((error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#setTemperatureScale calls _apiClient.putUsersMe with success', (context, done) => { const expectedResponse = { 'tempUnit': 'F' }; context.mock.method( clientWithAccessToken._apiClient, 'putUsersMe', (parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.putUsersMe.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 3); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'tempUnit'); assert.strictEqual(mockedMethod.calls[0].arguments[1], 'F'); }); clientWithAccessToken.resetUserMetadataCache(); clientWithAccessToken.setTemperatureScale('F', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse.tempUnit); done(); }); }); test('airstage.Client#setTemperatureScale calls _apiClient.putUsersMe with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'putUsersMe', (parameterName, parameterValue, callback) => { assert.strictEqual(parameterName, 'tempUnit'); assert.strictEqual(parameterValue, 'F'); callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.putUsersMe.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 3); assert.strictEqual(mockedMethod.calls[0].arguments[0], 'tempUnit'); assert.strictEqual(mockedMethod.calls[0].arguments[1], 'F'); }); clientWithAccessToken.resetUserMetadataCache(); clientWithAccessToken.setTemperatureScale('F', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getName calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'deviceName': 'My Device' }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getName('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse.deviceName); done(); }); }); test('airstage.Client#getName calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getName('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getConnectionStatus calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'connectionStatus': 'Online' }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getConnectionStatus('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse.connectionStatus); done(); }); }); test('airstage.Client#getConnectionStatus calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getConnectionStatus('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getModel calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_model', 'value': 'AZ123' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getModel('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, expectedResponse.parameters[0].value); done(); }); }); test('airstage.Client#getModel calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getModel('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getPowerState calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_onoff', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getPowerState('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'ON'); done(); }); }); test('airstage.Client#getPowerState calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getPowerState('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#setPowerState calls _apiClient.postDevicesSetParametersRequest with success', (context, done) => { const expectedResponse = {'reqId': '54321'}; const expectedGetDevicesRequestResponse = { 'status': 'complete', 'result': 'success', 'parameters': [ { 'name': 'iu_onoff', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.mock.method( clientWithAccessToken._apiClient, 'getDevicesRequest', (deviceId, requestId, callback) => { callback({'error': null, 'response': expectedGetDevicesRequestResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_onoff'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '1'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setPowerState('12345', 'ON', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'ON'); done(); }); }); test('airstage.Client#setPowerState calls _apiClient.postDevicesSetParametersRequest with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_onoff'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '1'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setPowerState('12345', 'ON', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getOperationMode calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_op_mode', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getOperationMode('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'COOL'); done(); }); }); test('airstage.Client#getOperationMode calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getOperationMode('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#setOperationMode calls _apiClient.postDevicesSetParametersRequest with success', (context, done) => { const expectedResponse = {'reqId': '54321'}; const expectedGetDevicesRequestResponse = { 'status': 'complete', 'result': 'success', 'parameters': [ { 'name': 'iu_op_mode', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.mock.method( clientWithAccessToken._apiClient, 'getDevicesRequest', (deviceId, requestId, callback) => { callback({'error': null, 'response': expectedGetDevicesRequestResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_op_mode'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '1'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setOperationMode('12345', 'COOL', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'COOL'); done(); }); }); test('airstage.Client#setOperationMode updates fan speed in device cache to AUTO when DRY with success', (context, done) => { const expectedResponse = {'reqId': '54321'}; const expectedGetDevicesRequestResponse = { 'status': 'complete', 'result': 'success', 'parameters': [ { 'name': 'iu_op_mode', 'value': '2' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.mock.method( clientWithAccessToken._apiClient, 'getDevicesRequest', (deviceId, requestId, callback) => { callback({'error': null, 'response': expectedGetDevicesRequestResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_op_mode'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '2'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setOperationMode('12345', 'DRY', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'DRY'); clientWithAccessToken.getFanSpeed('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'AUTO'); done(); }); }); }); test('airstage.Client#setOperationMode calls _apiClient.postDevicesSetParametersRequest with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_op_mode'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '1'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setOperationMode('12345', 'COOL', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getIndoorTemperature calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_indoor_tmp', 'value': '7200' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getIndoorTemperature('12345', 'F', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 72); done(); }); }); test('airstage.Client#getIndoorTemperature calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getIndoorTemperature('12345', 'F', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getTargetTemperature calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_set_tmp', 'value': '220' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getTargetTemperature('12345', 'F', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 72); done(); }); }); test('airstage.Client#getTargetTemperature calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getTargetTemperature('12345', 'F', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#setTargetTemperature calls _apiClient.postDevicesSetParametersRequest with success', (context, done) => { const expectedResponse = {'reqId': '54321'}; const expectedGetDevicesRequestResponse = { 'status': 'complete', 'result': 'success', 'parameters': [ { 'name': 'iu_set_tmp', 'value': '220' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.mock.method( clientWithAccessToken._apiClient, 'getDevicesRequest', (deviceId, requestId, callback) => { callback({'error': null, 'response': expectedGetDevicesRequestResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_set_tmp'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '220'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setTargetTemperature('12345', 72, 'F', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 72); done(); }); }); test('airstage.Client#setTargetTemperature calls _apiClient.postDevicesSetParametersRequest with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_set_tmp'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '220'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setTargetTemperature('12345', 72, 'F', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getTemperatureDelta calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_indoor_tmp', 'value': '7400' }, { 'name': 'iu_set_tmp', 'value': '220' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getTemperatureDelta('12345', 'F', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 4); done(); }); }); test('airstage.Client#getTemperatureDelta calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getTemperatureDelta('12345', 'F', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getFanSpeed calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_fan_spd', 'value': '11' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getFanSpeed('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'HIGH'); done(); }); }); test('airstage.Client#getFanSpeed calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getFanSpeed('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#setFanSpeed calls _apiClient.postDevicesSetParametersRequest with success', (context, done) => { const expectedResponse = {'reqId': '54321'}; const expectedGetDevicesRequestResponse = { 'status': 'complete', 'result': 'success', 'parameters': [ { 'name': 'iu_fan_spd', 'value': '11' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.mock.method( clientWithAccessToken._apiClient, 'getDevicesRequest', (deviceId, requestId, callback) => { callback({'error': null, 'response': expectedGetDevicesRequestResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_fan_spd'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '11'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setFanSpeed('12345', 'HIGH', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'HIGH'); done(); }); }); test('airstage.Client#setFanSpeed calls _apiClient.postDevicesSetParametersRequest with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_fan_spd'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '11'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setFanSpeed('12345', 'HIGH', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getAirflowVerticalDirection calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_af_dir_vrt', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getAirflowVerticalDirection('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 1); done(); }); }); test('airstage.Client#getAirflowVerticalDirection calls _apiClient.getDevice with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getAirflowVerticalDirection('12345', (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#setAirflowVerticalDirection calls _apiClient.postDevicesSetParametersRequest with success', (context, done) => { const expectedResponse = {'reqId': '54321'}; const expectedGetDevicesRequestResponse = { 'status': 'complete', 'result': 'success', 'parameters': [ { 'name': 'iu_af_dir_vrt', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.mock.method( clientWithAccessToken._apiClient, 'getDevicesRequest', (deviceId, requestId, callback) => { callback({'error': null, 'response': expectedGetDevicesRequestResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_af_dir_vrt'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '1'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setAirflowVerticalDirection('12345', 1, (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 1); done(); }); }); test('airstage.Client#setAirflowVerticalDirection calls _apiClient.postDevicesSetParametersRequest with error', (context, done) => { const expectedError = 'Error'; context.mock.method( clientWithAccessToken._apiClient, 'postDevicesSetParametersRequest', (deviceId, deviceSubId, parameterName, parameterValue, callback) => { callback({'error': expectedError, 'response': null}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.postDevicesSetParametersRequest.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 5); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); assert.strictEqual(mockedMethod.calls[0].arguments[1], '0'); assert.strictEqual(mockedMethod.calls[0].arguments[2], 'iu_af_dir_vrt'); assert.strictEqual(mockedMethod.calls[0].arguments[3], '1'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.setAirflowVerticalDirection('12345', 1, (error, result) => { assert.strictEqual(error, expectedError); assert.strictEqual(result, null); done(); }); }); test('airstage.Client#getAirflowVerticalSwingState calls _apiClient.getDevice with success', (context, done) => { const expectedResponse = { 'parameters': [ { 'name': 'iu_af_swg_vrt', 'value': '1' } ] }; context.mock.method( clientWithAccessToken._apiClient, 'getDevice', (deviceId, callback) => { callback({'error': null, 'response': expectedResponse}); } ); context.after(() => { const mockedMethod = clientWithAccessToken._apiClient.getDevice.mock; assert.strictEqual(mockedMethod.calls.length, 1); assert.strictEqual(mockedMethod.calls[0].arguments.length, 2); assert.strictEqual(mockedMethod.calls[0].arguments[0], '12345'); }); clientWithAccessToken.resetDeviceCache('12345'); clientWithAccessToken.getAirflowVerticalSwingState('12345', (error, result) => { assert.strictEqual(error, null); assert.strictEqual(result, 'ON'); done(); }); }); test('airstage.Client#getAirflo