[silva.core.editor][Sylvain Viollon] Test various scenarios with...
[email protected] Tue, 12 Nov 2013 15:24:50 +0100
| Newsgroups | gmane.comp.web.zope.silva.cvs |
|---|---|
| Message-ID | <[email protected]> |
author: Sylvain Viollon
date: Tue Nov 12 15:24:46 2013 +0100
revision: 274:6e808352342a in silva.core.editor
branch:
details: https://hg.infrae.com/silva.core.editor?cmd=changeset;node=6e808352342a
modified: src/silva/core/editor/tests/test_transform_input_image.py src/silva/core/editor/tests/test_transform_output_image.py src/silva/core/editor/transform/editor/input.py
added:
removed:
log: Test various scenarios with broken images (i.e. not images).
diffstat:
src/silva/core/editor/tests/test_transform_input_image.py | 124 ++++++++++++-
src/silva/core/editor/tests/test_transform_output_image.py | 2 +-
src/silva/core/editor/transform/editor/input.py | 17 +-
3 files changed, 134 insertions(+), 9 deletions(-)
diffs (188 lines):
diff -r 41a768839543 -r 6e808352342a src/silva/core/editor/tests/test_transform_input_image.py
--- a/src/silva/core/editor/tests/test_transform_input_image.py Mon Nov 11 14:49:55 2013 +0100
+++ b/src/silva/core/editor/tests/test_transform_input_image.py Tue Nov 12 15:24:46 2013 +0100
@@ -155,6 +155,126 @@
</div>
""" % (reference_name, target_id))
+ def test_edit_broken_reference_image(self):
+ """On input, broken references for images are replaced with a
+ broken logo. The reference 0 is used to identify them.
+ """
+
+ version = self.root.document.get_editable()
+ service = getUtility(IReferenceService)
+ reference = service.new_reference(version, name=u"test image")
+ reference.add_tag(u"original-image-id")
+ # Reference target is not set.
+
+ # Now if we display this in the editor we get a broken image:
+ intern_format = """
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ reference="original-image-id" />
+ </div>
+</div>
+"""
+ extern_format = self.transform(intern_format, IInputEditorFilter)
+ self.assertXMLEqual(
+ extern_format, """
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ data-silva-reference="original-image-id"
+ data-silva-target="0"
+ src="./++static++/silva.core.editor/broken-link.jpg"></img>
+ </div>
+</div>
+""")
+
+ # Now if we save it, we get back the original format. The
+ # reference is preserved.
+ saved_format = self.transform(extern_format, ISaveEditorFilter)
+ saved_references = list(service.get_references_from(version))
+ self.assertEqual(len(saved_references), 1)
+ saved_reference = saved_references[0]
+ self.assertEqual(saved_reference.source, version)
+ self.assertIs(saved_reference.target, None)
+ self.assertEqual(
+ saved_reference.tags,
+ [u"test image", u"original-image-id"])
+ self.assertXMLEqual(
+ saved_format, """
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ reference="original-image-id" />
+ </div>
+</div>
+""")
+
+ def test_edit_invalid_reference_image(self):
+ """On input, images that doesn't point to an includable image
+ content uses a broken logo as image source (but the reference
+ is kept).
+ """
+ with self.layer.open_fixture('chocobo.png') as stream:
+ factory = self.root.manage_addProduct['Silva']
+ factory.manage_addFile('peco', 'Peco Peco', stream)
+ factory.manage_addGhostAsset('image', None, haunted=self.root.peco)
+
+ version = self.root.document.get_editable()
+ service = getUtility(IReferenceService)
+ reference = service.new_reference(version, name=u"test image")
+ reference.set_target(self.root.image)
+ reference.add_tag(u"original-image-id")
+ target_id = get_content_id(self.root.image)
+
+ # Now if we display this in the editor we get a broken image:
+ self.assertXMLEqual(
+ self.transform("""
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ reference="original-image-id" />
+ </div>
+</div>
+""", IInputEditorFilter), """
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ data-silva-reference="original-image-id"
+ data-silva-target="%s"
+ src="./++static++/silva.core.editor/broken-link.jpg"></img>
+ </div>
+</div>
+""" % (target_id))
+
+ # If you fix the ghost to an image, everything works:
+ reference.set_target(self.root.chocobo)
+ target_id = get_content_id(self.root.chocobo)
+ self.assertXMLEqual(
+ self.transform("""
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ reference="original-image-id" />
+ </div>
+</div>
+""", IInputEditorFilter), """
+<div>
+ <p>Some description about the world</p>
+ <div class="image">
+ <img alt="image"
+ data-silva-reference="original-image-id"
+ data-silva-target="%s"
+ src="http://localhost/root/chocobo"></img>
+ </div>
+</div>
+""" % (target_id))
+
def test_edit_reference_image(self):
"""On input, updated local images update their references.
"""
@@ -165,7 +285,9 @@
reference.add_tag(u"original-image-id")
target_id = get_content_id(self.root.chocobo)
# So we have a reference, the one we will edit
- self.assertEqual(list(service.get_references_from(version)), [reference])
+ self.assertEqual(
+ list(service.get_references_from(version)),
+ [reference])
intern_format = self.transform(
"""
diff -r 41a768839543 -r 6e808352342a src/silva/core/editor/tests/test_transform_output_image.py
--- a/src/silva/core/editor/tests/test_transform_output_image.py Mon Nov 11 14:49:55 2013 +0100
+++ b/src/silva/core/editor/tests/test_transform_output_image.py Tue Nov 12 15:24:46 2013 +0100
@@ -327,7 +327,7 @@
actual_image_block = self.transform(editor_image_block,
ISaveEditorFilter)
- expected_image_block = """"""
+ expected_image_block = ""
self.assertXMLEqual(expected_image_block, actual_image_block)
diff -r 41a768839543 -r 6e808352342a src/silva/core/editor/transform/editor/input.py
--- a/src/silva/core/editor/transform/editor/input.py Mon Nov 11 14:49:55 2013 +0100
+++ b/src/silva/core/editor/transform/editor/input.py Tue Nov 12 15:24:46 2013 +0100
@@ -5,6 +5,8 @@
from five import grok
from zope.traversing.browser import absoluteURL
+from silva.core.interfaces import IImageIncluable
+
from ..base import ReferenceTransformationFilter, TransformationFilter
from ..interfaces import IInputEditorFilter
@@ -79,14 +81,15 @@
if 'reference' in image.attrib:
name, reference = self.get_reference(image.attrib['reference'])
if reference is not None:
+ target_id = '0'
+ url = './++static++/silva.core.editor/broken-link.jpg'
+ if reference.target_id:
+ target_id = str(reference.target_id)
+ target = reference.target
+ if IImageIncluable.providedBy(target):
+ url = absoluteURL(target, self.request)
image.attrib['data-silva-reference'] = name
- if reference.target_id:
- target = str(reference.target_id)
- url = absoluteURL(reference.target, self.request)
- else:
- target = '0'
- url = './++static++/silva.core.editor/broken-link.jpg'
- image.attrib['data-silva-target'] = target
+ image.attrib['data-silva-target'] = target_id
image.attrib['src'] = url
del image.attrib['reference']
elif 'src' in image.attrib: