示例#1
0
    def test_interface(self):
        self.assertTrue(IPersistentCoverTile.implementedBy(BannerTile))
        self.assertTrue(verifyClass(IPersistentCoverTile, BannerTile))

        tile = BannerTile(None, None)
        self.assertTrue(IPersistentCoverTile.providedBy(tile))
        # FIXME: @property decorator on class methods makes this test fail
        #        how can we fix it?
        self.assertTrue(verifyObject(IPersistentCoverTile, tile))
示例#2
0
 def setUp(self):
     super(BannerTileTestCase, self).setUp()
     self.tile = BannerTile(self.cover, self.request)
     self.tile.__name__ = u'collective.cover.banner'
     self.tile.id = u'test'
示例#3
0
class BannerTileTestCase(TestTileMixin, unittest.TestCase):
    def setUp(self):
        super(BannerTileTestCase, self).setUp()
        self.tile = BannerTile(self.cover, self.request)
        self.tile.__name__ = u'collective.cover.banner'
        self.tile.id = u'test'

    @property
    def get_tile(self):
        """Return a new instance of the tile to avoid data caching."""
        return self.cover.restrictedTraverse('@@{0}/{1}'.format(
            self.tile.__name__, self.tile.id))

    @unittest.expectedFailure  # FIXME: raises BrokenImplementation
    def test_interface(self):
        self.interface = IBannerTile
        self.klass = BannerTile
        super(BannerTileTestCase, self).test_interface()

    def test_default_configuration(self):
        self.assertTrue(self.tile.is_configurable)
        self.assertTrue(self.tile.is_editable)
        self.assertTrue(self.tile.is_droppable)

    def test_accepted_content_types(self):
        self.assertEqual(self.tile.accepted_ct(), ALL_CONTENT_TYPES)

    def test_populate_with_image_object_text(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), six.text_type)
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_tile_with_image_object_string(self):
        """This test complements test_populate_with_image_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(six.text_type(title, 'utf-8'),
                         self.tile.data.get('title'))
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_with_link_object_text(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), six.text_type)
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), 'http://plone.org')

    def test_populate_tile_with_link_object_string(self):
        """This test complements test_populate_with_link_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(six.text_type(title, 'utf-8'),
                         self.tile.data.get('title'))
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), 'http://plone.org')

    def test_render_empty(self):
        msg = 'Drag&drop an image or link here to populate the tile.'

        self.tile.is_compose_mode = Mock(return_value=True)
        self.assertIn(msg, self.tile())

        self.tile.is_compose_mode = Mock(return_value=False)
        self.assertNotIn(msg, self.tile())

    def test_render_with_image(self):
        obj = self.portal['my-image']
        self.tile.populate_with_object(obj)
        html = etree.HTML(self.tile())
        img = html.find('*//img')
        self.assertIsNotNone(img)
        self.assertIn('alt', img.attrib)
        self.assertEqual(img.attrib['alt'], obj.Description())

        # set alternate text
        alt_text = u'Murciélago hindú'
        self.tile.data['alt_text'] = alt_text
        html = etree.HTML(self.tile())
        img = html.find('*//img')
        self.assertIsNotNone(img)
        self.assertIn('alt', img.attrib)
        self.assertEqual(img.attrib['alt'], alt_text)

    def test_render_with_link(self):
        obj = self.portal['my-link']
        self.tile.populate_with_object(obj)
        rendered = self.tile()
        self.assertNotIn('<img ', rendered)
        self.assertIn('<a href="http://plone.org">Test link</a>', rendered)

    def test_getRemoteUrl(self):
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        expected = 'http://nohost/plone/my-news-item'
        self.assertEqual(self.tile.getRemoteUrl(), expected)

    def test_getRemoteUrl_link(self):
        # on links we should get its remote URL
        obj = self.portal['my-link']
        self.tile.populate_with_object(obj)
        expected = 'http://plone.org'
        self.assertEqual(self.tile.getRemoteUrl(), expected)

    def test_getRemoteUrl_view_action(self):
        # on some content types we should add '/view' to the URL
        obj = self.portal['my-image']
        self.tile.populate_with_object(obj)
        expected = 'http://nohost/plone/my-image/view'
        self.assertEqual(self.tile.getRemoteUrl(), expected)

    def test_getRemoteUrl_render(self):
        # the URL must be rendered normally
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        html = etree.HTML(self.tile())
        a = html.find('*//a')
        expected = 'http://nohost/plone/my-news-item'
        self.assertEqual(a.attrib['href'], expected)

    def test_getRemoteUrl_render_edited(self):
        # the alternate URL must be rendered
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        remote_url = 'http://example.org/'
        data_mgr = ITileDataManager(self.tile)
        data = data_mgr.get()
        data['remote_url'] = remote_url
        data_mgr.set(data)
        tile = self.get_tile
        html = etree.HTML(tile())
        a = html.find('*//a')
        self.assertEqual(a.attrib['href'], remote_url)

    def test_getRemoteUrl_render_empty(self):
        # no anchor is rendered if URL field is empty
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        data_mgr = ITileDataManager(self.tile)
        data = data_mgr.get()
        data['remote_url'] = u''
        data_mgr.set(data)
        tile = self.get_tile
        html = etree.HTML(tile())
        a = html.find('*//a')
        self.assertIsNone(a)
 def setUp(self):
     super(BannerTileTestCase, self).setUp()
     self.tile = BannerTile(self.cover, self.request)
     self.tile.__name__ = u'collective.cover.banner'
     self.tile.id = u'test'
