Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
 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())
                         )
Esempio n. 4
0
    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)
Esempio n. 5
0
    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'))
Esempio n. 6
0
    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)
Esempio n. 7
0
    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):])
Esempio n. 8
0
    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)
Esempio n. 9
0
    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())