def test_branch_append(self): """ test if a branch is properly appended to a graph """ nodes_count_before = models.Node.objects.count() edges_count_before = models.Edge.objects.count() nodegroups_count_before = models.NodeGroup.objects.count() graph = Graph(self.rootNode) graph.append_branch('P1', graphid=self.NODE_NODETYPE_GRAPHID) graph.save() self.assertEqual(len(graph.nodes), 3) self.assertEqual(len(graph.edges), 2) self.assertEqual(len(graph.nodegroups), 2) self.assertEqual(models.Node.objects.count()-nodes_count_before, 2) self.assertEqual(models.Edge.objects.count()-edges_count_before, 2) self.assertEqual(models.NodeGroup.objects.count()-nodegroups_count_before, 1) for key, edge in graph.edges.iteritems(): self.assertIsNotNone(graph.nodes[edge.domainnode_id]) self.assertIsNotNone(graph.nodes[edge.rangenode_id]) self.assertEqual(edge.domainnode, graph.nodes[edge.domainnode.pk]) self.assertEqual(edge.rangenode, graph.nodes[edge.rangenode.pk]) for key, node in graph.nodes.iteritems(): if node.istopnode: self.assertEqual(node, self.rootNode) appended_branch = graph.append_branch('P1', graphid=self.SINGLE_NODE_GRAPHID) graph.save() self.assertEqual(len(graph.nodes), 4) self.assertEqual(len(graph.edges), 3) self.assertEqual(len(graph.nodegroups), 2) self.assertEqual(models.Node.objects.count()-nodes_count_before, 3) self.assertEqual(models.Edge.objects.count()-edges_count_before, 3) self.assertEqual(models.NodeGroup.objects.count()-nodegroups_count_before, 1) self.assertEqual(appended_branch.root.nodegroup,self.rootNode.nodegroup)
def test_move_node(self): """ test if a node can be successfully moved to another node in the graph """ # test moving a single node to another branch # this node should be grouped with it's new parent nodegroup graph = Graph(self.rootNode) branch_one = graph.append_branch('P1', graphid=self.NODE_NODETYPE_GRAPHID) branch_two = graph.append_branch('P1', graphid=self.NODE_NODETYPE_GRAPHID) branch_three = graph.append_branch('P1', graphid=self.SINGLE_NODE_GRAPHID) branch_three_nodeid = branch_three.nodes.iterkeys().next() branch_one_rootnodeid = branch_one.root.nodeid graph.move_node(branch_three_nodeid, 'P1', branch_one_rootnodeid) new_parent_nodegroup = None moved_branch_nodegroup = None for node_id, node in graph.nodes.iteritems(): if node_id == branch_one_rootnodeid: new_parent_nodegroup = node.nodegroup if node_id == branch_three_nodeid: moved_branch_nodegroup = node.nodegroup self.assertIsNotNone(new_parent_nodegroup) self.assertIsNotNone(moved_branch_nodegroup) self.assertEqual(new_parent_nodegroup, moved_branch_nodegroup) # test moving a branch to another branch # this branch should NOT be grouped with it's new parent nodegroup branch_two_rootnodeid = branch_two.root.nodeid graph.move_node(branch_one_rootnodeid, 'P1', branch_two_rootnodeid) new_parent_nodegroup = None moved_branch_nodegroup = None for node_id, node in graph.nodes.iteritems(): if node_id == branch_two_rootnodeid: new_parent_nodegroup = node.nodegroup if node_id == branch_one_rootnodeid: moved_branch_nodegroup = node.nodegroup self.assertIsNotNone(new_parent_nodegroup) self.assertIsNotNone(moved_branch_nodegroup) self.assertNotEqual(new_parent_nodegroup, moved_branch_nodegroup) updated_edge = None for edge_id, edge in graph.edges.iteritems(): if (edge.domainnode_id == branch_two_rootnodeid and edge.rangenode_id == branch_one_rootnodeid): updated_edge = edge self.assertIsNotNone(updated_edge) # save and retrieve the graph from the database and confirm that # the graph shape has been saved properly graph.save() graph = Graph(self.rootNode) tree = graph.get_tree() self.assertEqual(len(tree['children']), 1) level_one_node = tree['children'][0] self.assertEqual(branch_two_rootnodeid, level_one_node['node'].nodeid) self.assertEqual(len(level_one_node['children']), 2) for child in level_one_node['children']: if child['node'].nodeid == branch_one_rootnodeid: self.assertEqual(len(child['children']), 2) found_branch_three = False for child in child['children']: if child['node'].nodeid == branch_three_nodeid: found_branch_three = True self.assertTrue(found_branch_three) else: self.assertEqual(len(child['children']), 0)