class BannerTileTestCase(TestTileMixin, unittest.TestCase):

    def setUp(self):
        super(BannerTileTestCase, self).setUp()
        self.tile = BannerTile(self.cover, self.request)
        self.tile.__name__ = u'collective.cover.banner'
        self.tile.id = u'test'

    @property
    def get_tile(self):
        """Return a new instance of the tile to avoid data caching."""
        return self.cover.restrictedTraverse(
            '@@{0}/{1}'.format(self.tile.__name__, self.tile.id))

    @unittest.expectedFailure  # FIXME: raises BrokenImplementation
    def test_interface(self):
        self.interface = IBannerTile
        self.klass = BannerTile
        super(BannerTileTestCase, self).test_interface()

    def test_default_configuration(self):
        self.assertTrue(self.tile.is_configurable)
        self.assertTrue(self.tile.is_editable)
        self.assertTrue(self.tile.is_droppable)

    def test_accepted_content_types(self):
        self.assertEqual(self.tile.accepted_ct(), ALL_CONTENT_TYPES)

    def test_populate_with_image_object_text(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), six.text_type)
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_tile_with_image_object_string(self):
        """This test complements test_populate_with_image_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(
            six.text_type(title, 'utf-8'), self.tile.data.get('title'))
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_with_link_object_text(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), six.text_type)
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), 'http://plone.org')

    def test_populate_tile_with_link_object_string(self):
        """This test complements test_populate_with_link_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(
            six.text_type(title, 'utf-8'), self.tile.data.get('title'))
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), 'http://plone.org')

    def test_render_empty(self):
        msg = 'Drag&amp;drop an image or link here to populate the tile.'

        self.tile.is_compose_mode = Mock(return_value=True)
        self.assertIn(msg, self.tile())

        self.tile.is_compose_mode = Mock(return_value=False)
        self.assertNotIn(msg, self.tile())

    def test_render_with_image(self):
        obj = self.portal['my-image']
        self.tile.populate_with_object(obj)
        html = etree.HTML(self.tile())
        img = html.find('*//img')
        self.assertIsNotNone(img)
        self.assertIn('alt', img.attrib)
        self.assertEqual(img.attrib['alt'], obj.Description())

        # set alternate text
        alt_text = u'Murciélago hindú'
        self.tile.data['alt_text'] = alt_text
        html = etree.HTML(self.tile())
        img = html.find('*//img')
        self.assertIsNotNone(img)
        self.assertIn('alt', img.attrib)
        self.assertEqual(img.attrib['alt'], alt_text)

    def test_render_with_link(self):
        obj = self.portal['my-link']
        self.tile.populate_with_object(obj)
        rendered = self.tile()
        self.assertNotIn('<img ', rendered)
        self.assertIn('<a href="http://plone.org">Test link</a>', rendered)

    def test_getRemoteUrl(self):
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        expected = 'http://nohost/plone/my-news-item'
        self.assertEqual(self.tile.getRemoteUrl(), expected)

    def test_getRemoteUrl_link(self):
        # on links we should get its remote URL
        obj = self.portal['my-link']
        self.tile.populate_with_object(obj)
        expected = 'http://plone.org'
        self.assertEqual(self.tile.getRemoteUrl(), expected)

    def test_getRemoteUrl_view_action(self):
        # on some content types we should add '/view' to the URL
        obj = self.portal['my-image']
        self.tile.populate_with_object(obj)
        expected = 'http://nohost/plone/my-image/view'
        self.assertEqual(self.tile.getRemoteUrl(), expected)

    def test_getRemoteUrl_render(self):
        # the URL must be rendered normally
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        html = etree.HTML(self.tile())
        a = html.find('*//a')
        expected = 'http://nohost/plone/my-news-item'
        self.assertEqual(a.attrib['href'], expected)

    def test_getRemoteUrl_render_edited(self):
        # the alternate URL must be rendered
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        remote_url = 'http://example.org/'
        data_mgr = ITileDataManager(self.tile)
        data = data_mgr.get()
        data['remote_url'] = remote_url
        data_mgr.set(data)
        tile = self.get_tile
        html = etree.HTML(tile())
        a = html.find('*//a')
        self.assertEqual(a.attrib['href'], remote_url)

    def test_getRemoteUrl_render_empty(self):
        # no anchor is rendered if URL field is empty
        obj = self.portal['my-news-item']
        self.tile.populate_with_object(obj)
        data_mgr = ITileDataManager(self.tile)
        data = data_mgr.get()
        data['remote_url'] = u''
        data_mgr.set(data)
        tile = self.get_tile
        html = etree.HTML(tile())
        a = html.find('*//a')
        self.assertIsNone(a)
