Files
scratch-gui/test/unit/util/cloud-provider.test.js
T

88 lines
2.5 KiB
JavaScript

import CloudProvider from '../../../src/lib/cloud-provider';
// Disable window.WebSocket
global.WebSocket = null;
describe('CloudProvider', () => {
let cloudProvider = null;
let sentMessage = null;
let vmIOData = [];
beforeEach(() => {
vmIOData = [];
cloudProvider = new CloudProvider();
// Stub connection
cloudProvider.connection = {
send: msg => {
sentMessage = msg;
}
};
// Stub vm
cloudProvider.vm = {
postIOData: (_namespace, data) => {
vmIOData.push(data);
}
};
});
test('updateVariable', () => {
cloudProvider.updateVariable('hello', 1);
const obj = JSON.parse(sentMessage);
expect(obj.method).toEqual('set');
expect(obj.name).toEqual('hello');
expect(obj.value).toEqual(1);
});
test('updateVariable with falsey value', () => {
cloudProvider.updateVariable('hello', 0);
const obj = JSON.parse(sentMessage);
expect(obj.method).toEqual('set');
expect(obj.name).toEqual('hello');
expect(obj.value).toEqual(0);
});
test('writeToServer with falsey index value', () => {
cloudProvider.writeToServer('method', 'name', 5, 0);
const obj = JSON.parse(sentMessage);
expect(obj.method).toEqual('method');
expect(obj.name).toEqual('name');
expect(obj.value).toEqual(5);
expect(obj.index).toEqual(0);
});
test('onMessage ack', () => {
const msg = JSON.stringify({
method: 'ack',
name: 'name'
});
cloudProvider.onMessage({data: msg});
expect(vmIOData[0].varCreate.name).toEqual('name');
});
test('onMessage set', () => {
const msg = JSON.stringify({
method: 'set',
name: 'name',
value: 'value'
});
cloudProvider.onMessage({data: msg});
expect(vmIOData[0].varUpdate.name).toEqual('name');
expect(vmIOData[0].varUpdate.value).toEqual('value');
});
test('onMessage with multiple commands', () => {
const msg1 = JSON.stringify({
method: 'set',
name: 'name1',
value: 'value'
});
const msg2 = JSON.stringify({
method: 'ack',
name: 'name2'
});
cloudProvider.onMessage({data: `${msg1}\n${msg2}`});
expect(vmIOData[0].varUpdate.name).toEqual('name1');
expect(vmIOData[1].varCreate.name).toEqual('name2');
});
});