mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-10-31 02:37:05 +00:00 
			
		
		
		
	
		
			
	
	
		
			173 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			173 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | import { module, test } from 'qunit'; | ||
|  | import { createGraph } from 'wherehows-web/tests/helpers/graph-db'; | ||
|  | import { set } from '@ember/object'; | ||
|  | import GraphDb, { INode } from 'wherehows-web/utils/graph-db'; | ||
|  | 
 | ||
|  | interface IMockPayload { | ||
|  |   someField1: string; | ||
|  | } | ||
|  | 
 | ||
|  | const createGraphWithMockPayload = (): { | ||
|  |   graphDb: GraphDb<IMockPayload>; | ||
|  |   node0: INode<IMockPayload>; | ||
|  |   node1: INode<IMockPayload>; | ||
|  |   node2: INode<IMockPayload>; | ||
|  |   node3: INode<IMockPayload>; | ||
|  |   node4: INode<IMockPayload>; | ||
|  |   node5: INode<IMockPayload>; | ||
|  |   node6: INode<IMockPayload>; | ||
|  |   node7: INode<IMockPayload>; | ||
|  |   node8: INode<IMockPayload>; | ||
|  | } => | ||
|  |   createGraph<IMockPayload>((id: number) => ({ | ||
|  |     someField1: `node ${id - 1}` | ||
|  |   })); | ||
|  | 
 | ||
|  | module('Unit | Utility | GraphDb', function() { | ||
|  |   test('addNode works as expected', function(assert) { | ||
|  |     const { graphDb, node0, node1, node2 } = createGraphWithMockPayload(); | ||
|  | 
 | ||
|  |     assert.equal(node0.id, 1, 'Returned node should have id'); | ||
|  |     assert.equal(node0.level, 0, 'Returned node should have level 0'); | ||
|  |     assert.equal(node1.id, 2, 'Returned node should have id'); | ||
|  |     assert.equal(node1.level, 1, 'Returned node should have level 1'); | ||
|  |     assert.equal(node2.id, 3, 'Returned node should have id'); | ||
|  |     assert.equal(node2.level, -1, 'Returned node should have level -1'); | ||
|  |     assert.deepEqual(graphDb.edgesByTo[node0.id][0], { from: 2, to: 1 }, 'Edge should be created'); | ||
|  |     assert.deepEqual(graphDb.edgesByFrom[node0.id][0], { from: 1, to: 3 }, 'Edge should be created'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('uniqueIndexes and findNode works as expected', function(assert) { | ||
|  |     const { graphDb, node0 } = createGraphWithMockPayload(); | ||
|  |     set(graphDb, 'uniqueKeys', ['someField1']); | ||
|  | 
 | ||
|  |     assert.equal(graphDb.findNode({ someField1: 'node 0' }), node0, 'Index works'); | ||
|  | 
 | ||
|  |     const shouldBeNode0 = graphDb.addNode({ | ||
|  |       someField1: 'node 0' | ||
|  |     }); | ||
|  | 
 | ||
|  |     assert.equal(shouldBeNode0, node0, 'Adding same node wont create a new one'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('minLevel', function(assert) { | ||
|  |     const { graphDb } = createGraphWithMockPayload(); | ||
|  |     assert.equal(graphDb.minLevel, -3, 'min level should match'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('getHierarchyNodes', function(assert) { | ||
|  |     const { graphDb, node5 } = createGraphWithMockPayload(); | ||
|  |     assert.deepEqual( | ||
|  |       graphDb.getHierarchyNodes(node5), | ||
|  |       [ | ||
|  |         { | ||
|  |           id: 6, | ||
|  |           level: 2, | ||
|  |           payload: { | ||
|  |             someField1: 'node 5' | ||
|  |           } | ||
|  |         }, | ||
|  |         { | ||
|  |           id: 2, | ||
|  |           level: 1, | ||
|  |           payload: { | ||
|  |             someField1: 'node 1' | ||
|  |           } | ||
|  |         }, | ||
|  |         { | ||
|  |           id: 1, | ||
|  |           level: 0, | ||
|  |           payload: { | ||
|  |             someField1: 'node 0' | ||
|  |           } | ||
|  |         } | ||
|  |       ], | ||
|  |       'hierachy should match' | ||
|  |     ); | ||
|  | 
 | ||
|  |     assert.deepEqual( | ||
|  |       graphDb.getHierarchyNodes(node5, false), | ||
|  |       [ | ||
|  |         { | ||
|  |           id: 6, | ||
|  |           level: 2, | ||
|  |           payload: { | ||
|  |             someField1: 'node 5' | ||
|  |           } | ||
|  |         }, | ||
|  |         { | ||
|  |           id: 8, | ||
|  |           level: 3, | ||
|  |           payload: { | ||
|  |             someField1: 'node 7' | ||
|  |           } | ||
|  |         } | ||
|  |       ], | ||
|  |       'hierachy should match' | ||
|  |     ); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('toggle', function(assert) { | ||
|  |     const { graphDb, node0, node1, node2, node3, node4, node5, node6, node7, node8 } = createGraphWithMockPayload(); | ||
|  |     const test1 = 'Parent Selection'; | ||
|  |     graphDb.toggle(node7.id); | ||
|  |     assert.ok(graphDb.nodesById[node0.id].selected, `[${test1}]: select node 0`); | ||
|  |     assert.ok(graphDb.nodesById[node1.id].selected, `[${test1}]: select node 1`); | ||
|  |     assert.notOk(graphDb.nodesById[node2.id].selected, `[${test1}]: unselect node 2`); | ||
|  |     assert.notOk(graphDb.nodesById[node3.id].selected, `[${test1}]: unselect node 3`); | ||
|  |     assert.notOk(graphDb.nodesById[node4.id].selected, `[${test1}]: unselect node 4`); | ||
|  |     assert.ok(graphDb.nodesById[node5.id].selected, `[${test1}]: select node 5`); | ||
|  |     assert.notOk(graphDb.nodesById[node6.id].selected, `[${test1}]: unselect node 6`); | ||
|  |     assert.ok(graphDb.nodesById[node7.id].selected, `[${test1}]: select node 7`); | ||
|  |     assert.notOk(graphDb.nodesById[node8.id].selected, `[${test1}]: unselect node 8`); | ||
|  | 
 | ||
|  |     const test2 = 'Node deselection'; | ||
|  |     graphDb.toggle(node5.id); | ||
|  |     assert.ok(graphDb.nodesById[node0.id].selected, `[${test2}]: select node 0`); | ||
|  |     assert.ok(graphDb.nodesById[node1.id].selected, `[${test2}]: select node 1`); | ||
|  |     assert.notOk(graphDb.nodesById[node2.id].selected, `[${test2}]: unselect node 2`); | ||
|  |     assert.notOk(graphDb.nodesById[node3.id].selected, `[${test2}]: unselect node 3`); | ||
|  |     assert.notOk(graphDb.nodesById[node4.id].selected, `[${test2}]: unselect node 4`); | ||
|  |     assert.notOk(graphDb.nodesById[node5.id].selected, `[${test2}]: unselect node 5`); | ||
|  |     assert.notOk(graphDb.nodesById[node6.id].selected, `[${test2}]: unselect node 6`); | ||
|  |     assert.notOk(graphDb.nodesById[node7.id].selected, `[${test2}]: unselect node 7`); | ||
|  |     assert.notOk(graphDb.nodesById[node8.id].selected, `[${test2}]: unselect node 8`); | ||
|  | 
 | ||
|  |     const test3 = 'Different branch selection'; | ||
|  |     graphDb.toggle(node8.id); | ||
|  |     assert.ok(graphDb.nodesById[node0.id].selected, `[${test3}]: select node 0`); | ||
|  |     assert.notOk(graphDb.nodesById[node1.id].selected, `[${test3}]: unselect node 1`); | ||
|  |     assert.notOk(graphDb.nodesById[node2.id].selected, `[${test3}]: unselect node 2`); | ||
|  |     assert.notOk(graphDb.nodesById[node3.id].selected, `[${test3}]: unselect node 3`); | ||
|  |     assert.notOk(graphDb.nodesById[node4.id].selected, `[${test3}]: unselect node 4`); | ||
|  |     assert.notOk(graphDb.nodesById[node5.id].selected, `[${test3}]: unselect node 5`); | ||
|  |     assert.ok(graphDb.nodesById[node6.id].selected, `[${test3}]: select node 6`); | ||
|  |     assert.notOk(graphDb.nodesById[node7.id].selected, `[${test3}]: unselect node 7`); | ||
|  |     assert.ok(graphDb.nodesById[node8.id].selected, `[${test3}]: select node 8`); | ||
|  | 
 | ||
|  |     const test4 = 'Different branch selection upstream'; | ||
|  |     graphDb.toggle(node4.id); | ||
|  |     assert.ok(graphDb.nodesById[node0.id].selected, `[${test4}]: select node 0`); | ||
|  |     assert.notOk(graphDb.nodesById[node1.id].selected, `[${test4}]: unselect node 1`); | ||
|  |     assert.ok(graphDb.nodesById[node2.id].selected, `[${test4}]: select node 2`); | ||
|  |     assert.ok(graphDb.nodesById[node3.id].selected, `[${test4}]: select node 3`); | ||
|  |     assert.ok(graphDb.nodesById[node4.id].selected, `[${test4}]: select node 4`); | ||
|  |     assert.notOk(graphDb.nodesById[node5.id].selected, `[${test4}]: unselect node 5`); | ||
|  |     assert.ok(graphDb.nodesById[node6.id].selected, `[${test4}]: select node 6`); | ||
|  |     assert.notOk(graphDb.nodesById[node7.id].selected, `[${test4}]: unselect node 7`); | ||
|  |     assert.ok(graphDb.nodesById[node8.id].selected, `[${test4}]: select node 8`); | ||
|  | 
 | ||
|  |     const test5 = 'Deselect root node'; | ||
|  |     graphDb.toggle(node0.id); | ||
|  |     assert.notOk(graphDb.nodesById[node0.id].selected, `[${test5}]: unselect node 0`); | ||
|  |     assert.notOk(graphDb.nodesById[node1.id].selected, `[${test5}]: unselect node 1`); | ||
|  |     assert.notOk(graphDb.nodesById[node2.id].selected, `[${test5}]: unselect node 2`); | ||
|  |     assert.notOk(graphDb.nodesById[node3.id].selected, `[${test5}]: unselect node 3`); | ||
|  |     assert.notOk(graphDb.nodesById[node4.id].selected, `[${test5}]: unselect node 4`); | ||
|  |     assert.notOk(graphDb.nodesById[node5.id].selected, `[${test5}]: unselect node 5`); | ||
|  |     assert.notOk(graphDb.nodesById[node6.id].selected, `[${test5}]: unselect node 6`); | ||
|  |     assert.notOk(graphDb.nodesById[node7.id].selected, `[${test5}]: unselect node 7`); | ||
|  |     assert.notOk(graphDb.nodesById[node8.id].selected, `[${test5}]: unselect node 8`); | ||
|  |   }); | ||
|  | }); |