示例#6
0
class BannerTileTestCase(TestTileMixin, unittest.TestCase):
    def setUp(self):
        super(BannerTileTestCase, self).setUp()
        self.tile = BannerTile(self.cover, self.request)
        self.tile.__name__ = u'collective.cover.banner'
        self.tile.id = u'test'

    @unittest.expectedFailure  # FIXME: raises BrokenImplementation
    def test_interface(self):
        self.interface = IBannerTile
        self.klass = BannerTile
        super(BannerTileTestCase, self).test_interface()

    def test_default_configuration(self):
        self.assertTrue(self.tile.is_configurable)
        self.assertTrue(self.tile.is_editable)
        self.assertTrue(self.tile.is_droppable)

    def test_accepted_content_types(self):
        self.assertEqual(self.tile.accepted_ct(), ALL_CONTENT_TYPES)

    def test_populate_with_image_object_unicode(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), unicode)
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_tile_with_image_object_string(self):
        """This test complements test_populate_with_image_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(unicode(title, 'utf-8'), self.tile.data.get('title'))
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_with_link_object_unicode(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        remote_url = 'http://plone.org'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.setRemoteUrl('http://plone.org')
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), unicode)
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), remote_url)

    def test_populate_tile_with_link_object_string(self):
        """This test complements test_populate_with_link_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        remote_url = 'http://plone.org'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.setRemoteUrl('http://plone.org')
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(unicode(title, 'utf-8'), self.tile.data.get('title'))
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), remote_url)

    def test_render_empty(self):
        msg = 'Drag&amp;drop an image or link here to populate the tile.'

        self.tile.is_compose_mode = Mock(return_value=True)
        self.assertIn(msg, self.tile())

        self.tile.is_compose_mode = Mock(return_value=False)
        self.assertNotIn(msg, self.tile())

    def test_render_with_image(self):
        obj = self.portal['my-image']
        self.tile.populate_with_object(obj)
        rendered = self.tile()
        self.assertIn('<img ', rendered)
        # https://github.com/collective/collective.cover/issues/182
        self.assertIn('alt="Test image"', rendered)

    def test_render_with_link(self):
        obj = self.portal['my-link']
        self.tile.populate_with_object(obj)
        rendered = self.tile()
        self.assertNotIn('<img ', rendered)
        # FIXME: set remote_url on the object
        self.assertIn('<a href="http://">Test link</a>', rendered)
