class TestPermissionViews(TestDatabaseFixture): def setUp(self): super(TestPermissionViews, self).setUp() self.registry = NodeRegistry() self.registry.register_node(TestType, view=RestrictedView) self.root = Node(name=u'root', title=u'Root Node') self.node = TestType(name=u'node', title=u'Node', parent=self.root) db.session.add_all([self.root, self.node]) db.session.commit() self.publisher = NodePublisher(self.root, self.registry, u'/') def test_view(self): """ Test access to the restricted view. """ # No permission required to access '/' with self.app.test_request_context(method='GET'): response = self.publisher.publish(u'/node') self.assertEqual(response, u'node-index') # 'view' permission is granted to everyone on TestType with self.app.test_request_context(method='GET'): response = self.publisher.publish(u'/node/view') self.assertEqual(response, u'view') # 'admin' permission is granted to no one on TestType with self.app.test_request_context(method='GET'): self.assertRaises(Forbidden, self.publisher.publish, u'/node/admin', user=self.user1, permissions=['siteadmin'])
class TestRegistry(TestDatabaseFixture): """Test the node registry.""" def setUp(self): super(TestRegistry, self).setUp() self.registry = NodeRegistry() def test_init_registry(self): """Initializing a registry gives it some standard attributes.""" for attr in ['nodes', 'child_nodetypes', 'nodeviews', 'viewlist', 'urlmaps']: # The attribute exists self.assertTrue(hasattr(self.registry, attr)) # The attribute is a dict self.assertTrue(isinstance(getattr(self.registry, attr), dict)) # The dict is initially empty self.assertEqual(len(getattr(self.registry, attr)), 0) def test_register_node_without_view(self): """Nodes can be registered without a view.""" self.registry.register_node(Node) self.assertEqual(len(self.registry.nodes), 1) self.assertEqual(len(self.registry.nodeviews), 0) self.assertTrue(Node.__type__ in self.registry.nodes) self.registry.register_node(TestType) self.assertEqual(len(self.registry.nodes), 2) self.assertEqual(len(self.registry.nodeviews), 0) self.assertTrue(TestType.__type__ in self.registry.nodes) def test_register_node_with_view(self): """Nodes can be registered with a view.""" self.registry.register_node(Node, view=MyNodeView) self.assertEqual(len(self.registry.nodes), 1) self.assertEqual(len(self.registry.nodeviews), 1) self.assertTrue(Node.__type__ in self.registry.nodes) self.registry.register_node(TestType, view=MyNodeView) self.assertEqual(len(self.registry.nodes), 2) self.assertEqual(len(self.registry.nodeviews), 2) self.assertTrue(TestType.__type__ in self.registry.nodes) def test_register_itype_with_view(self): """Nodes can be registered with an instance type.""" self.registry.register_node(Node, itype='home', title='Home page', view=MyNodeView) self.assertEqual(len(self.registry.nodes), 1) self.assertEqual(len(self.registry.nodeviews), 1) self.assertEqual(self.registry.nodes['home'].model, Node) self.assertFalse(Node.__type__ in self.registry.nodes) self.assertTrue('home' in self.registry.nodes) self.assertTrue(MyNodeView in self.registry.nodeviews['home']) self.assertFalse(MyNodeView in self.registry.nodeviews[Node.__type__])
def setUp(self): super(TestPublishViews, self).setUp() self.registry = NodeRegistry() self.registry.register_node(Node, view=MyNodeView, child_nodetypes=['*']) self.registry.register_node(TestType, view=MyNodeView, child_nodetypes=['*'], parent_nodetypes=['*']) self.registry.register_view('node', ExpandedNodeView) self.registry.register_view(TestType, ExpandedNodeView) # Make some nodes self.root = Node(name=u'root', title=u'Root Node') if not hasattr(self, 'nodetype'): self.nodetype = Node self.node1 = self.nodetype(name=u'node1', title=u'Node 1', parent=self.root) self.node2 = self.nodetype(name=u'node2', title=u'Node 2', parent=self.root) self.node3 = self.nodetype(name=u'node3', title=u'Node 3', parent=self.node2) self.node4 = self.nodetype(name=u'node4', title=u'Node 4', parent=self.node3) self.node5 = self.nodetype(name=u'node5', title=u'Node 5', parent=self.root) db.session.add_all([self.root, self.node1, self.node2, self.node3, self.node4, self.node5]) db.session.commit() self.rootpub = NodePublisher(self.root, self.registry, u'/') self.nodepub = NodePublisher(self.root, self.registry, u'/node2', u'/') self.nodepub_differenturl = NodePublisher(self.root, self.registry, u'/node2', u'/newnode2') self.nodepub_defaulturl = NodePublisher(self.root, self.registry, u'/node2')
def setUp(self): super(TestPermissionViews, self).setUp() self.registry = NodeRegistry() self.registry.register_node(TestType, view=RestrictedView) self.root = Node(name=u'root', title=u'Root Node') self.node = TestType(name=u'node', title=u'Node', parent=self.root) db.session.add_all([self.root, self.node]) db.session.commit() self.publisher = NodePublisher(self.root, self.registry, u'/')
class TestPublishViews(TestDatabaseFixture): def setUp(self): super(TestPublishViews, self).setUp() self.registry = NodeRegistry() self.registry.register_node(Node, view=MyNodeView, child_nodetypes=['*']) self.registry.register_node(TestType, view=MyNodeView, child_nodetypes=['*'], parent_nodetypes=['*']) self.registry.register_view('node', ExpandedNodeView) self.registry.register_view(TestType, ExpandedNodeView) # Make some nodes self.root = Node(name=u'root', title=u'Root Node') if not hasattr(self, 'nodetype'): self.nodetype = Node self.node1 = self.nodetype(name=u'node1', title=u'Node 1', parent=self.root) self.node2 = self.nodetype(name=u'node2', title=u'Node 2', parent=self.root) self.node3 = self.nodetype(name=u'node3', title=u'Node 3', parent=self.node2) self.node4 = self.nodetype(name=u'node4', title=u'Node 4', parent=self.node3) self.node5 = self.nodetype(name=u'node5', title=u'Node 5', parent=self.root) db.session.add_all([self.root, self.node1, self.node2, self.node3, self.node4, self.node5]) db.session.commit() self.rootpub = NodePublisher(self.root, self.registry, u'/') self.nodepub = NodePublisher(self.root, self.registry, u'/node2', u'/') self.nodepub_differenturl = NodePublisher(self.root, self.registry, u'/node2', u'/newnode2') self.nodepub_defaulturl = NodePublisher(self.root, self.registry, u'/node2') def test_init_root(self): deferpub = NodePublisher(None, self.registry, u'/') self.assertEqual(deferpub.root, None) self.assertEqual(deferpub.root_id, None) deferpub.root = self.node1 self.assertEqual(deferpub.root, self.node1) self.assertEqual(deferpub.root_id, self.node1.id) def test_publishview(self): """Publish a default view.""" with self.app.test_request_context(): response = self.rootpub.publish(u'/node2') self.assertEqual(response, 'node-index') with self.app.test_request_context(): response = self.nodepub.publish(u'/') self.assertEqual(response, 'node-index') with self.app.test_request_context(): response = self.nodepub_defaulturl.publish(u'/node2') self.assertEqual(response, 'node-index') with self.app.test_request_context(): response = self.nodepub_differenturl.publish(u'/newnode2') self.assertEqual(response, 'node-index') def test_methods(self): """Publish views with different methods.""" with self.app.test_request_context(method='GET'): response = self.rootpub.publish(u'/node2/edit') self.assertEqual(response, 'edit-GET') with self.app.test_request_context(method='GET'): response = self.nodepub.publish(u'/edit') self.assertEqual(response, 'edit-GET') with self.app.test_request_context(method='POST'): response = self.rootpub.publish(u'/node2/edit') self.assertEqual(response, 'edit-POST') with self.app.test_request_context(method='POST'): response = self.nodepub.publish(u'/edit') self.assertEqual(response, 'edit-POST') with self.app.test_request_context(method='GET'): response = self.rootpub.publish(u'/node2/multimethod') self.assertEqual(response, 'multimethod-GET') with self.app.test_request_context(method='GET'): response = self.nodepub.publish(u'/multimethod') self.assertEqual(response, 'multimethod-GET') with self.app.test_request_context(method='POST'): response = self.rootpub.publish(u'/node2/multimethod') self.assertEqual(response, 'multimethod-POST') with self.app.test_request_context(method='POST'): response = self.nodepub.publish(u'/multimethod') self.assertEqual(response, 'multimethod-POST') with self.app.test_request_context(method='PUT'): response = self.rootpub.publish(u'/node2/multimethod') self.assertEqual(response, 'multimethod-PUT') with self.app.test_request_context(method='PUT'): response = self.nodepub.publish(u'/multimethod') self.assertEqual(response, 'multimethod-PUT') with self.app.test_request_context(method='GET'): self.assertRaises(NotFound, self.rootpub.publish, u'/node2/random') with self.app.test_request_context(method='GET'): self.assertRaises(NotFound, self.nodepub.publish, u'/random') def test_redirect_gone(self): """ Test the publisher's 30x and 410 responses. """ self.node2.name = u'nodeX' db.session.commit() with self.app.test_request_context(method='GET'): response = self.rootpub.publish(u'/node2/edit') self.assertTrue(response.status[:3] in ['301', '302']) self.assertEqual(response.headers['Location'], '/nodeX/edit') db.session.delete(self.node2) db.session.commit() with self.app.test_request_context(method='GET'): self.assertRaises(Gone, self.rootpub.publish, u'/node2/edit') def test_noroot(self): """ Test the publisher's NOROOT 404 response. """ newpub = NodePublisher(self.root, self.registry, u'/no-node') with self.app.test_request_context(method='GET'): self.assertRaises(NotFound, newpub.publish, '/') def test_urlfor(self): """Test the publisher's url making functionality""" with self.app.test_request_context(method='GET'): pub = self.rootpub self.assertEqual(pub.url_for(self.node2), '/node2/') self.assertEqual(pub.url_for(self.node2, 'editget'), '/node2/edit') self.assertEqual(pub.url_for(self.node2, 'editget', _external=True), 'http://localhost/node2/edit') self.assertEqual(pub.url_for(self.node2, 'editget', js=False), '/node2/edit?js=False') self.assertEqual(pub.url_for(self.node3, 'editget'), '/node2/node3/edit') self.assertRaises(ViewNotFound, pub.url_for, self.node3, 'random') pub = self.nodepub self.assertEqual(pub.url_for(self.node2, 'editget'), '/edit') self.assertEqual(pub.url_for(self.node3, 'editget'), '/node3/edit') self.assertRaises(ViewNotFound, pub.url_for, self.node3, 'random') pub = self.nodepub_defaulturl self.assertEqual(pub.url_for(self.node2, 'editget'), '/node2/edit') self.assertEqual(pub.url_for(self.node3, 'editget'), '/node2/node3/edit') self.assertRaises(ViewNotFound, pub.url_for, self.node3, 'random') pub = self.nodepub_differenturl self.assertEqual(pub.url_for(self.node2, 'editget'), '/newnode2/edit') self.assertEqual(pub.url_for(self.node3, 'editget'), '/newnode2/node3/edit') self.assertRaises(ViewNotFound, pub.url_for, self.node3, 'random')
def setUp(self): super(TestRegistry, self).setUp() self.registry = NodeRegistry()