pgadmin4/web/regression/javascript/tree/pgadmin_tree_node_spec.js
2020-01-02 14:43:50 +00:00

364 lines
11 KiB
JavaScript

//////////////////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2020, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////////////////
import {
getTreeNodeHierarchyFromElement,
getTreeNodeHierarchyFromIdentifier,
} from '../../../pgadmin/static/js/tree/pgadmin_tree_node';
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
import {TreeFake} from './tree_fake';
const context = describe;
describe('tree#node#getTreeNodeHierarchy', () => {
let browser;
let newTree;
beforeEach(() => {
newTree = new TreeFake();
browser = {
Nodes: {
'special one': {hasId: true},
'child special': {hasId: true},
'other type': {hasId: true},
'table': {hasId: true},
'partition': {hasId: true},
'no id': {hasId: false},
},
};
browser.treeMenu = newTree;
});
context('getTreeNodeHierarchy is called with aciTreeNode object', () => {
describe('When the current node is root element', () => {
beforeEach(() => {
newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
});
});
it('returns a object with the element type passed data and priority == 0', () => {
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id: 'root'}]);
expect(result).toEqual({
'special one': {
'some key': 'some value',
'_type': 'special one',
'priority': 0,
},
});
});
});
describe('When the current node is not of a known type', () => {
beforeEach(() => {
newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'do not exist',
}, []);
});
it('returns a empty object', () => {
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)('root');
expect(result).toEqual({});
});
});
describe('When the current node type has no id', () => {
beforeEach(() => {
newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'no id',
}, []);
});
it('returns a empty object', () => {
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)('root');
expect(result).toEqual({});
});
});
describe('When the current node is at the second level', () => {
beforeEach(() => {
const root = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
});
const firstChild = new TreeNode('first child', {
'some key': 'some other value',
'_type': 'child special',
}, ['root']);
newTree.addChild(root, firstChild);
});
it('returns a empty object', () => {
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id: 'first child'}]);
expect(result).toEqual({
'child special': {
'some key': 'some other value',
'_type': 'child special',
'priority': 0,
},
'special one': {
'some key': 'some value',
'_type': 'special one',
'priority': -1,
},
});
});
});
context('When tree as "special type"', () => {
context('When "special type" have "other type"', () => {
context('When "other type" have "special type"', () => {
describe('When retrieving lead node', () => {
it('does not override previous node type data', () => {
const rootNode = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
}, []);
const level1 = new TreeNode('level 1', {
'some key': 'some value',
'_type': 'other type',
});
newTree.addChild(rootNode, level1);
newTree.addChild(level1, new TreeNode('level 2', {
'some key': 'expected value',
'_type': 'special one',
'some other key': 'some other value',
}));
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id: 'level 2'}]);
expect(result).toEqual({
'special one': {
'some key': 'expected value',
'_type': 'special one',
'some other key': 'some other value',
'priority': 0,
},
'other type': {
'some key': 'some value',
'_type': 'other type',
'priority': -1,
},
});
});
});
});
});
});
context('When tree has table', () => {
context('when table has partition', () => {
it('returns table with partition parameters', () => {
const root = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
}, []);
const level1 = new TreeNode('level 1', {
'some key': 'some value',
'_type': 'table',
});
newTree.addChild(root, level1);
newTree.addChild(level1, new TreeNode('level 2', {
'some key': 'expected value',
'_type': 'partition',
'some other key': 'some other value',
}));
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id:'level 2'}]);
expect(result).toEqual({
'special one': {
'some key': 'some value',
'_type': 'special one',
'priority': -2,
},
'table': {
'some key': 'some value',
'_type': 'table',
'priority': -1,
},
'partition': {
'some key': 'expected value',
'some other key': 'some other value',
'_type': 'partition',
'priority': 0,
},
});
});
});
});
});
context('getTreeNodeHierarchy is called with TreeNode object', () => {
let treeNode;
describe('When the current node is root element', () => {
beforeEach(() => {
treeNode = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
}, []);
});
it('returns a object with the element type passed data and priority == 0', () => {
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
expect(result).toEqual({
'special one': {
'some key': 'some value',
'_type': 'special one',
'priority': 0,
},
});
});
});
describe('When the current node is not of a known type', () => {
beforeEach(() => {
treeNode = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'do not exist',
}, []);
});
it('returns a empty object', () => {
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
expect(result).toEqual({});
});
});
describe('When the current node type has no id', () => {
beforeEach(() => {
treeNode = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'no id',
}, []);
});
it('returns a empty object', () => {
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
expect(result).toEqual({});
});
});
describe('When the current node is at the second level', () => {
beforeEach(() => {
const root = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
}, []);
treeNode = new TreeNode('first child', {
'some key': 'some other value',
'_type': 'child special',
});
newTree.addChild(root, treeNode);
});
it('returns a empty object', () => {
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
expect(result).toEqual({
'child special': {
'some key': 'some other value',
'_type': 'child special',
'priority': 0,
},
'special one': {
'some key': 'some value',
'_type': 'special one',
'priority': -1,
},
});
});
});
context('When tree as "special type"', () => {
context('When "special type" have "other type"', () => {
context('When "other type" have "special type"', () => {
describe('When retrieving lead node', () => {
it('does not override previous node type data', () => {
const root = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
}, []);
const level1 = new TreeNode('level 1', {
'some key': 'some value',
'_type': 'other type',
});
newTree.addChild(root, level1);
treeNode = new TreeNode('level 2', {
'some key': 'expected value',
'_type': 'special one',
'some other key': 'some other value',
});
newTree.addChild(level1, treeNode);
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
expect(result).toEqual({
'special one': {
'some key': 'expected value',
'_type': 'special one',
'some other key': 'some other value',
'priority': 0,
},
'other type': {
'some key': 'some value',
'_type': 'other type',
'priority': -1,
},
});
});
});
});
});
});
context('When tree has table', () => {
context('when table has partition', () => {
it('returns table with partition parameters', () => {
const root = newTree.addNewNode('root', {
'some key': 'some value',
'_type': 'special one',
});
const level1 = newTree.addNewNode('level 1', {
'some key': 'some value',
'_type': 'table',
});
newTree.addChild(root, level1);
treeNode = new TreeNode('level 2', {
'some key': 'expected value',
'_type': 'partition',
'some other key': 'some other value',
});
newTree.addChild(level1, treeNode);
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
expect(result).toEqual({
'special one': {
'some key': 'some value',
'_type': 'special one',
'priority': -2,
},
'table': {
'some key': 'some value',
'_type': 'table',
'priority': -1,
},
'partition': {
'some key': 'expected value',
'some other key': 'some other value',
'_type': 'partition',
'priority': 0,
},
});
});
});
});
});
});