Files

161 lines
4.9 KiB
JavaScript

const {test} = require('node:test');
const assert = require('node:assert');
const Cloud = require('../../src/io/cloud');
const Target = require('../../src/engine/target');
const Variable = require('../../src/engine/variable');
const Runtime = require('../../src/engine/runtime');
test('spec', () => {
const runtime = new Runtime();
const cloud = new Cloud(runtime);
assert.strictEqual(typeof cloud, 'object');
assert.strictEqual(typeof cloud.postData, 'function');
assert.strictEqual(typeof cloud.requestCreateVariable, 'function');
assert.strictEqual(typeof cloud.requestUpdateVariable, 'function');
assert.strictEqual(typeof cloud.requestRenameVariable, 'function');
assert.strictEqual(typeof cloud.requestDeleteVariable, 'function');
assert.strictEqual(typeof cloud.updateCloudVariable, 'function');
assert.strictEqual(typeof cloud.setProvider, 'function');
assert.strictEqual(typeof cloud.setStage, 'function');
assert.strictEqual(typeof cloud.clear, 'function');
});
test('stage and provider are null initially', () => {
const runtime = new Runtime();
const cloud = new Cloud(runtime);
assert.strictEqual(cloud.provider, null);
assert.strictEqual(cloud.stage, null);
});
test('setProvider sets the provider', () => {
const runtime = new Runtime();
const cloud = new Cloud(runtime);
const provider = {
foo: 'a fake provider'
};
cloud.setProvider(provider);
assert.strictEqual(cloud.provider, provider);
});
test('postData update message updates the variable', () => {
const runtime = new Runtime();
const stage = new Target(runtime);
const fooVar = Variable.create(
'a fake var id',
'foo',
Variable.SCALAR_TYPE,
true /* isCloud */
);
stage.variables[fooVar.id] = fooVar;
assert.strictEqual(fooVar.value, 0);
const cloud = new Cloud(runtime);
cloud.setStage(stage);
cloud.postData({varUpdate: {
name: 'foo',
value: 3
}});
assert.strictEqual(fooVar.value, 3);
});
test('requestUpdateVariable calls provider\'s updateVariable function', () => {
let updateVariableCalled = false;
let mockVarName = '';
let mockVarValue = '';
const mockUpdateVariable = (name, value) => {
updateVariableCalled = true;
mockVarName = name;
mockVarValue = value;
return;
};
const provider = {
updateVariable: mockUpdateVariable
};
const runtime = new Runtime();
const cloud = new Cloud(runtime);
cloud.setProvider(provider);
cloud.requestUpdateVariable('foo', 3);
assert.strictEqual(updateVariableCalled, true);
assert.strictEqual(mockVarName, 'foo');
assert.strictEqual(mockVarValue, 3);
});
test('requestCreateVariable calls provider\'s createVariable function', () => {
let createVariableCalled = false;
const mockVariable = Variable.create('a var id', 'my var', Variable.SCALAR_TYPE, false);
let mockVarName;
let mockVarValue;
const mockCreateVariable = (name, value) => {
createVariableCalled = true;
mockVarName = name;
mockVarValue = value;
return;
};
const provider = {
createVariable: mockCreateVariable
};
const runtime = new Runtime();
const cloud = new Cloud(runtime);
cloud.setProvider(provider);
cloud.requestCreateVariable(mockVariable);
assert.strictEqual(createVariableCalled, true);
assert.strictEqual(mockVarName, 'my var');
assert.strictEqual(mockVarValue, 0);
// Calling requestCreateVariable does not set isCloud flag on variable
assert.strictEqual(mockVariable.isCloud, false);
});
test('requestRenameVariable calls provider\'s renameVariable function', () => {
let renameVariableCalled = false;
let mockVarOldName;
let mockVarNewName;
const mockRenameVariable = (oldName, newName) => {
renameVariableCalled = true;
mockVarOldName = oldName;
mockVarNewName = newName;
return;
};
const provider = {
renameVariable: mockRenameVariable
};
const runtime = new Runtime();
const cloud = new Cloud(runtime);
cloud.setProvider(provider);
cloud.requestRenameVariable('my var', 'new var name');
assert.strictEqual(renameVariableCalled, true);
assert.strictEqual(mockVarOldName, 'my var');
assert.strictEqual(mockVarNewName, 'new var name');
});
test('requestDeleteVariable calls provider\'s deleteVariable function', () => {
let deleteVariableCalled = false;
let mockVarName;
const mockDeleteVariable = name => {
deleteVariableCalled = true;
mockVarName = name;
return;
};
const provider = {
deleteVariable: mockDeleteVariable
};
const runtime = new Runtime();
const cloud = new Cloud(runtime);
cloud.setProvider(provider);
cloud.requestDeleteVariable('my var');
assert.strictEqual(deleteVariableCalled, true);
assert.strictEqual(mockVarName, 'my var');
});