[Products.SilvaExternalSources][Sylvain Viollon] Review emi chan...

[email protected] Fri, 30 Aug 2013 12:07:32 +0200
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Fri Aug 30 12:07:28 2013 +0200
revision:  1107:e954b04dc0bc in Products.SilvaExternalSources
branch:    2.4
details:   https://hg.infrae.com/Products.SilvaExternalSources?cmd=changeset;node=e954b04dc0bc
modified:  Products/SilvaExternalSources/CodeSourceService.py Products/SilvaExternalSources/tests/test_source_import.py Products/SilvaExternalSources/tests/test_xml_export.py
added:     
removed:   
log:       Review emi changes, update tests.


diffstat:

 Products/SilvaExternalSources/CodeSourceService.py        |   63 ++++---
 Products/SilvaExternalSources/tests/test_source_import.py |   25 +--
 Products/SilvaExternalSources/tests/test_xml_export.py    |  103 +++++++------
 3 files changed, 98 insertions(+), 93 deletions(-)

diffs (266 lines):

diff -r 556f25bb3d60 -r e954b04dc0bc Products/SilvaExternalSources/CodeSourceService.py
--- a/Products/SilvaExternalSources/CodeSourceService.py	Wed Aug 28 18:23:53 2013 +0200
+++ b/Products/SilvaExternalSources/CodeSourceService.py	Fri Aug 30 12:07:28 2013 +0200
@@ -716,40 +716,47 @@
             if not below.endswith('/'):
                 below += '/'
         for source in self.context.get_installed_sources():
+            path = '/'.join(source.getPhysicalPath())
+            if (below and (not path.startswith(below) or
+                           (not child and '/' in path[len(below):]))):
+                continue
             if isinstance(source, Broken):
                 self.sources.append(
                     {'id': source.getId(),
                      'problems': ['Filesystem code is missing'],
                      'title': 'Corresponding Source implementation is missing',
-                     'path': '/'.join(source.getPhysicalPath()),
+                     'path': path,
                      'url': None})
-            else:
-                path = '/'.join(source.getPhysicalPath())
-                if (below and (not path.startswith(below) or
-                               (not child and '/' in path[len(below):]))):
-                    continue
-                message = None
-                if ICodeSource.providedBy(source):
-                    if update:
-                        installable = source._get_installable()
-                        if (installable is not None and
-                                os.path.isdir(installable._directory)):
-                            installable.update(source, True)
-                            message = _('Source updated.')
-                        else:
-                            message = _('Not updated. Folder missing.')
-                    elif bind and not source.get_fs_location():
-                        candidates = source.manage_getFileSystemLocations()
-                        if len(candidates) == 1:
-                            source._fs_location = candidates[0]
-                            message = _('Source associated with ${location}.',
-                                        mapping=dict(location=candidates[0]))
-                self.sources.append({'id': source.getId(),
-                                     'problems': source.test_source(),
-                                     'title': source.get_title(),
-                                     'path': path,
-                                     'url': source.absolute_url(),
-                                     'message': message})
+                continue
+            message = None
+            if ICodeSource.providedBy(source):
+                if update:
+                    installable = source._get_installable()
+                    if (installable is not None and
+                            os.path.isdir(installable._directory)):
+                        installable.update(source, True)
+                        message = _('Source updated.')
+                    else:
+                        self.sources.append(
+                            {'id': source.getId(),
+                             'problems': ['Filesystem code have been deleted'],
+                             'title': source.get_title(),
+                             'path':  path,
+                             'message': None,
+                             'url': source.absolute_url()})
+                        continue
+                elif bind and not source.get_fs_location():
+                    candidates = source.manage_getFileSystemLocations()
+                    if len(candidates) == 1:
+                        source._fs_location = candidates[0]
+                        message = _('Source associated with ${location}.',
+                                    mapping=dict(location=candidates[0]))
+            self.sources.append({'id': source.getId(),
+                                 'problems': source.test_source(),
+                                 'title': source.get_title(),
+                                 'path': path,
+                                 'url': source.absolute_url(),
+                                 'message': message})
         if below:
             self.filter = below.rstrip('/')
         else:
diff -r 556f25bb3d60 -r e954b04dc0bc Products/SilvaExternalSources/tests/test_source_import.py
--- a/Products/SilvaExternalSources/tests/test_source_import.py	Wed Aug 28 18:23:53 2013 +0200
+++ b/Products/SilvaExternalSources/tests/test_source_import.py	Fri Aug 30 12:07:28 2013 +0200
@@ -91,30 +91,23 @@
             source.js.objectIds(),
             ['advanced.js'])
 
-    def test_rename_and_update(self):
+    def test_rename_file_and_update(self):
         installable = CodeSourceInstallable(
             'test:', self.get_path())
         installable.install(self.root)
+        source = self.root._getOb('cs_fancytest', None)
+        self.assertItemsEqual(
+            source.objectIds(),
+            ['css', 'feedback', 'js', 'README', 'script'])
 
-        old_filename = self.get_path('README.txt')
-        new_filename = self.get_path('RENAMED_README.txt')
-
-        os.rename(old_filename, new_filename)
-
-        source = self.root._getOb('cs_fancytest', None)
-
-        try:
-            installable.update(source, purge=True)
-        except(IOError):
-            self.fail('''The code source cannot be updated because one
-                      of its file has been renamed on the file system.''')
-
+        os.rename(
+            self.get_path('README.txt'),
+            self.get_path('RENAMED_README.txt'))
+        installable.update(source, purge=True)
         self.assertItemsEqual(
             source.objectIds(),
             ['css', 'feedback', 'js', 'RENAMED_README', 'script'])
 
-        os.rename(new_filename, old_filename)
-
 
 def test_suite():
     suite = unittest.TestSuite()
diff -r 556f25bb3d60 -r e954b04dc0bc Products/SilvaExternalSources/tests/test_xml_export.py
--- a/Products/SilvaExternalSources/tests/test_xml_export.py	Wed Aug 28 18:23:53 2013 +0200
+++ b/Products/SilvaExternalSources/tests/test_xml_export.py	Fri Aug 30 12:07:28 2013 +0200
@@ -7,7 +7,7 @@
 from zope.component import getUtility
 from zope.intid.interfaces import IIntIds
 
-from Products.Silva.testing import TestRequest
+from Products.Silva.testing import TestRequest, Transaction
 from Products.Silva.tests.test_xml_export import SilvaXMLTestCase
 
 from zeam.form import silva as silvaforms
@@ -48,16 +48,17 @@
 
     def setUp(self):
         self.root = self.layer.get_application()