class BannerTileTestCase(TestTileMixin, unittest.TestCase):

    def setUp(self):
        super(BannerTileTestCase, self).setUp()
        self.tile = BannerTile(self.cover, self.request)
        self.tile.__name__ = u'collective.cover.banner'
        self.tile.id = u'test'

    @unittest.expectedFailure  # FIXME: raises BrokenImplementation
    def test_interface(self):
        self.interface = IBannerTile
        self.klass = BannerTile
        super(BannerTileTestCase, self).test_interface()

    def test_default_configuration(self):
        self.assertTrue(self.tile.is_configurable)
        self.assertTrue(self.tile.is_editable)
        self.assertTrue(self.tile.is_droppable)

    def test_accepted_content_types(self):
        self.assertEqual(self.tile.accepted_ct(), ALL_CONTENT_TYPES)

    def test_populate_with_image_object_unicode(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), unicode)
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_tile_with_image_object_string(self):
        """This test complements test_populate_with_image_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        obj = self.portal['my-image']
        obj.setTitle(title)
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(
            unicode(title, 'utf-8'),
            self.tile.data.get('title')
        )
        self.assertTrue(self.tile.has_image)
        self.assertIsNotNone(self.tile.getRemoteUrl())

    def test_populate_with_link_object_unicode(self):
        """We must store unicode always on schema.TextLine and schema.Text
        fields to avoid UnicodeDecodeError.
        """
        title = u'El veloz murciélago hindú comía feliz cardillo y kiwi'
        remote_url = 'http://plone.org'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.setRemoteUrl('http://plone.org')
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(self.tile.data.get('title'), title)
        self.assertIsInstance(self.tile.data.get('title'), unicode)
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), remote_url)

    def test_populate_tile_with_link_object_string(self):
        """This test complements test_populate_with_link_object_unicode
        using strings instead of unicode objects.
        """
        title = 'The quick brown fox jumps over the lazy dog'
        remote_url = 'http://plone.org'
        obj = self.portal['my-link']
        obj.setTitle(title)
        obj.setRemoteUrl('http://plone.org')
        obj.reindexObject()
        self.tile.populate_with_object(obj)
        self.assertEqual(
            unicode(title, 'utf-8'),
            self.tile.data.get('title')
        )
        self.assertFalse(self.tile.has_image)
        self.assertEqual(self.tile.getRemoteUrl(), remote_url)

    def test_render_empty(self):
        msg = 'Drag&amp;drop an image or link here to populate the tile.'

        self.tile.is_compose_mode = Mock(return_value=True)
        self.assertIn(msg, self.tile())

        self.tile.is_compose_mode = Mock(return_value=False)
        self.assertNotIn(msg, self.tile())

    def test_render_with_image(self):
        obj = self.portal['my-image']
        self.tile.populate_with_object(obj)
        rendered = self.tile()
        self.assertIn('<img ', rendered)
        # https://github.com/collective/collective.cover/issues/182
        self.assertIn('alt="Test image"', rendered)

    def test_render_with_link(self):
        obj = self.portal['my-link']
        self.tile.populate_with_object(obj)
        rendered = self.tile()
        self.assertNotIn('<img ', rendered)
        # FIXME: set remote_url on the object
        self.assertIn('<a href="http://">Test link</a>', rendered)