class TestNodeLinkedNodes(ApiTestCase): def setUp(self): super(TestNodeLinkedNodes, self).setUp() self.user = AuthUserFactory() self.auth = Auth(self.user) self.linking_node = NodeFactory(creator=self.user) self.linked_node = NodeFactory(creator=self.user) self.linked_node2 = NodeFactory(creator=self.user) self.public_node = NodeFactory(is_public=True, creator=self.user) self.linking_node.add_pointer(self.linked_node, auth=self.auth) self.linking_node.add_pointer(self.linked_node2, auth=self.auth) self.linking_node.add_pointer(self.public_node, auth=self.auth) self.linking_node.save() self.url = '/{}nodes/{}/linked_nodes/'.format(API_BASE, self.linking_node._id) self.node_ids = self.linking_node.linked_nodes.values_list( 'guids___id', flat=True) def test_linked_nodes_returns_everything(self): res = self.app.get(self.url, auth=self.user.auth) assert_equal(res.status_code, 200) nodes_returned = [ linked_node['id'] for linked_node in res.json['data'] ] assert_equal(len(nodes_returned), len(self.node_ids)) for node_id in self.node_ids: assert_in(node_id, nodes_returned) def test_linked_nodes_only_return_viewable_nodes(self): user = AuthUserFactory() new_linking_node = NodeFactory(creator=user) self.linked_node.add_contributor(user, auth=self.auth, save=True) self.linked_node2.add_contributor(user, auth=self.auth, save=True) self.public_node.add_contributor(user, auth=self.auth, save=True) new_linking_node.add_pointer(self.linked_node, auth=Auth(user)) new_linking_node.add_pointer(self.linked_node2, auth=Auth(user)) new_linking_node.add_pointer(self.public_node, auth=Auth(user)) new_linking_node.save() res = self.app.get('/{}nodes/{}/linked_nodes/'.format( API_BASE, new_linking_node._id), auth=user.auth) assert_equal(res.status_code, 200) nodes_returned = [ linked_node['id'] for linked_node in res.json['data'] ] assert_equal(len(nodes_returned), len(self.node_ids)) for node_id in self.node_ids: assert_in(node_id, nodes_returned) # Disconnect contributor_removed so that we don't check in files # We can remove this when StoredFileNode is implemented in osf-models with disconnected_from_listeners(contributor_removed): self.linked_node2.remove_contributor(user, auth=self.auth) self.public_node.remove_contributor(user, auth=self.auth) res = self.app.get('/{}nodes/{}/linked_nodes/'.format( API_BASE, new_linking_node._id), auth=user.auth) nodes_returned = [ linked_node['id'] for linked_node in res.json['data'] ] assert_equal(len(nodes_returned), len(self.node_ids) - 1) assert_in(self.linked_node._id, nodes_returned) assert_in(self.public_node._id, nodes_returned) assert_not_in(self.linked_node2._id, nodes_returned) def test_linked_nodes_doesnt_return_deleted_nodes(self): self.linked_node.is_deleted = True self.linked_node.save() res = self.app.get(self.url, auth=self.user.auth) assert_equal(res.status_code, 200) nodes_returned = [ linked_node['id'] for linked_node in res.json['data'] ] assert_equal(len(nodes_returned), len(self.node_ids) - 1) assert_not_in(self.linked_node._id, nodes_returned) assert_in(self.linked_node2._id, nodes_returned) assert_in(self.public_node._id, nodes_returned) def test_attempt_to_return_linked_nodes_logged_out(self): res = self.app.get(self.url, auth=None, expect_errors=True) assert_equal(res.status_code, 401)
class TestNodeLinkedNodes(ApiTestCase): def setUp(self): super(TestNodeLinkedNodes, self).setUp() self.user = AuthUserFactory() self.auth = Auth(self.user) self.linking_node = NodeFactory(creator=self.user) self.linked_node = NodeFactory(creator=self.user) self.linked_node2 = NodeFactory(creator=self.user) self.public_node = NodeFactory(is_public=True, creator=self.user) self.linking_node.add_pointer(self.linked_node, auth=self.auth) self.linking_node.add_pointer(self.linked_node2, auth=self.auth) self.linking_node.add_pointer(self.public_node, auth=self.auth) self.linking_node.save() self.url = '/{}nodes/{}/linked_nodes/'.format(API_BASE, self.linking_node._id) self.node_ids = self.linking_node.linked_nodes.values_list('guids___id', flat=True) def test_linked_nodes_returns_everything(self): res = self.app.get(self.url, auth=self.user.auth) assert_equal(res.status_code, 200) nodes_returned = [linked_node['id'] for linked_node in res.json['data']] assert_equal(len(nodes_returned), len(self.node_ids)) for node_id in self.node_ids: assert_in(node_id, nodes_returned) def test_linked_nodes_only_return_viewable_nodes(self): user = AuthUserFactory() new_linking_node = NodeFactory(creator=user) self.linked_node.add_contributor(user, auth=self.auth, save=True) self.linked_node2.add_contributor(user, auth=self.auth, save=True) self.public_node.add_contributor(user, auth=self.auth, save=True) new_linking_node.add_pointer(self.linked_node, auth=Auth(user)) new_linking_node.add_pointer(self.linked_node2, auth=Auth(user)) new_linking_node.add_pointer(self.public_node, auth=Auth(user)) new_linking_node.save() res = self.app.get( '/{}nodes/{}/linked_nodes/'.format(API_BASE, new_linking_node._id), auth=user.auth ) assert_equal(res.status_code, 200) nodes_returned = [linked_node['id'] for linked_node in res.json['data']] assert_equal(len(nodes_returned), len(self.node_ids)) for node_id in self.node_ids: assert_in(node_id, nodes_returned) # Disconnect contributor_removed so that we don't check in files # We can remove this when StoredFileNode is implemented in osf-models with disconnected_from_listeners(contributor_removed): self.linked_node2.remove_contributor(user, auth=self.auth) self.public_node.remove_contributor(user, auth=self.auth) res = self.app.get( '/{}nodes/{}/linked_nodes/'.format(API_BASE, new_linking_node._id), auth=user.auth ) nodes_returned = [linked_node['id'] for linked_node in res.json['data']] assert_equal(len(nodes_returned), len(self.node_ids) - 1) assert_in(self.linked_node._id, nodes_returned) assert_in(self.public_node._id, nodes_returned) assert_not_in(self.linked_node2._id, nodes_returned) def test_linked_nodes_doesnt_return_deleted_nodes(self): self.linked_node.is_deleted = True self.linked_node.save() res = self.app.get(self.url, auth=self.user.auth) assert_equal(res.status_code, 200) nodes_returned = [linked_node['id'] for linked_node in res.json['data']] assert_equal(len(nodes_returned), len(self.node_ids) - 1) assert_not_in(self.linked_node._id, nodes_returned) assert_in(self.linked_node2._id, nodes_returned) assert_in(self.public_node._id, nodes_returned) def test_attempt_to_return_linked_nodes_logged_out(self): res = self.app.get( self.url, auth=None, expect_errors=True ) assert_equal(res.status_code, 401)