mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Save the treeview state periodically, and restore it automatically when reconnecting. Fixes #1253
This commit is contained in:
committed by
Dave Page
parent
44ef501283
commit
528ea88dec
242
web/regression/javascript/tree/pgadmin_tree_state_save_spec.js
Normal file
242
web/regression/javascript/tree/pgadmin_tree_state_save_spec.js
Normal file
@@ -0,0 +1,242 @@
|
||||
/////////////////////////////////////////////////////////////
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
import {pgBrowser, browserTreeState} from '../../../pgadmin/static/js/tree/pgadmin_tree_save_state';
|
||||
|
||||
|
||||
describe('#browserTreeState', () => {
|
||||
beforeEach(() => {
|
||||
pgBrowser.Nodes = {
|
||||
server_group: {
|
||||
_type: 'server_group',
|
||||
hasId: true,
|
||||
id: 'server_group/1',
|
||||
_id: 1,
|
||||
getTreeNodeHierarchy: function() { return {
|
||||
server_group: {
|
||||
_type: 'server_group',
|
||||
hasId: true,
|
||||
id: 'server_group/1',
|
||||
_id: 1,
|
||||
},
|
||||
};},
|
||||
},
|
||||
server: {
|
||||
_type: 'server',
|
||||
hasId: true,
|
||||
id: 'server/1',
|
||||
_id: 1,
|
||||
getTreeNodeHierarchy: function() { return {
|
||||
server_group: {
|
||||
_type: 'server_group',
|
||||
hasId: true,
|
||||
id: 'server_group/1',
|
||||
_id: 1,
|
||||
},
|
||||
server: {
|
||||
_type: 'server',
|
||||
hasId: true,
|
||||
id: 'server/1',
|
||||
_id: 1,
|
||||
},
|
||||
};},
|
||||
},
|
||||
coll_database: {
|
||||
_type: 'coll_database',
|
||||
hasId: false,
|
||||
id: 'coll_database/1',
|
||||
_id: 1,
|
||||
getTreeNodeHierarchy: function() { return {
|
||||
server_group: {
|
||||
_type: 'server_group',
|
||||
hasId: true,
|
||||
id: 'server_group/1',
|
||||
_id: 1,
|
||||
},
|
||||
server: {
|
||||
_type: 'server',
|
||||
hasId: true,
|
||||
id: 'server/1',
|
||||
_id: 1,
|
||||
},
|
||||
coll_database: {
|
||||
_type: 'coll_database',
|
||||
hasId: true,
|
||||
id: 'coll_database/1',
|
||||
_id: 1,
|
||||
},
|
||||
};},
|
||||
},
|
||||
database: {
|
||||
_type: 'database',
|
||||
hasId: true,
|
||||
id: 'database/10',
|
||||
_id: 10,
|
||||
getTreeNodeHierarchy: function() { return {
|
||||
server_group: {
|
||||
_type: 'server_group',
|
||||
hasId: true,
|
||||
id: 'server_group/1',
|
||||
_id: 1,
|
||||
},
|
||||
server: {
|
||||
_type: 'server',
|
||||
hasId: true,
|
||||
id: 'server/1',
|
||||
_id: 1,
|
||||
},
|
||||
coll_database: {
|
||||
_type: 'coll_database',
|
||||
hasId: true,
|
||||
id: 'coll_database/1',
|
||||
_id: 1,
|
||||
},
|
||||
database: {
|
||||
_type: 'database',
|
||||
hasId: true,
|
||||
id: 'database/10',
|
||||
_id: 10,
|
||||
},
|
||||
};},
|
||||
},
|
||||
};
|
||||
pgBrowser.tree = jasmine.createSpyObj('tree', ['itemData', 'pathId', 'hasParent', 'isOpen', 'isClosed', 'selected']);
|
||||
});
|
||||
|
||||
describe('When node is opened tree state is getting updated', () => {
|
||||
|
||||
describe('When tree node server group is opened', () => {
|
||||
let item = {
|
||||
_type: 'server_group',
|
||||
hasId: true,
|
||||
id: 'server_group/1',
|
||||
_id: 1,
|
||||
};
|
||||
beforeEach(() => {
|
||||
pgBrowser.tree.itemData.and.returnValue(item);
|
||||
pgBrowser.tree.pathId.and.returnValue([]);
|
||||
pgBrowser.tree.hasParent.and.returnValue(false);
|
||||
pgBrowser.tree.isOpen.and.returnValue(true);
|
||||
});
|
||||
|
||||
it('The tree current state will be empty', () => {
|
||||
browserTreeState.update_cache(item);
|
||||
expect(browserTreeState.current_state, {});
|
||||
});
|
||||
});
|
||||
|
||||
describe('When server node is opened', () => {
|
||||
let item = {
|
||||
_type: 'server',
|
||||
hasId: true,
|
||||
id: 'server/1',
|
||||
_id: 1,
|
||||
};
|
||||
beforeEach(() => {
|
||||
pgBrowser.tree.itemData.and.returnValue(item);
|
||||
pgBrowser.tree.pathId.and.returnValue(['server_group/1']);
|
||||
pgBrowser.tree.hasParent.and.returnValue(true);
|
||||
pgBrowser.tree.isOpen.and.returnValue(true);
|
||||
});
|
||||
|
||||
it('The tree current state will have server', () => {
|
||||
browserTreeState.update_cache(item);
|
||||
expect(browserTreeState.current_state, {1: {'paths': ['server_group/1,server/1']}});
|
||||
});
|
||||
});
|
||||
|
||||
describe('When coll_database node is opened', () => {
|
||||
let item = {
|
||||
_type: 'coll_database',
|
||||
hasId: true,
|
||||
id: 'coll_database/1',
|
||||
_id: 1,
|
||||
};
|
||||
beforeEach(() => {
|
||||
pgBrowser.tree.itemData.and.returnValue(item);
|
||||
pgBrowser.tree.pathId.and.returnValue(['server_group/1', 'server/1']);
|
||||
pgBrowser.tree.hasParent.and.returnValue(true);
|
||||
pgBrowser.tree.isOpen.and.returnValue(true);
|
||||
pgBrowser.tree.selected.and.returnValue(item);
|
||||
});
|
||||
|
||||
it('The tree current state will have coll_database', () => {
|
||||
browserTreeState.update_cache(item);
|
||||
expect(browserTreeState.current_state, {1: {'paths': ['server_group/1,server/1,coll_database/1']}});
|
||||
});
|
||||
});
|
||||
|
||||
describe('When database node is opened', () => {
|
||||
let item = {
|
||||
_type: 'database',
|
||||
hasId: true,
|
||||
id: 'database/10',
|
||||
_id: 10,
|
||||
};
|
||||
beforeEach(() => {
|
||||
pgBrowser.tree.itemData.and.returnValue(item);
|
||||
pgBrowser.tree.pathId.and.returnValue(['server_group/1', 'server/1', 'coll_database/1']);
|
||||
pgBrowser.tree.hasParent.and.returnValue(true);
|
||||
pgBrowser.tree.isOpen.and.returnValue(true);
|
||||
pgBrowser.tree.selected.and.returnValue(item);
|
||||
});
|
||||
|
||||
it('The tree current state will have coll_database', () => {
|
||||
browserTreeState.update_cache(item);
|
||||
expect(browserTreeState.current_state, {1: {'paths': ['server_group/1,server/1,coll_database/1','database/10']}});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('When node is closed, node should get removed from the tree state cache', () => {
|
||||
describe('When coll_database node is closed, both database and coll_database should be removed', () => {
|
||||
let item = {
|
||||
_type: 'coll_database',
|
||||
hasId: true,
|
||||
id: 'coll_database/1',
|
||||
_id: 1,
|
||||
};
|
||||
beforeEach(() => {
|
||||
pgBrowser.tree.itemData.and.returnValue(item);
|
||||
pgBrowser.tree.pathId.and.returnValue(['server_group/1', 'server/1']);
|
||||
pgBrowser.tree.hasParent.and.returnValue(true);
|
||||
pgBrowser.tree.isOpen.and.returnValue(true);
|
||||
pgBrowser.tree.isClosed.and.returnValue(true);
|
||||
});
|
||||
|
||||
it('The tree current state will remove coll_database and database', () => {
|
||||
browserTreeState.remove_from_cache(item);
|
||||
expect(browserTreeState.current_state, {1: {'paths': ['server_group/1,server/1']}});
|
||||
});
|
||||
});
|
||||
|
||||
describe('When server node is closed, both server and server_group should be removed', () => {
|
||||
let item = {
|
||||
_type: 'server',
|
||||
hasId: true,
|
||||
id: 'server/1',
|
||||
_id: 1,
|
||||
};
|
||||
beforeEach(() => {
|
||||
pgBrowser.tree.itemData.and.returnValue(item);
|
||||
pgBrowser.tree.pathId.and.returnValue(['server_group/1']);
|
||||
pgBrowser.tree.hasParent.and.returnValue(true);
|
||||
pgBrowser.tree.isOpen.and.returnValue(true);
|
||||
pgBrowser.tree.isClosed.and.returnValue(true);
|
||||
});
|
||||
|
||||
it('The tree current state will remove server_group and server', () => {
|
||||
browserTreeState.remove_from_cache(item);
|
||||
expect(browserTreeState.current_state, {1: []});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user