| import './index'; |
| import { MachineServerSk } from './index'; |
| import fetchMock from 'fetch-mock'; |
| |
| fetchMock.config.overwriteRoutes = false; |
| |
| const assert = chai.assert; |
| |
| const container = document.createElement('div'); |
| document.body.appendChild(container); |
| |
| afterEach(() => { |
| container.innerHTML = ''; |
| }); |
| |
| describe('machine-server-sk', () => { |
| describe('loads data by fetch on connectedCallback', () => { |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'available', |
| Battery: 100, |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| it('fetches', () => |
| window.customElements.whenDefined('machine-server-sk').then(async () => { |
| container.innerHTML = '<machine-server-sk></machine-server-sk>'; |
| const s = container.firstElementChild; |
| |
| // Wait for the initial fetch to finish. |
| await fetchMock.flush(true); |
| // Each row has an id set to the machine id. |
| assert.isNotNull(s!.querySelector('#skia-rpi2-rack4-shelf1-002')); |
| })); |
| }); |
| |
| describe('toggles maintenance mode on click', () => { |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'available', |
| Battery: 100, |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| it('updates the mode when you click on the mode button', () => |
| window.customElements.whenDefined('machine-server-sk').then(async () => { |
| container.innerHTML = '<machine-server-sk></machine-server-sk>'; |
| const s = container.firstElementChild; |
| |
| // Wait for the initial fetch to finish. |
| await fetchMock.flush(true); |
| |
| // Now set up fetchMock for the requests that happen when the button is clicked. |
| fetchMock.reset(); |
| fetchMock.get('/_/machine/toggle_mode/skia-rpi2-rack4-shelf1-002', 200); |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'maintenance', |
| Battery: 100, |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| // Click the button. |
| const button = s!.querySelector<HTMLButtonElement>('button.mode')!; |
| button.click(); |
| |
| // Wait for all requests to finish. |
| await fetchMock.flush(true); |
| |
| // Confirm the button text has been updated. |
| assert.equal('maintenance', button.textContent?.trim()); |
| })); |
| }); |
| |
| describe('toggles ScheduledForDeletion on click', () => { |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'available', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: '', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| it('updates ScheduledForDeletion when you click on the update button', () => |
| window.customElements.whenDefined('machine-server-sk').then(async () => { |
| container.innerHTML = '<machine-server-sk></machine-server-sk>'; |
| const s = container.firstElementChild; |
| |
| // Wait for the initial fetch to finish. |
| await fetchMock.flush(true); |
| |
| // Now set up fetchMock for the requests that happen when the button is clicked. |
| fetchMock.reset(); |
| fetchMock.get( |
| '/_/machine/toggle_update/skia-rpi2-rack4-shelf1-002', |
| 200 |
| ); |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'maintenance', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: 'rpi-swarming-123456-987', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| // Click the button. |
| const button = s!.querySelector<HTMLButtonElement>('button.update')!; |
| button.click(); |
| |
| // Wait for all requests to finish. |
| await fetchMock.flush(true); |
| |
| // Confirm the button text has been updated. |
| assert.equal('Waiting for update.', button.textContent?.trim()); |
| })); |
| }); |
| |
| describe('toggles refresh mode on click', () => { |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'available', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: '', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| it('starts requesting updates when you click on the refresh button', () => |
| window.customElements.whenDefined('machine-server-sk').then(async () => { |
| container.innerHTML = '<machine-server-sk></machine-server-sk>'; |
| const s = container.firstElementChild as MachineServerSk; |
| |
| // Wait for the initial fetch to finish. |
| await fetchMock.flush(true); |
| |
| // Now set up fetchMock for the requests that happen when the button is clicked. |
| fetchMock.reset(); |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'maintenance', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: 'rpi-swarming-123456-987', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| // Click the button. |
| const button = s!.querySelector<HTMLButtonElement>('#refresh')!; |
| button.click(); |
| |
| // Wait for all requests to finish. |
| await fetchMock.flush(true); |
| |
| // Confirm that setTimeout is in progress. |
| assert.notEqual(0, s._timeout); |
| // Confirm we are displaying the right icon. |
| assert.isNotNull(s!.querySelector('pause-icon-sk')); |
| })); |
| }); |
| |
| describe('toggles PowerCycle on click', () => { |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'available', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: '', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| PowerCycle: false, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| it('updates PowerCycle when you click on the button', () => |
| window.customElements.whenDefined('machine-server-sk').then(async () => { |
| container.innerHTML = '<machine-server-sk></machine-server-sk>'; |
| const s = container.firstElementChild; |
| |
| // Wait for the initial fetch to finish. |
| await fetchMock.flush(true); |
| |
| // Now set up fetchMock for the requests that happen when the button is clicked. |
| fetchMock.reset(); |
| fetchMock.get( |
| '/_/machine/toggle_powercycle/skia-rpi2-rack4-shelf1-002', |
| 200 |
| ); |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'maintenance', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: 'rpi-swarming-123456-987', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| PowerCycle: true, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| // Click the button. |
| const button = s!.querySelector<HTMLElement>( |
| 'power-settings-new-icon-sk' |
| )!; |
| button.click(); |
| |
| // Wait for all requests to finish. |
| await fetchMock.flush(true); |
| |
| // Confirm the button text has been updated. |
| assert.equal( |
| 'Waiting for Power Cycle', |
| s!.querySelector('.powercycle')?.textContent?.trim() |
| ); |
| })); |
| }); |
| |
| describe('clears Dimensions on click', () => { |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'available', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: '', |
| Dimensions: { |
| id: ['skia-rpi2-rack4-shelf1-002'], |
| android_devices: ['1'], |
| device_os: ['H', 'HUAWEIELE-L29'], |
| }, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| PowerCycle: false, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| it('updates PowerCycle when you click on the button', () => |
| window.customElements.whenDefined('machine-server-sk').then(async () => { |
| container.innerHTML = '<machine-server-sk></machine-server-sk>'; |
| const s = container.firstElementChild; |
| |
| // Wait for the initial fetch to finish. |
| await fetchMock.flush(true); |
| |
| // Confirm there are row in the dimensions. |
| assert.isNotNull(s!.querySelector('details.dimensions table tr')); |
| |
| // Now set up fetchMock for the requests that happen when the button is clicked. |
| fetchMock.reset(); |
| fetchMock.get( |
| '/_/machine/remove_device/skia-rpi2-rack4-shelf1-002', |
| 200 |
| ); |
| fetchMock.get('/_/machines', [ |
| { |
| Mode: 'maintenance', |
| Battery: 100, |
| PodName: 'rpi-swarming-123456-987', |
| ScheduledForDeletion: 'rpi-swarming-123456-987', |
| Dimensions: {}, |
| Annotation: { |
| User: '', |
| Message: '', |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| }, |
| PowerCycle: true, |
| LastUpdated: '2020-04-21T17:33:09.638275Z', |
| Temperature: { dumpsys_battery: 26 }, |
| }, |
| ]); |
| |
| // Click the button. |
| const button = s!.querySelector<HTMLElement>('clear-icon-sk')!; |
| button.click(); |
| |
| // Wait for all requests to finish. |
| await fetchMock.flush(true); |
| |
| // Confirm the dimensions are now empty. |
| assert.isNull(s!.querySelector('details.dimensions table tr')); |
| })); |
| }); |
| }); |