From 5d13ac860cde0e16beb814490df52a51f9665874 Mon Sep 17 00:00:00 2001 From: David McGrath Date: Sat, 13 Jan 2018 16:01:59 -0500 Subject: [PATCH 1/6] expose some globals via modules --- Roomie.Web.Frontend/src/globals/Headers.js | 3 +++ Roomie.Web.Frontend/src/globals/JSON.js | 3 +++ Roomie.Web.Frontend/src/globals/fetch.js | 3 +++ Roomie.Web.Frontend/src/globals/window.js | 1 + 4 files changed, 10 insertions(+) create mode 100644 Roomie.Web.Frontend/src/globals/Headers.js create mode 100644 Roomie.Web.Frontend/src/globals/JSON.js create mode 100644 Roomie.Web.Frontend/src/globals/fetch.js create mode 100644 Roomie.Web.Frontend/src/globals/window.js diff --git a/Roomie.Web.Frontend/src/globals/Headers.js b/Roomie.Web.Frontend/src/globals/Headers.js new file mode 100644 index 00000000..d7e40494 --- /dev/null +++ b/Roomie.Web.Frontend/src/globals/Headers.js @@ -0,0 +1,3 @@ +import window from './window.js'; + +export default window.Headers; diff --git a/Roomie.Web.Frontend/src/globals/JSON.js b/Roomie.Web.Frontend/src/globals/JSON.js new file mode 100644 index 00000000..f32fb256 --- /dev/null +++ b/Roomie.Web.Frontend/src/globals/JSON.js @@ -0,0 +1,3 @@ +import window from './window.js'; + +export default window.JSON; diff --git a/Roomie.Web.Frontend/src/globals/fetch.js b/Roomie.Web.Frontend/src/globals/fetch.js new file mode 100644 index 00000000..ce79269b --- /dev/null +++ b/Roomie.Web.Frontend/src/globals/fetch.js @@ -0,0 +1,3 @@ +import window from './window.js'; + +export default window.fetch; diff --git a/Roomie.Web.Frontend/src/globals/window.js b/Roomie.Web.Frontend/src/globals/window.js new file mode 100644 index 00000000..76f1ace4 --- /dev/null +++ b/Roomie.Web.Frontend/src/globals/window.js @@ -0,0 +1 @@ +export default window; From e4bdd3c9fc211e991f8613444a433e3dc1017d4a Mon Sep 17 00:00:00 2001 From: David McGrath Date: Sat, 13 Jan 2018 16:02:27 -0500 Subject: [PATCH 2/6] implement API connection via window.fetch --- Roomie.Web.Frontend/src/api.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Roomie.Web.Frontend/src/api.js diff --git a/Roomie.Web.Frontend/src/api.js b/Roomie.Web.Frontend/src/api.js new file mode 100644 index 00000000..af9c7573 --- /dev/null +++ b/Roomie.Web.Frontend/src/api.js @@ -0,0 +1,30 @@ +import Headers from './globals/Headers.js'; +import fetch from './globals/fetch.js'; +import JSON from './globals/JSON.js'; + +function jsonFetch({ + action, + parameters, + repository, +}) { + let path = `/api/${repository}`; + let options = { + credentials: 'include', + body: JSON.stringify({ + action: action, + parameters: parameters, + }), + headers: new Headers({ + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }), + method: 'POST', + }; + + return fetch(path, options) + .then(response => { + return response.json(); + }); +}; + +export default jsonFetch; From 4b4d7992699548e80e5240447acc9ec6337d14af Mon Sep 17 00:00:00 2001 From: David McGrath Date: Sat, 13 Jan 2018 16:03:01 -0500 Subject: [PATCH 3/6] expose api implementation to Angular code it wraps promises with $q so that $scope.$digest happens automatically --- Roomie.Web.Frontend/src/angular/data/api/index.js | 7 +++++++ Roomie.Web.Frontend/src/angular/data/api/script.js | 14 ++++++++++++++ Roomie.Web.Frontend/src/angular/data/module.js | 2 ++ 3 files changed, 23 insertions(+) create mode 100644 Roomie.Web.Frontend/src/angular/data/api/index.js create mode 100644 Roomie.Web.Frontend/src/angular/data/api/script.js diff --git a/Roomie.Web.Frontend/src/angular/data/api/index.js b/Roomie.Web.Frontend/src/angular/data/api/index.js new file mode 100644 index 00000000..b9ff5a54 --- /dev/null +++ b/Roomie.Web.Frontend/src/angular/data/api/index.js @@ -0,0 +1,7 @@ +import script from './script.js'; + +export default { + type: 'factory', + name: script.name, + value: script, +}; diff --git a/Roomie.Web.Frontend/src/angular/data/api/script.js b/Roomie.Web.Frontend/src/angular/data/api/script.js new file mode 100644 index 00000000..7fbf1117 --- /dev/null +++ b/Roomie.Web.Frontend/src/angular/data/api/script.js @@ -0,0 +1,14 @@ +import commonApi from '../../../api.js'; + +function api( + $q +) { + return function (request) { + let result = commonApi(request); + let wrappedResult = $q.when(result); + + return wrappedResult; + } +} + +export default api; diff --git a/Roomie.Web.Frontend/src/angular/data/module.js b/Roomie.Web.Frontend/src/angular/data/module.js index 3dec62ee..16938d96 100644 --- a/Roomie.Web.Frontend/src/angular/data/module.js +++ b/Roomie.Web.Frontend/src/angular/data/module.js @@ -1,4 +1,5 @@ import defineModule from '../defineModule.js'; +import api from './api/index.js'; import AutomaticPollingUpdater from './AutomaticPollingUpdater/index.js'; import deviceTypes from './deviceTypes/index.js'; import ManualPoller from './ManualPoller/index.js'; @@ -8,6 +9,7 @@ import ManualUpdater from './ManualUpdater/index.js'; let module = defineModule({ name: 'roomie.data', definitions: [ + api, AutomaticPollingUpdater, deviceTypes, ManualPoller, From 038732ecf8991c974cb33bd451c58df450399984 Mon Sep 17 00:00:00 2001 From: David McGrath Date: Sat, 13 Jan 2018 16:06:00 -0500 Subject: [PATCH 4/6] remove unused $http dependencies --- .../src/angular/devices.pages/DevicesController/script.js | 1 - .../src/angular/tasks.pages/TasksController/script.js | 1 - 2 files changed, 2 deletions(-) diff --git a/Roomie.Web.Frontend/src/angular/devices.pages/DevicesController/script.js b/Roomie.Web.Frontend/src/angular/devices.pages/DevicesController/script.js index 26c58f83..9fbeb3b4 100644 --- a/Roomie.Web.Frontend/src/angular/devices.pages/DevicesController/script.js +++ b/Roomie.Web.Frontend/src/angular/devices.pages/DevicesController/script.js @@ -1,5 +1,4 @@ function DevicesController( - $http, $scope, $state, AutomaticPollingDeviceListing, diff --git a/Roomie.Web.Frontend/src/angular/tasks.pages/TasksController/script.js b/Roomie.Web.Frontend/src/angular/tasks.pages/TasksController/script.js index f700eda8..a69157f3 100644 --- a/Roomie.Web.Frontend/src/angular/tasks.pages/TasksController/script.js +++ b/Roomie.Web.Frontend/src/angular/tasks.pages/TasksController/script.js @@ -1,5 +1,4 @@ function TasksController( - $http, $state, ManualPollingUpdater, pageMenuItems, From dd8e27ef1813947615800e739a39cb2f0b9a8b19 Mon Sep 17 00:00:00 2001 From: David McGrath Date: Sat, 13 Jan 2018 16:07:08 -0500 Subject: [PATCH 5/6] fix broken API call --- .../src/angular/networks/network-edit-controls/script.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js b/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js index 1623ddbf..24b7ddaa 100644 --- a/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js +++ b/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js @@ -22,7 +22,10 @@ function networkEditControls( }); function save() { - $http.put('/api/network/' + scope.network.id, scope.model); + $http.post('/api/network', { + action: 'update', + parameters: scope.model, + }); } } From c57d9a397e7425502e9bb566f2ff29fbab4a7387 Mon Sep 17 00:00:00 2001 From: David McGrath Date: Sat, 13 Jan 2018 16:09:21 -0500 Subject: [PATCH 6/6] use new api dependency rather than $http --- .../ComputerDetailController/script.js | 7 +- .../ComputerListController/script.js | 7 +- .../computers/add-computer-widget/script.js | 5 +- .../computers/run-script-controls/script.js | 5 +- .../computers/web-hook-controls/script.js | 10 +-- .../src/angular/data/ManualPoller/script.js | 11 +-- .../angular/data/ManualPoller/test.spec.js | 69 ++++++++++--------- .../devices.data/deviceUtilities/script.js | 5 +- .../devices.data/deviceUtilities/test.spec.js | 21 ++++-- .../devices/device-edit-controls/script.js | 5 +- .../devices/device-edit-controls/test.spec.js | 55 +++++++-------- .../CommandDocumentationController/script.js | 7 +- .../NetworkDetailController/script.js | 8 +-- .../NetworkListController/script.js | 7 +- .../networks/network-edit-controls/script.js | 5 +- .../angular/networks/network-widget/script.js | 8 ++- 16 files changed, 128 insertions(+), 107 deletions(-) diff --git a/Roomie.Web.Frontend/src/angular/computers.pages/ComputerDetailController/script.js b/Roomie.Web.Frontend/src/angular/computers.pages/ComputerDetailController/script.js index e06fc755..fd96f156 100644 --- a/Roomie.Web.Frontend/src/angular/computers.pages/ComputerDetailController/script.js +++ b/Roomie.Web.Frontend/src/angular/computers.pages/ComputerDetailController/script.js @@ -1,6 +1,6 @@ function ComputerDetailController( - $http, $state, + api, pageMenuItems, signInState, wholePageStatus @@ -11,14 +11,15 @@ function ComputerDetailController( wholePageStatus.set('loading'); pageMenuItems.reset(); - $http.post('/api/computer', { + api({ + repository: 'computer', action: 'read', parameters: { id: +$state.params.id } }) .then(function (result) { - controller.computer = result.data.data; + controller.computer = result.data; signInState.set('signed-in'); wholePageStatus.set('ready'); diff --git a/Roomie.Web.Frontend/src/angular/computers.pages/ComputerListController/script.js b/Roomie.Web.Frontend/src/angular/computers.pages/ComputerListController/script.js index acb5725b..a27a08bc 100644 --- a/Roomie.Web.Frontend/src/angular/computers.pages/ComputerListController/script.js +++ b/Roomie.Web.Frontend/src/angular/computers.pages/ComputerListController/script.js @@ -1,5 +1,5 @@ function ComputerListController( - $http, + api, pageMenuItems, signInState, wholePageStatus @@ -10,11 +10,12 @@ function ComputerListController( wholePageStatus.set('loading'); pageMenuItems.reset(); - $http.post('/api/computer', { + api({ + repository: 'computer', action: 'list' }) .then(function (result) { - controller.computers = result.data.data; + controller.computers = result.data; signInState.set('signed-in'); wholePageStatus.set('ready'); diff --git a/Roomie.Web.Frontend/src/angular/computers/add-computer-widget/script.js b/Roomie.Web.Frontend/src/angular/computers/add-computer-widget/script.js index 87e88241..96952268 100644 --- a/Roomie.Web.Frontend/src/angular/computers/add-computer-widget/script.js +++ b/Roomie.Web.Frontend/src/angular/computers/add-computer-widget/script.js @@ -1,7 +1,7 @@ import template from './template.html'; function addComputerWidget( - $http + api ) { return { @@ -16,7 +16,8 @@ function addComputerWidget( scope.model = {}; function add() { - $http.post('/api/computer', { + api({ + repository: 'computer', action: 'create', parameters: scope.model, }); diff --git a/Roomie.Web.Frontend/src/angular/computers/run-script-controls/script.js b/Roomie.Web.Frontend/src/angular/computers/run-script-controls/script.js index b5d7fc28..b95576cc 100644 --- a/Roomie.Web.Frontend/src/angular/computers/run-script-controls/script.js +++ b/Roomie.Web.Frontend/src/angular/computers/run-script-controls/script.js @@ -1,7 +1,7 @@ import template from './template.html'; function runScriptControls( - $http + api ) { return { @@ -26,7 +26,8 @@ function runScriptControls( }); function runScript() { - $http.post('/api/computer', { + api({ + repository: 'computer', action: 'runScript', parameters: Object.assign({}, { id: scope.computer.id diff --git a/Roomie.Web.Frontend/src/angular/computers/web-hook-controls/script.js b/Roomie.Web.Frontend/src/angular/computers/web-hook-controls/script.js index abb49211..a26e3efe 100644 --- a/Roomie.Web.Frontend/src/angular/computers/web-hook-controls/script.js +++ b/Roomie.Web.Frontend/src/angular/computers/web-hook-controls/script.js @@ -1,9 +1,9 @@ import template from './template.html'; function webHookControls( - $http, $state, - $window + $window, + api ) { return { @@ -32,7 +32,8 @@ function webHookControls( } function disable() { - $http.post('/api/computer', { + api({ + repository: 'computer', action: 'disableWebHook', parameters: { id: scope.computer.id, @@ -44,7 +45,8 @@ function webHookControls( } function renew() { - $http.post('/api/computer', { + api({ + repository: 'computer', action: 'renewWebHookKeys', parameters: { id: scope.computer.id, diff --git a/Roomie.Web.Frontend/src/angular/data/ManualPoller/script.js b/Roomie.Web.Frontend/src/angular/data/ManualPoller/script.js index d9aee1cb..1db992c4 100644 --- a/Roomie.Web.Frontend/src/angular/data/ManualPoller/script.js +++ b/Roomie.Web.Frontend/src/angular/data/ManualPoller/script.js @@ -1,5 +1,5 @@ function ManualPoller( - $http + api ) { return ManualPoller; @@ -11,13 +11,14 @@ var selectItems = options.itemSelector || defaultItemSelector; this.run = function () { - var result = $http.post('/api/' + repository, { + var result = api({ + repository: repository, action: 'list', parameters: filter, }).then(function (response) { - if (response.data.error) { + if (response.error) { if (processErrors) { - return processErrors(response.data.error); + return processErrors(response.error); } else { return; } @@ -33,7 +34,7 @@ }; function selectHttpBody(response) { - return response.data.data; + return response.data; } function defaultItemSelector(page) { diff --git a/Roomie.Web.Frontend/src/angular/data/ManualPoller/test.spec.js b/Roomie.Web.Frontend/src/angular/data/ManualPoller/test.spec.js index 417b4169..ac9e3eda 100644 --- a/Roomie.Web.Frontend/src/angular/data/ManualPoller/test.spec.js +++ b/Roomie.Web.Frontend/src/angular/data/ManualPoller/test.spec.js @@ -1,35 +1,43 @@ describe('angular roomie.data ManualPoller (factory)', function () { - var $httpBackend; + var $q; + var $timeout; + var api; var ManualPoller; var items; beforeEach(angular.mock.module('roomie.data')); + + beforeEach(angular.mock.module(function ($provide) { + api = jasmine.createSpy('api'); + + $provide.value('api', api); + })); beforeEach(angular.mock.inject(function ($injector) { - $httpBackend = $injector.get('$httpBackend'); + $q = $injector.get('$q'); + $timeout = $injector.get('$timeout'); ManualPoller = $injector.get('ManualPoller'); })); beforeEach(function () { + api.and.returnValue($q.when({})); + items = []; }); - it('POSTs the provided resource', function () { + it('submits the API request', function () { var manualPoller = new ManualPoller({ repository: 'derp' }); - $httpBackend.when('POST', '/api/derp') - .respond({ - data: {} - }); - - $httpBackend.expectPOST('/api/derp'); - manualPoller.run(); - $httpBackend.flush(); + expect(api).toHaveBeenCalledWith({ + repository: 'derp', + action: 'list', + parameters: undefined, + }) }); describe('item selection', function () { @@ -40,20 +48,19 @@ repository: 'derp' }); - $httpBackend.when('POST', '/api/derp') - .respond({ - data: { - items: [{ id: 'a' }, { id: 'b' }], - } - }); + api.and.returnValue($q.when({ + data: { + items: [{ id: 'a' }, { id: 'b' }], + } + })); manualPoller.run().then(function (x) { actual = x; }); - $httpBackend.flush(); + $timeout.flush(); - expect(actual).toEqual([{ id: 'a' }, { id: 'b' }]); + expect(actual).toEqual([{ id: 'a' }, { id: 'b' }]); }); it('selects the items property with an optional override when provided.', function () { @@ -65,16 +72,15 @@ } }); - $httpBackend.when('POST', '/api/derp') - .respond({ - data: [{ id: 'a' }, { id: 'b' }], - }); + api.and.returnValue($q.when({ + data: [{ id: 'a' }, { id: 'b' }], + })); manualPoller.run().then(function (x) { actual = x; }); - $httpBackend.flush(); + $timeout.flush(); expect(actual).toEqual([{ id: 'a' }, { id: 'b' }]); }); @@ -85,12 +91,11 @@ var theError; beforeEach(function () { - $httpBackend.when('POST', '/api/derp') - .respond(200, { - error: { - something: 'a message maybe' - } - }); + api.and.returnValue($q.when({ + error: { + something: 'a message maybe' + } + })); }); describe('when the processErrors option is not set', function () { @@ -102,7 +107,7 @@ manualPoller.run() - $httpBackend.flush(); + $timeout.flush(); }); }); @@ -119,7 +124,7 @@ manualPoller.run(); - $httpBackend.flush(); + $timeout.flush(); expect(processErrors.calls.count()).toEqual(1); expect(processErrors.calls.mostRecent().args[0]).toEqual({ diff --git a/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/script.js b/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/script.js index dbec3083..9ed69ce5 100644 --- a/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/script.js +++ b/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/script.js @@ -1,5 +1,5 @@ function deviceUtilities( - $http + api ) { return new DeviceUtilities(); @@ -21,7 +21,8 @@ function deviceUtilities( } function doAction(device, action, args) { - $http.post('/api/device', { + api({ + repository: 'device', action: action, parameters: Object.assign({ id: device.id, diff --git a/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/test.spec.js b/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/test.spec.js index 7f3d0d02..ad6d7c46 100644 --- a/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/test.spec.js +++ b/Roomie.Web.Frontend/src/angular/devices.data/deviceUtilities/test.spec.js @@ -1,13 +1,13 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { - var $http; + var api; var subject; beforeEach(angular.mock.module('roomie.devices.data')); beforeEach(angular.mock.module(function ($provide) { - $http = jasmine.createSpyObj('$http', ['post']); + api = jasmine.createSpy('api'); - $provide.value('$http', $http); + $provide.value('api', api); })); beforeEach(angular.mock.inject(function ($injector) { @@ -137,6 +137,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.binarySensor.poll(); expectApiCall({ + repository: 'device', action: 'binarySensorPoll', parameters: { id: 'the-device-id', @@ -150,6 +151,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.binarySwitch.setPower('on-or-off'); expectApiCall({ + repository: 'device', action: 'binarySwitchSetPower', parameters: { id: 'the-device-id', @@ -164,6 +166,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.colorSwitch.setValue('some-color'); expectApiCall({ + repository: 'device', action: 'colorSwitchSetValue', parameters: { id: 'the-device-id', @@ -178,6 +181,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.humiditySensor.poll(); expectApiCall({ + repository: 'device', action: 'humiditySensorPoll', parameters: { id: 'the-device-id', @@ -191,6 +195,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.illuminanceSensor.poll(); expectApiCall({ + repository: 'device', action: 'illuminanceSensorPoll', parameters: { id: 'the-device-id', @@ -204,6 +209,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.multilevelSwitch.setPower('some-value'); expectApiCall({ + repository: 'device', action: 'multilevelSwitchSetPower', parameters: { id: 'the-device-id', @@ -218,6 +224,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.powerSensor.poll(); expectApiCall({ + repository: 'device', action: 'powerSensorPoll', parameters: { id: 'the-device-id', @@ -231,6 +238,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.temperatureSensor.poll(); expectApiCall({ + repository: 'device', action: 'temperatureSensorPoll', parameters: { id: 'the-device-id', @@ -244,6 +252,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.thermostat.core.set('some-mode'); expectApiCall({ + repository: 'device', action: 'thermostatCoreSetMode', parameters: { id: 'the-device-id', @@ -258,6 +267,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { device.thermostat.fan.set('some-mode'); expectApiCall({ + repository: 'device', action: 'thermostatFanSetMode', parameters: { id: 'the-device-id', @@ -275,6 +285,7 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { }); expectApiCall({ + repository: 'device', action: 'thermostatSetpointsSetSetpoint', parameters: { id: 'the-device-id', @@ -285,8 +296,8 @@ describe('angular roomie.devices.data deviceUtilities (factory)', function () { }); function expectApiCall(request) { - expect($http.post).toHaveBeenCalledWith('/api/device', request); - expect($http.post.calls.count()).toEqual(1); + expect(api).toHaveBeenCalledWith(request); + expect(api.calls.count()).toEqual(1); } }); diff --git a/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/script.js b/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/script.js index ea401b9c..4feec863 100644 --- a/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/script.js +++ b/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/script.js @@ -1,7 +1,7 @@ import template from './template.html'; function deviceEditControls( - $http, + api, deviceTypes ) { @@ -30,7 +30,8 @@ function deviceEditControls( scope.types = deviceTypes; scope.save = function () { - $http.post('/api/device', { + api({ + repository: 'device', action: 'update', parameters: Object.assign({ id: scope.device.id diff --git a/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/test.spec.js b/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/test.spec.js index 84cec2b4..eaf5eaf1 100644 --- a/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/test.spec.js +++ b/Roomie.Web.Frontend/src/angular/devices/device-edit-controls/test.spec.js @@ -1,10 +1,13 @@ describe('angular roomie.devices device-edit-controls (directive)', function () { var $injector; - var $httpBackend; var $scope; + var api; var element; beforeEach(angular.mock.module('roomie.devices', function ($provide) { + api = jasmine.createSpy('api'); + + $provide.value('api', api); $provide.value('deviceTypes', [ 'Really Neat', 'Kinda Cool', @@ -14,7 +17,6 @@ describe('angular roomie.devices device-edit-controls (directive)', function () beforeEach(angular.mock.inject(function (_$injector_) { $injector = _$injector_; - $httpBackend = $injector.get('$httpBackend'); $scope = $injector.get('$rootScope').$new(); })); @@ -187,19 +189,15 @@ describe('angular roomie.devices device-edit-controls (directive)', function () describe('clicking', function () { - beforeEach(function () { - $httpBackend - .when('POST', '/api/device') - .respond({}); - }); - - afterEach(function () { - $httpBackend.verifyNoOutstandingExpectation(); - $httpBackend.verifyNoOutstandingRequest(); + afterEach(() => { + expect(api.calls.count()).toBe(1); }); it('should submit an API request', function () { - $httpBackend.expectPOST('/api/device', { + selectInput(3).click(); + + expect(api).toHaveBeenCalledWith({ + repository: 'device', action: 'update', parameters: { id: 5, @@ -207,11 +205,7 @@ describe('angular roomie.devices device-edit-controls (directive)', function () location: 'some/place', type: 'Kinda Cool', } - }); - - selectInput(3).click(); - - $httpBackend.flush(); + }) }); it('submits the latest name input', function () { @@ -219,7 +213,10 @@ describe('angular roomie.devices device-edit-controls (directive)', function () .val('Probably a Lamp') .triggerHandler('input'); - $httpBackend.expectPOST('/api/device', { + selectInput(3).click(); + + expect(api).toHaveBeenCalledWith({ + repository: 'device', action: 'update', parameters: { id: 5, @@ -228,10 +225,6 @@ describe('angular roomie.devices device-edit-controls (directive)', function () type: 'Kinda Cool', } }); - - selectInput(3).click(); - - $httpBackend.flush(); }); it('submits the latest location input', function () { @@ -239,7 +232,10 @@ describe('angular roomie.devices device-edit-controls (directive)', function () .val('some/place/else') .triggerHandler('input'); - $httpBackend.expectPOST('/api/device', { + selectInput(3).click(); + + expect(api).toHaveBeenCalledWith({ + repository: 'device', action: 'update', parameters: { id: 5, @@ -248,10 +244,6 @@ describe('angular roomie.devices device-edit-controls (directive)', function () type: 'Kinda Cool', } }); - - selectInput(3).click(); - - $httpBackend.flush(); }); it('submits the latest type input', function () { @@ -259,7 +251,10 @@ describe('angular roomie.devices device-edit-controls (directive)', function () .val(2) .triggerHandler('change'); - $httpBackend.expectPOST('/api/device', { + selectInput(3).click(); + + expect(api).toHaveBeenCalledWith({ + repository: 'device', action: 'update', parameters: { id: 5, @@ -268,10 +263,6 @@ describe('angular roomie.devices device-edit-controls (directive)', function () type: 'Just Terrible', } }); - - selectInput(3).click(); - - $httpBackend.flush(); }); }); diff --git a/Roomie.Web.Frontend/src/angular/help.pages/CommandDocumentationController/script.js b/Roomie.Web.Frontend/src/angular/help.pages/CommandDocumentationController/script.js index 64f165d4..38efa07c 100644 --- a/Roomie.Web.Frontend/src/angular/help.pages/CommandDocumentationController/script.js +++ b/Roomie.Web.Frontend/src/angular/help.pages/CommandDocumentationController/script.js @@ -1,5 +1,5 @@ function CommandDocumentationController( - $http, + api, wholePageStatus ) { @@ -7,11 +7,12 @@ function CommandDocumentationController( wholePageStatus.set('loading'); - $http.post('/api/commandDocumentation', { + api({ + repository: 'commandDocumentation', action: 'list', }) .then(function (response) { - controller.commands = response.data.data; + controller.commands = response.data; wholePageStatus.set('ready'); }); diff --git a/Roomie.Web.Frontend/src/angular/networks.pages/NetworkDetailController/script.js b/Roomie.Web.Frontend/src/angular/networks.pages/NetworkDetailController/script.js index e628acce..c12c8997 100644 --- a/Roomie.Web.Frontend/src/angular/networks.pages/NetworkDetailController/script.js +++ b/Roomie.Web.Frontend/src/angular/networks.pages/NetworkDetailController/script.js @@ -1,6 +1,6 @@ function NetworkDetailController( - $http, $state, + api, pageMenuItems, signInState, wholePageStatus @@ -11,14 +11,15 @@ function NetworkDetailController( wholePageStatus.set('loading'); pageMenuItems.reset(); - $http.post('/api/network', { + api({ + repository: 'network', action: 'read', parameters: { id: +$state.params.id, }, }) .then(function (result) { - controller.network = result.data.data; + controller.network = result.data; signInState.set('signed-in'); wholePageStatus.set('ready'); @@ -35,7 +36,6 @@ function NetworkDetailController( wholePageStatus.set('ready'); - //TODO: handle other errors }); } diff --git a/Roomie.Web.Frontend/src/angular/networks.pages/NetworkListController/script.js b/Roomie.Web.Frontend/src/angular/networks.pages/NetworkListController/script.js index bb18a480..ad60d97e 100644 --- a/Roomie.Web.Frontend/src/angular/networks.pages/NetworkListController/script.js +++ b/Roomie.Web.Frontend/src/angular/networks.pages/NetworkListController/script.js @@ -1,5 +1,5 @@ function NetworkListController( - $http, + api, pageMenuItems, signInState, wholePageStatus @@ -10,11 +10,12 @@ function NetworkListController( wholePageStatus.set('loading'); pageMenuItems.reset(); - $http.post('/api/network', { + api({ + repository: 'network', action: 'list', }) .then(function (result) { - controller.networks = result.data.data; + controller.networks = result.data; signInState.set('signed-in'); wholePageStatus.set('ready'); diff --git a/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js b/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js index 24b7ddaa..a67cfb7a 100644 --- a/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js +++ b/Roomie.Web.Frontend/src/angular/networks/network-edit-controls/script.js @@ -1,7 +1,7 @@ import template from './template.html'; function networkEditControls( - $http + api ) { return { @@ -22,7 +22,8 @@ function networkEditControls( }); function save() { - $http.post('/api/network', { + api({ + repository: 'network', action: 'update', parameters: scope.model, }); diff --git a/Roomie.Web.Frontend/src/angular/networks/network-widget/script.js b/Roomie.Web.Frontend/src/angular/networks/network-widget/script.js index 631fb96f..0fd26b3f 100644 --- a/Roomie.Web.Frontend/src/angular/networks/network-widget/script.js +++ b/Roomie.Web.Frontend/src/angular/networks/network-widget/script.js @@ -1,7 +1,7 @@ import template from './template.html'; function networkWidget( - $http + api ) { return { @@ -19,7 +19,8 @@ function networkWidget( scope.removeDevice = removeDevice; function addDevice() { - $http.post('/api/network', { + api({ + repository: 'network', action: 'addDevice', parameters: { id: scope.network.id @@ -28,7 +29,8 @@ function networkWidget( } function removeDevice() { - $http.post('/api/network', { + api({ + repository: 'network', action: 'removeDevice', parameters: { id: scope.network.id