[silva.core.smi][Sylvain Viollon] Add more tests.

[email protected] Thu, 14 Nov 2013 17:41:41 +0100
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Thu Nov 14 17:41:38 2013 +0100
revision:  713:2cfab1ce21da in silva.core.smi
branch:    2.4
details:   https://hg.infrae.com/silva.core.smi?cmd=changeset;node=2cfab1ce21da
modified:  src/silva/core/smi/tests/data/silva.png src/silva/core/smi/tests/test_func_file.py src/silva/core/smi/tests/test_func_ghost_asset.py
added:     src/silva/core/smi/tests/data/silva.png src/silva/core/smi/tests/test_func_file.py src/silva/core/smi/tests/test_func_ghost_asset.py
removed:   
log:       Add more tests.


diffstat:

 src/silva/core/smi/tests/data/silva.png           |  Bin 
 src/silva/core/smi/tests/test_func_file.py        |  148 +++++++++++++++++++
 src/silva/core/smi/tests/test_func_ghost_asset.py |  170 ++++++++++++++++++++++
 3 files changed, 318 insertions(+), 0 deletions(-)

diffs (328 lines):

diff -r 544c03390579 -r 2cfab1ce21da src/silva/core/smi/tests/data/silva.png
Binary file src/silva/core/smi/tests/data/silva.png has changed
diff -r 544c03390579 -r 2cfab1ce21da src/silva/core/smi/tests/test_func_file.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/silva/core/smi/tests/test_func_file.py	Thu Nov 14 17:41:38 2013 +0100
@@ -0,0 +1,148 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2013 Infrae. All rights reserved.
+# See also LICENSE.txt
+
+import unittest
+
+from Products.Silva.testing import FunctionalLayer, Transaction
+from Products.Silva.ftesting import smi_settings
+from silva.core.references.reference import get_content_id
+
+
+class AuthorFileTestCase(unittest.TestCase):
+    layer = FunctionalLayer
+    user = 'author'
+
+    def setUp(self):
+        self.root = self.layer.get_application()
+        self.layer.login('editor')
+        with Transaction():
+            factory = self.root.manage_addProduct['Silva']
+            with self.layer.open_fixture('silva.png') as stream:
+                factory.manage_addFile('logo', 'Silva Logo', stream)
+
+    def test_file_listing(self):
+        """You can add a file with Selenium (since the upload button
+        doesn't work), however we can check the listing and edit view.
+        """
+        browser = self.layer.get_web_browser(smi_settings)
+        browser.login(self.user)
+
+        self.assertEqual(browser.inspect.title, u"root")
+        self.assertEqual(
+            browser.inspect.tabs,
+            ['Content', 'Preview', 'Add', 'Properties', 'Settings'])
+        self.assertEqual(browser.inspect.tabs['Add'].open.click(), 200)
+        self.assertIn('Silva Ghost', browser.inspect.tabs['Add'].entries)
+        self.assertEqual(
+            browser.inspect.tabs['Add'].entries['Silva File'].click(),
+            200)
+        self.assertEqual(browser.inspect.form, ["Add a Silva File"])
+        self.assertEqual(browser.inspect.toolbar, [])
+
+        form = browser.inspect.form['Add a Silva File']
+        self.assertIn('Id', form.fields)
+        self.assertIn('Title', form.fields)
+        self.assertEqual(form.actions, ['Cancel', 'Save'])
+        self.assertEqual(form.actions['Cancel'].click(), 200)
+
+        self.assertEqual(
+            browser.inspect.listing_groups,
+            [u'Structural items', u'Assets'])
+        self.assertEqual(browser.inspect.listing_groups['Assets'].click(), 200)
+        self.assertEqual(
+            browser.inspect.listing,
+            [{'title': u'Silva Logo',
+              'identifier': 'logo',
+              'author': u'editor'}])
+        self.assertEqual(browser.inspect.listing[0].identifier.click(), 200)
+        self.assertEqual(browser.inspect.listing[0].goto_dropdown.click(), 200)
+        self.assertEqual(
+            browser.inspect.listing[0].goto_actions,
+            ['Preview', 'Properties'])
+        self.assertEqual(browser.inspect.listing[0].goto.click(), 200)
+
+        # Inspect newly created content
+        self.assertEqual(browser.inspect.title, u'Silva Logo')
+        self.assertEqual(
+            browser.inspect.tabs,
+            ['Edit', 'Preview', 'Properties', 'Settings'])
+        self.assertEqual(browser.inspect.views, ['View...'])
+        # We are on contents
+        self.assertEqual(browser.inspect.activetabs, ['Edit'])
+
+        self.assertEqual(browser.inspect.form, ['Edit file content'])
+        form = browser.inspect.form['Edit file content']
+        self.assertIn('Title', form.fields)
+        self.assertIn('File', form.fields)
+        self.assertEqual(form.actions, ['Back', 'Save changes'])
+
+        # An action let you directly request approval
+        self.assertEqual(browser.inspect.toolbar, [])
+
+        # We go through the tabs.
+        self.assertEqual(browser.inspect.tabs['Preview'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Preview'])
+        self.assertEqual(browser.inspect.tabs['Settings'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Settings'])
+        self.assertEqual(browser.inspect.tabs['Properties'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Properties'])
+        self.assertEqual(browser.inspect.tabs['Edit'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Edit'])
+
+        # Go up a level.
+        self.assertEqual(browser.inspect.parent.click(), 200)
+        self.assertEqual(browser.inspect.title, u"root")
+        self.assertEqual(browser.inspect.activetabs, ['Content'])
+
+        # We should see our ghost and the original document.
+        self.assertEqual(
+            browser.inspect.listing,
+            [{'title': u'Silva Logo',
+              'identifier': 'logo',
+              'author': u'editor'}])
+
+        # Select it
+        self.assertEqual(browser.inspect.listing[0].identifier.click(), 200)
+        self.assertEqual(
+            browser.inspect.toolbar,
+            ['Cut', 'Copy', 'Delete', 'Rename'])
+
+        self.assertEqual(browser.inspect.toolbar['Delete'].click(), 200)
+        # Content is not deleted, you have to confirm the deletion first.
+        self.assertEqual(
+            browser.inspect.listing,
+            [{'title': u'Silva Logo',
+              'identifier': 'logo',
+              'author': u'editor'}])
+        self.assertEqual(browser.inspect.dialog, ['Confirm deletion'])
+        self.assertEqual(
+            browser.inspect.dialog[0].buttons,
+            ['Cancel', 'Continue'])
+        self.assertEqual(
+            browser.inspect.dialog[0].buttons['Continue'].click(),
+            200)
+        self.assertEqual(browser.inspect.listing, [])
+        browser.macros.assertFeedback(u'Deleted "Silva Logo".')
+
+
+class EditorFileTestCase(AuthorFileTestCase):
+    user = 'editor'
+
+
+class ChiefEditorFileTestCase(EditorFileTestCase):
+    user = 'chiefeditor'
+
+
+class ManagerFileTestCase(ChiefEditorFileTestCase):
+    user = 'manager'
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(AuthorFileTestCase))
+    suite.addTest(unittest.makeSuite(EditorFileTestCase))
+    suite.addTest(unittest.makeSuite(ChiefEditorFileTestCase))
+    suite.addTest(unittest.makeSuite(ManagerFileTestCase))
+    return suite
+
diff -r 544c03390579 -r 2cfab1ce21da src/silva/core/smi/tests/test_func_ghost_asset.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/silva/core/smi/tests/test_func_ghost_asset.py	Thu Nov 14 17:41:38 2013 +0100
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2013 Infrae. All rights reserved.
+# See also LICENSE.txt
+
+import unittest
+
+from Products.Silva.testing import FunctionalLayer, Transaction
+from Products.Silva.ftesting import smi_settings
+from silva.core.references.reference import get_content_id
+
+
+class AuthorGhostAssetTestCase(unittest.TestCase):
+    layer = FunctionalLayer
+    user = 'author'
+
+    def setUp(self):
+        self.root = self.layer.get_application()
+        self.layer.login('editor')
+        with Transaction():
+            factory = self.root.manage_addProduct['Silva']
+            with self.layer.open_fixture('silva.png') as stream:
+                factory.manage_addFile('logo', 'Silva Logo', stream)
+
+    def test_ghost_add_and_listing(self):
+        browser = self.layer.get_web_browser(smi_settings)
+        browser.login(self.user)
+
+        self.assertEqual(browser.inspect.title, u"root")
+        self.assertEqual(
+            browser.inspect.tabs,
+            ['Content', 'Preview', 'Add', 'Properties', 'Settings'])
+        self.assertEqual(browser.inspect.tabs['Add'].open.click(), 200)
+        self.assertIn('Silva Ghost', browser.inspect.tabs['Add'].entries)
+        self.assertEqual(
+            browser.inspect.tabs['Add'].entries['Silva Ghost Asset'].click(),
+            200)
+        self.assertEqual(browser.inspect.form, ["Add a Silva Ghost Asset"])
+        self.assertEqual(browser.inspect.toolbar, [])
+
+        form = browser.inspect.form['Add a Silva Ghost Asset']
+        self.assertIn('Id', form.fields)
+        form.fields['Id'].value = 'ghost_asset'
+        # Lookup an element to ghost
+        self.assertEqual(browser.inspect.reference[0].click(), 200)
+        self.assertEqual(browser.inspect.dialog, ['Lookup an item'])
+        dialog = browser.inspect.dialog['Lookup an item']
+        self.assertEqual(dialog.buttons, ['Cancel'])
+        self.assertEqual(dialog.listing, ['current container', 'logo'])
+        self.assertEqual(dialog.listing['logo'].title, 'Silva Logo')
+        self.assertEqual(dialog.listing['logo'].select.click(), 200)
+        # This should have closed the dialog and selected the document
+        # in the hidden field
+        self.assertEqual(browser.inspect.dialog, [])
+        self.assertIn('Haunted', form.fields)
+        self.assertEqual(
+            form.fields['Haunted'].value,
+            str(get_content_id(self.root.logo)))
+        self.assertEqual(form.actions, ['Cancel', 'Save'])
+        self.assertEqual(form.actions['Save'].click(), 200)
+        browser.macros.assertFeedback(u"Added Silva Ghost Asset.")
+
+        # Inspect newly created content
+        self.assertEqual(browser.inspect.title, u'Silva Logo')
+        self.assertEqual(
+            browser.inspect.tabs,
+            ['Edit', 'Preview', 'Properties', 'Settings'])
+        self.assertEqual(browser.inspect.views, ['View...'])
+        # We are on contents
+        self.assertEqual(browser.inspect.activetabs, ['Edit'])
+
+        self.assertEqual(browser.inspect.form, ['Edit ghost'])
+        form = browser.inspect.form['Edit ghost']
+        self.assertNotEqual(form.fields, [])
+        self.assertIn('Haunted', form.fields)
+        self.assertEqual(
+            form.fields['Haunted'].value,
+            str(get_content_id(self.root.logo)))
+        self.assertEqual(form.actions, ['Back', 'Save changes'])
+
+        # An action let you directly request approval
+        self.assertEqual(browser.inspect.toolbar, [])
+
+        # We go through the tabs.
+        self.assertEqual(browser.inspect.tabs['Preview'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Preview'])
+        self.assertEqual(browser.inspect.tabs['Settings'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Settings'])
+        self.assertEqual(browser.inspect.tabs['Properties'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Properties'])
+        self.assertEqual(browser.inspect.tabs['Edit'].name.click(), 200)
+        self.assertEqual(browser.inspect.activetabs, ['Edit'])
+
+        # Go up a level.
+        self.assertEqual(browser.inspect.parent.click(), 200)
+        self.assertEqual(browser.inspect.title, u"root")
+        self.assertEqual(browser.inspect.activetabs, ['Content'])
+
+        self.assertEqual(
+            browser.inspect.listing_groups,
+            [u'Structural items', u'Assets'])
+        self.assertEqual(browser.inspect.listing_groups['Assets'].click(), 200)
+
+        # We should see our ghost and the original document.
+        self.assertEqual(
+            browser.inspect.listing,
+            [{'title': u'Silva Logo',
+              'identifier': 'ghost_asset',
+              'author': self.user},
+             {'title': u'Silva Logo',
+              'identifier': 'logo',
+              'author': u'editor'}])
+
+        # Select it
+        self.assertEqual(browser.inspect.listing[1].identifier.click(), 200)
+
+        self.assertEqual(
+            browser.inspect.toolbar,
+            ['Cut', 'Copy', 'Delete', 'Rename'])
+        self.assertEqual(
+            browser.inspect.listing[1].goto_dropdown.click(),
+            200)
+        self.assertEqual(
+            browser.inspect.listing[1].goto_actions,
+            ['Preview', 'Properties'])
+
+        self.assertEqual(browser.inspect.toolbar['Delete'].click(), 200)
+        # Content is not deleted, you have to confirm the deletion first.
+        self.assertEqual(
+            browser.inspect.listing,
+            [{'title': u'Silva Logo',
+              'identifier': 'ghost_asset',
+              'author': self.user},
+             {'title': u'Silva Logo',
+              'identifier': 'logo',
+              'author': u'editor'}])
+        self.assertEqual(browser.inspect.dialog, ['Confirm deletion'])
+        self.assertEqual(
+            browser.inspect.dialog[0].buttons,
+            ['Cancel', 'Continue'])
+        self.assertEqual(
+            browser.inspect.dialog[0].buttons['Continue'].click(),
+            200)
+        self.assertEqual(
+            browser.inspect.listing,
+            [{'title': u'Silva Logo',
+              'identifier': 'ghost_asset',
+              'author': self.user}])
+        browser.macros.assertFeedback(u'Deleted "Silva Logo".')
+
+
+class EditorGhostAssetTestCase(AuthorGhostAssetTestCase):
+    user = 'editor'
+
+
+class ChiefEditorGhostAssetTestCase(EditorGhostAssetTestCase):
+    user = 'chiefeditor'
+
+
+class ManagerGhostAssetTestCase(ChiefEditorGhostAssetTestCase):
+    user = 'manager'
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(AuthorGhostAssetTestCase))
+    suite.addTest(unittest.makeSuite(EditorGhostAssetTestCase))
+    suite.addTest(unittest.makeSuite(ChiefEditorGhostAssetTestCase))
+    suite.addTest(unittest.makeSuite(ManagerGhostAssetTestCase))
+    return suite
+