-        self.layer.login('author')
-        # You have to install the source as manager
-        factory = self.root.manage_addProduct['Silva']
-        factory.manage_addFolder('folder', 'Folder')
-        factory = self.root.folder.manage_addProduct['silva.app.document']
-        factory.manage_addDocument('example', 'Example')
-        version = self.root.folder.example.get_editable()
-        html = HTML_TOC_CODE_SOURCE.format(
-            getUtility(IIntIds).register(self.root.folder))
-        version.body.save(version, TestRequest(), html)
+        with Transaction():
+            self.layer.login('author')
+            # You have to install the source as manager
+            factory = self.root.manage_addProduct['Silva']
+            factory.manage_addFolder('folder', 'Folder')
+            factory = self.root.folder.manage_addProduct['silva.app.document']
+            factory.manage_addDocument('example', 'Example')
+            version = self.root.folder.example.get_editable()
+            html = HTML_TOC_CODE_SOURCE.format(
+                getUtility(IIntIds).register(self.root.folder))
+            version.body.save(version, TestRequest(), html)
 
     def test_export_two_tocs_in_document(self):
         exporter = self.assertExportEqual(
@@ -73,18 +74,20 @@
 
     def setUp(self):
         self.root = self.layer.get_application()
-        self.layer.login('manager')
-        # You have to install the source as manager
-        factory = self.root.manage_addProduct['Silva']
-        factory.manage_addFolder('folder', 'Folder')
-        token = self.root.manage_cutObjects(['cs_citation'])
-        self.root.folder.manage_pasteObjects(token)
-        self.layer.login('author')
-        # Continue as author
-        factory = self.root.folder.manage_addProduct['silva.app.document']
-        factory.manage_addDocument('example', 'Example')
-        version = self.root.folder.example.get_editable()
-        version.body.save(version, TestRequest(), HTML_CITATION_CODE_SOURCE)
+        with Transaction():
+            self.layer.login('manager')
+            # You have to install the source as manager
+            factory = self.root.manage_addProduct['Silva']
+            factory.manage_addFolder('folder', 'Folder')
+            token = self.root.manage_cutObjects(['cs_citation'])
+            self.root.folder.manage_pasteObjects(token)
+        with Transaction():
+            self.layer.login('author')
+            # Continue as author
+            factory = self.root.folder.manage_addProduct['silva.app.document']
+            factory.manage_addDocument('example', 'Example')
+            version = self.root.folder.example.get_editable()
+            version.body.save(version, TestRequest(), HTML_CITATION_CODE_SOURCE)
 
     def test_export_code_source_and_document(self):
         """Export a document containing a code source.
@@ -107,9 +110,10 @@
     def test_export_document_with_missing_source(self):
         """Export a document containing a missing code source.
         """
-        # Delete code source to break it.
-        self.root.manage_delObjects(['cs_citation'])
-        self.root.folder.manage_delObjects(['cs_citation'])
+        with Transaction():
+            # Delete code source to break it.
+            self.root.manage_delObjects(['cs_citation'])
+            self.root.folder.manage_delObjects(['cs_citation'])
 
         # Export
         exporter = self.assertExportEqual(
@@ -135,32 +139,33 @@
 
     def setUp(self):
         self.root = self.layer.get_application()
-        self.layer.login('editor')
-
-        factory = self.root.manage_addProduct['Silva']
-        factory.manage_addFolder('folder', 'Folder')
-        factory.manage_addFolder('other', 'Other Folder')
-        factory = self.root.folder.manage_addProduct['SilvaExternalSources']
-        factory.manage_addSourceAsset('asset', 'A source asset')
+        with Transaction():
+            self.layer.login('editor')
+            factory = self.root.manage_addProduct['Silva']
+            factory.manage_addFolder('folder', 'Folder')
+            factory.manage_addFolder('other', 'Other Folder')
+            factory = self.root.folder.manage_addProduct['SilvaExternalSources']
+            factory.manage_addSourceAsset('asset', 'A source asset')
 
     def save_asset(self, target=None):
-        # Helper to save the parameters in the test source asset.
-        version = self.root.folder.asset.get_editable()
+        with Transaction():
+            # Helper to save the parameters in the test source asset.
+            version = self.root.folder.asset.get_editable()
 
-        if target is not None:
-            target = getUtility(IIntIds).register(target)
-        else:
-            target = '0'
-        request = TestRequest(
-            form={'field_paths': str(target),
-                  'field_toc_types': "Silva Folder",
-                  'field_depth': "0",
-                  'field_sort_on': "silva",
-                  'field_order': "normal"})
-        factory = getWrapper(version, IExternalSourceManager)
-        source = factory(request, name='cs_toc')
-        marker = source.create()
-        version.set_parameters_identifier(source.getId())
+            if target is not None:
+                target = getUtility(IIntIds).register(target)
+            else:
+                target = '0'
+            request = TestRequest(
+                form={'field_paths': str(target),
+                      'field_toc_types': "Silva Folder",
+                      'field_depth': "0",
+                      'field_sort_on': "silva",
+                      'field_order': "normal"})
+            factory = getWrapper(version, IExternalSourceManager)
+            source = factory(request, name='cs_toc')
+            marker = source.create()
+            version.set_parameters_identifier(source.getId())
         self.assertIs(marker, silvaforms.SUCCESS)
         return version