def test_url_item01(self): my_label = 'Add a contact' url = '/persons/add_a_contact' item = URLItem('add_contact', label=my_label, url=url) self.assertEqual(my_label, item.label) self.assertEqual(url, item.url) url = '/tests/customers' item.url = lambda: url self.assertEqual(url, item.url)
def test_render_url_item02(self): "URLItem with icon and label" icon = 'creme' my_label = 'HOME' item = URLItem('home', url='/', label=my_label, icon=icon, icon_label='Home', perm='creme_core', ) elt = html5lib.parse(item.render(self.build_context()), namespaceHTMLElements=False) img_node = elt.find('.//a/img') self.assertEqual('header-menu-icon', img_node.get('class')) self.assertEqual(my_label, img_node.tail)
def test_render_menu(self): menu = Menu().add(URLItem('contacts', url='/persons/contacts', label='List of contacts'), URLItem('orgas', url='/persons/organisations', label='List of organisations'), ) self.assertHTMLEqual('<ul class="ui-creme-navigation">' '<li class="ui-creme-navigation-item-level0 ui-creme-navigation-item-id_contacts">' '<a href="/persons/contacts">List of contacts</a>' '</li>' '<li class="ui-creme-navigation-item-level0 ui-creme-navigation-item-id_orgas">' '<a href="/persons/organisations">List of organisations</a>' '</li>' '</ul>', menu.render(self.build_context()) )
def test_render_url_item03(self): "Not allowed (string perm)" self.login(is_superuser=False, allowed_apps=['creme_core']) icon = 'creme' my_label = 'HOME' item = URLItem('home', url='/', label=my_label, icon=icon, icon_label='Home', perm='creme_core.add_fakecontact', ) elt = html5lib.parse(item.render(self.build_context()), namespaceHTMLElements=False) span_node = elt.find('.//span') self.assertEqual('ui-creme-navigation-text-entry forbidden', span_node.get('class')) children = list(span_node) self.assertEqual(1, len(children)) self.assertEqual('img', children[0].tag)
def test_render_url_item04(self): "Perm is callable" self.login(is_superuser=False) url = '/creme/add_contact' item = URLItem('home', url=url, label='Create contact', perm=lambda user: user.is_superuser ) elt = html5lib.parse(item.render(self.build_context()), namespaceHTMLElements=False) span_node = elt.find('.//span') self.assertEqual('ui-creme-navigation-text-entry forbidden', span_node.get('class')) # --- item.perm = lambda user: True elt = html5lib.parse(item.render(self.build_context()), namespaceHTMLElements=False) self.assertIsNone(elt.find('.//span')) a_node = elt.find('.//a') self.assertEqual(url, a_node.get('href'))
def test_url_item03(self): "For creation view" id_ = 'add_contact' item = URLItem.creation_view(id_, model=FakeContact) self.assertIsInstance(item, URLItem) self.assertEqual(id_, item.id) self.assertEqual('/tests/contact/add', item.url) self.assertEqual(u'Test Contact', item.label) self.assertEqual('creme_core.add_fakecontact', item.perm) # Custom attributes label = 'My contact' url = '/tests/my_contacts/add' perm = 'persons' item = URLItem.creation_view(id_, model=FakeContact, perm=perm, label=label, url=url, ) self.assertEqual(label, item.label) self.assertEqual(url, item.url) self.assertEqual(perm, item.perm)
def test_render_container_item01(self): "No icon" context = self.build_context() label = 'Creations' container = ContainerItem('persons', label=label) \ .add(URLItem('contacts', url='/persons/contacts', label='List of contacts'), URLItem('orgas', url='/persons/organisations', label='List of organisations'), ) render = container.render(context) self.assertTrue(render.startswith(label)) self.assertHTMLEqual( '<ul>' '<li class="ui-creme-navigation-item-id_contacts ui-creme-navigation-item-level1">' '<a href="/persons/contacts">List of contacts</a>' '</li>' '<li class="ui-creme-navigation-item-id_orgas ui-creme-navigation-item-level1">' '<a href="/persons/organisations">List of organisations</a>' '</li>' '</ul>', render[len(label):])
def test_render_url_item01(self): "URLItem with icon" url = '/' icon = 'creme' label = 'Home' item = URLItem('home', url=url, icon=icon, icon_label=label) elt = html5lib.parse(item.render(self.build_context()), namespaceHTMLElements=False) a_node = elt.find('.//a') self.assertEqual(url, a_node.get('href')) children = list(a_node) self.assertEqual(1, len(children)) img_node = children[0] self.assertEqual('img', img_node.tag) self.assertEqual('header-menu-icon', img_node.get('class')) self.assertEqual(label, img_node.get('alt')) self.assertEqual(label, img_node.get('title')) self.assertIn(icon, img_node.get('src', '')) self.assertFalse(img_node.tail)
def test_render_container_item02(self): "No icon" context = self.build_context() label = 'Contacts' icon = 'contact' icon_label = 'Contact' parent = ContainerItem('persons', label=label, icon=icon, icon_label=icon_label) \ .add(URLItem('home', url='/persons/contacts', label='List of contacts')) render = parent.render(context, level=1) elt = html5lib.parse(render, namespaceHTMLElements=False) # ElementTree.dump(elt) >>> # <html><head /><body> # <img alt="Contact" class="header-menu-icon" # src="/static_media/icecream/images/contact_16-....png" title="Contact" width="16px" /> # Contacts # <ul> # <li class="ui-creme-navigation-item-level2 ui-creme-navigation-item-id_home"> # <a href="/persons/contacts">List of contacts</a> # </li> # </ul> # </body> img_node = elt.find('.//img') self.assertIsNotNone(img_node, 'No <img> tag.') self.assertEqual('header-menu-icon', img_node.get('class')) self.assertEqual(icon_label, img_node.get('alt')) self.assertEqual(icon_label, img_node.get('title')) self.assertIn(icon, img_node.get('src', '')) self.assertIn(label, img_node.tail) ul_node = elt.find('.//ul') self.assertIsNotNone(ul_node, 'No <ul> tag.') self.assertHTMLEqual( '<ul>' '<li class="ui-creme-navigation-item-id_home ui-creme-navigation-item-level2">' '<a href="/persons/contacts">List of contacts</a>' '</li>' '</ul>', ElementTree.tostring(ul_node).decode())