[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