mirror of
https://github.com/nasa/openmct.git
synced 2025-06-16 06:08:11 +00:00
* making move action location check persistability * adding persistence check instead of creatability for styles * added check for link action to make sure parent is persistable * debug * adding parent to link action and move action form location controls so they can be used in the form * adding parent persistability check for duplicate * updating multilple actions appliesTo methods to check for persistability * updated the tree to not require an initial selection if being used in a form * remove noneditable folder plugin * added persistence check for the parent, in the create wizard * minor name change * removing noneditabl folder from default plugins as well * checking the correct parent for persistability in create wizard * importing file-saver correctly * updated tests for import as json * changes addressing PR review: using consts, removing comments, removing unneccessary code Co-authored-by: Scott Bell <scott@traclabs.com>
326 lines
10 KiB
JavaScript
326 lines
10 KiB
JavaScript
import {
|
|
createOpenMct,
|
|
resetApplicationState
|
|
} from 'utils/testing';
|
|
|
|
describe('Export as JSON plugin', () => {
|
|
const ACTION_KEY = 'export.JSON';
|
|
|
|
let openmct;
|
|
let domainObject;
|
|
let exportAsJSONAction;
|
|
|
|
beforeEach((done) => {
|
|
openmct = createOpenMct();
|
|
|
|
openmct.on('start', done);
|
|
openmct.startHeadless();
|
|
|
|
exportAsJSONAction = openmct.actions.getAction(ACTION_KEY);
|
|
});
|
|
|
|
afterEach(() => resetApplicationState(openmct));
|
|
|
|
it('Export as JSON action exist', () => {
|
|
expect(exportAsJSONAction.key).toEqual(ACTION_KEY);
|
|
});
|
|
|
|
it('ExportAsJSONAction applies to folder', () => {
|
|
domainObject = {
|
|
identifier: {
|
|
key: 'export-testing',
|
|
namespace: ''
|
|
},
|
|
composition: [],
|
|
location: 'mine',
|
|
modified: 1640115501237,
|
|
name: 'Unnamed Folder',
|
|
persisted: 1640115501237,
|
|
type: 'folder'
|
|
};
|
|
|
|
expect(exportAsJSONAction.appliesTo([domainObject])).toEqual(true);
|
|
});
|
|
|
|
it('ExportAsJSONAction applies to telemetry.plot.overlay', () => {
|
|
domainObject = {
|
|
identifier: {
|
|
key: 'export-testing',
|
|
namespace: ''
|
|
},
|
|
composition: [],
|
|
location: 'mine',
|
|
modified: 1640115501237,
|
|
name: 'Unnamed Plot',
|
|
persisted: 1640115501237,
|
|
type: 'telemetry.plot.overlay'
|
|
};
|
|
|
|
expect(exportAsJSONAction.appliesTo([domainObject])).toEqual(true);
|
|
});
|
|
|
|
it('ExportAsJSONAction applies to telemetry.plot.stacked', () => {
|
|
domainObject = {
|
|
identifier: {
|
|
key: 'export-testing',
|
|
namespace: ''
|
|
},
|
|
composition: [],
|
|
location: 'mine',
|
|
modified: 1640115501237,
|
|
name: 'Unnamed Plot',
|
|
persisted: 1640115501237,
|
|
type: 'telemetry.plot.stacked'
|
|
};
|
|
|
|
expect(exportAsJSONAction.appliesTo([domainObject])).toEqual(true);
|
|
});
|
|
|
|
it('ExportAsJSONAction does not applie to non-persistable objects', () => {
|
|
domainObject = {
|
|
identifier: {
|
|
key: 'export-testing',
|
|
namespace: ''
|
|
},
|
|
composition: [],
|
|
location: 'mine',
|
|
modified: 1640115501237,
|
|
name: 'Non Editable Folder',
|
|
persisted: 1640115501237,
|
|
type: 'folder'
|
|
};
|
|
|
|
spyOn(openmct.objects, 'getProvider').and.callFake(() => {
|
|
return { get: () => domainObject };
|
|
});
|
|
|
|
expect(exportAsJSONAction.appliesTo([domainObject])).toEqual(false);
|
|
});
|
|
|
|
it('ExportAsJSONAction exports object from tree', (done) => {
|
|
const parent = {
|
|
composition: [{
|
|
key: 'child',
|
|
namespace: ''
|
|
}],
|
|
identifier: {
|
|
key: 'parent',
|
|
namespace: ''
|
|
},
|
|
name: 'Parent',
|
|
type: 'folder',
|
|
modified: 1503598129176,
|
|
location: 'mine',
|
|
persisted: 1503598129176
|
|
};
|
|
|
|
const child = {
|
|
composition: [],
|
|
identifier: {
|
|
key: 'child',
|
|
namespace: ''
|
|
},
|
|
name: 'Child',
|
|
type: 'folder',
|
|
modified: 1503598132428,
|
|
location: 'parent',
|
|
persisted: 1503598132428
|
|
};
|
|
|
|
spyOn(openmct.composition, 'get').and.callFake(object => {
|
|
return {
|
|
load: () => {
|
|
if (object.name === 'Parent') {
|
|
return Promise.resolve([child]);
|
|
}
|
|
|
|
return Promise.resolve([]);
|
|
}
|
|
};
|
|
});
|
|
|
|
spyOn(exportAsJSONAction, '_saveAs').and.callFake(completedTree => {
|
|
expect(Object.keys(completedTree).length).toBe(2);
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'openmct')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'rootId')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'parent')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'child')).toBeTruthy();
|
|
|
|
done();
|
|
});
|
|
|
|
exportAsJSONAction.invoke([parent]);
|
|
});
|
|
|
|
it('ExportAsJSONAction skips non-creatable objects from tree', (done) => {
|
|
const parent = {
|
|
composition: [{
|
|
key: 'child',
|
|
namespace: ''
|
|
}],
|
|
identifier: {
|
|
key: 'parent',
|
|
namespace: ''
|
|
},
|
|
name: 'Parent of Non Editable Child Folder',
|
|
type: 'folder',
|
|
modified: 1503598129176,
|
|
location: 'mine',
|
|
persisted: 1503598129176
|
|
};
|
|
|
|
const child = {
|
|
composition: [],
|
|
identifier: {
|
|
key: 'child',
|
|
namespace: ''
|
|
},
|
|
name: 'Non Editable Child Folder',
|
|
type: 'noneditable.folder',
|
|
modified: 1503598132428,
|
|
location: 'parent',
|
|
persisted: 1503598132428
|
|
};
|
|
|
|
spyOn(openmct.composition, 'get').and.callFake(object => {
|
|
return {
|
|
load: () => {
|
|
if (object.identifier.key === 'parent') {
|
|
return Promise.resolve([child]);
|
|
}
|
|
|
|
return Promise.resolve([]);
|
|
}
|
|
};
|
|
});
|
|
|
|
spyOn(exportAsJSONAction, '_saveAs').and.callFake(completedTree => {
|
|
expect(Object.keys(completedTree).length).toBe(2);
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'openmct')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'rootId')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'parent')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'child')).not.toBeTruthy();
|
|
|
|
done();
|
|
});
|
|
|
|
exportAsJSONAction.invoke([parent]);
|
|
});
|
|
|
|
it('can export self-containing objects', (done) => {
|
|
const parent = {
|
|
composition: [{
|
|
key: 'infinteChild',
|
|
namespace: ''
|
|
}],
|
|
identifier: {
|
|
key: 'infiniteParent',
|
|
namespace: ''
|
|
},
|
|
name: 'parent',
|
|
type: 'folder',
|
|
modified: 1503598129176,
|
|
location: 'mine',
|
|
persisted: 1503598129176
|
|
};
|
|
|
|
const child = {
|
|
composition: [{
|
|
key: 'infiniteParent',
|
|
namespace: ''
|
|
}],
|
|
identifier: {
|
|
key: 'infinteChild',
|
|
namespace: ''
|
|
},
|
|
name: 'child',
|
|
type: 'folder',
|
|
modified: 1503598132428,
|
|
location: 'infiniteParent',
|
|
persisted: 1503598132428
|
|
};
|
|
|
|
spyOn(openmct.composition, 'get').and.callFake(object => {
|
|
return {
|
|
load: () => {
|
|
if (object.name === 'parent') {
|
|
return Promise.resolve([child]);
|
|
}
|
|
|
|
return Promise.resolve([]);
|
|
}
|
|
};
|
|
});
|
|
|
|
spyOn(exportAsJSONAction, '_saveAs').and.callFake(completedTree => {
|
|
expect(Object.keys(completedTree).length).toBe(2);
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'openmct')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'rootId')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'infiniteParent')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'infinteChild')).toBeTruthy();
|
|
|
|
done();
|
|
});
|
|
|
|
exportAsJSONAction.invoke([parent]);
|
|
});
|
|
|
|
it('exports links to external objects as new objects', function (done) {
|
|
const parent = {
|
|
composition: [{
|
|
key: 'child',
|
|
namespace: ''
|
|
}],
|
|
identifier: {
|
|
key: 'parent',
|
|
namespace: ''
|
|
},
|
|
name: 'Parent',
|
|
type: 'folder',
|
|
modified: 1503598129176,
|
|
location: 'mine',
|
|
persisted: 1503598129176
|
|
};
|
|
|
|
const child = {
|
|
composition: [],
|
|
identifier: {
|
|
key: 'child',
|
|
namespace: ''
|
|
},
|
|
name: 'Child',
|
|
type: 'folder',
|
|
modified: 1503598132428,
|
|
location: 'outsideOfTree',
|
|
persisted: 1503598132428
|
|
};
|
|
|
|
spyOn(openmct.composition, 'get').and.callFake(object => {
|
|
return {
|
|
load: () => {
|
|
if (object.name === 'Parent') {
|
|
return Promise.resolve([child]);
|
|
}
|
|
|
|
return Promise.resolve([]);
|
|
}
|
|
};
|
|
});
|
|
|
|
spyOn(exportAsJSONAction, '_saveAs').and.callFake(completedTree => {
|
|
expect(Object.keys(completedTree).length).toBe(2);
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'openmct')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree, 'rootId')).toBeTruthy();
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'parent')).toBeTruthy();
|
|
|
|
// parent and child objects as part of openmct but child with new id/key
|
|
expect(Object.prototype.hasOwnProperty.call(completedTree.openmct, 'child')).not.toBeTruthy();
|
|
expect(Object.keys(completedTree.openmct).length).toBe(2);
|
|
|
|
done();
|
|
});
|
|
|
|
exportAsJSONAction.invoke([parent]);
|
|
});
|
|
});
|