Files
noodl/packages/noodl-editor/tests/project/projectmodel.js
Michael Cartner b9c60b07dc Initial commit
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com>
Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com>
Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com>
Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com>
Co-Authored-By: Johan  <4934465+joolsus@users.noreply.github.com>
Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com>
Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
2024-01-26 11:52:55 +01:00

176 lines
4.1 KiB
JavaScript

const NodeLibrary = require('@noodl-models/nodelibrary').NodeLibrary;
const { ProjectModel } = require('@noodl-models/projectmodel');
const WarningsModel = require('@noodl-models/warningsmodel').WarningsModel;
describe('Project model tests', function () {
it('can upgrade from 0 to 1', function () {
var p = ProjectModel.fromJSON(project0);
// Project upgrader from 0 to 1 should replace = types with * types
var json = JSON.stringify(p.toJSON());
expect(json.indexOf('=')).toBe(-1);
expect(json.match(/\*/g).length).toBe(2);
});
xit('can apply patch', function () {
var p = ProjectModel.fromJSON(project1);
// Apply patch
p.applyPatch({
askPermission: false,
notifyUser: false,
nodePatches: [
{
nodeId: 'A',
typename: 'group',
version: 3,
params: {
x: 20,
alignX: null,
alignY: 'top'
}
}
]
});
expect(p.findNodeWithId('A').type instanceof NodeLibrary.BasicNodeType).toBe(true);
expect(p.findNodeWithId('A').type.name).toBe('group');
expect(p.findNodeWithId('A').version).toBe(3);
expect(p.findNodeWithId('A').getParameter('x')).toBe(20);
expect(p.findNodeWithId('A').getParameter('alignX')).toBe(undefined);
expect(p.findNodeWithId('A').getParameter('alignY')).toBe('top');
// Ask permission, should not apply patch immediately
p.applyPatch({
key: 'a',
askPermission: true,
notifyUser: false,
nodePatches: [
{
nodeId: 'A',
params: {
alignY: 'bottom'
}
}
],
dismissPatches: [
{
nodeId: 'A',
params: {
alignY: null
}
}
]
});
expect(WarningsModel.instance.warnings['/']['/']['patch-a']).not.toBe(undefined); // Warnings should be generated
expect(p.findNodeWithId('A').getParameter('alignY')).toBe('top');
// Emulate user clicking patch
WarningsModel.instance.warnings['/']['/']['patch-a'].warning.onPatch();
expect(p.findNodeWithId('A').getParameter('alignY')).toBe('bottom');
// Ask permission, should not apply patch immediately
p.applyPatch({
key: 'a',
askPermission: true,
notifyUser: false,
nodePatches: [],
dismissPatches: [
{
nodeId: 'A',
params: {
alignY: null
}
}
]
});
// Emulate user clicking dismiss
WarningsModel.instance.warnings['/']['/']['patch-a'].warning.onDismiss();
expect(p.findNodeWithId('A').getParameter('alignY')).toBe(undefined);
});
xit('can apply settings patch', function () {
var p = ProjectModel.fromJSON(project1);
p.applyPatch({
askPermission: false,
notifyUser: false,
settingsPatch: {
s1: null,
s2: 'Wohoo'
}
});
expect(p.getSettings().s1).toBe(undefined);
expect(p.getSettings().s2).toBe('Wohoo');
});
// Project that should be patched
var project1 = {
components: [
{
name: 'comp1',
graph: {
roots: [
{
id: 'A',
type: 'image',
parameters: {
x: 10,
alignX: 'left'
}
}
]
},
settings: {
s1: 'Hello'
}
}
]
};
// Old project model that should be upgraded
var project0 = {
components: [
{
name: 'comp1',
graph: {
roots: [
{
id: 'ES-1',
type: 'Event Sender',
ports: [
{
type: '=',
name: 'a port'
}
]
}
]
}
},
{
name: 'comp2',
graph: {
roots: [
{
id: 'ES-1',
type: 'Event Sender',
ports: [
{
type: {
name: '='
},
name: 'a port'
}
]
}
]
}
}
]
};
});