def afterSetUp(self): if not self.skin: raise NotImplementedError('Subclasses must define skin') gender = self.portal.portal_categories.gender if 'male' not in gender.objectIds(): gender.newContent(id='male') self.portal.portal_caches.clearAllCache() self.auth = 'ERP5TypeTestCase:' person_module = self.portal.person_module if person_module._getOb('pers', None) is None: person_module.newContent(id='pers', portal_type='Person') self.tic() person_module.pers.setFirstName('Bob') person_module.pers.setGender(None) person_module.pers.setCareerRole(None) if person_module.pers._getOb('img', None) is None: person_module.pers.newContent(portal_type='Embedded File', id='img') if person_module._getOb('pers_without_image', None) is None: person = person_module.newContent( portal_type='Person', id = 'pers_without_image', first_name = 'Test') self.tic() self.portal.changeSkin(self.skin) self.validator = Validator() # make sure selections are empty name = 'person_module_selection' self.portal.portal_selections.setSelectionFor(name, Selection(name))
def test_InvoiceViewAsODT(self): """Create ODT printout """ resource = self.portal.getDefaultModule( self.resource_portal_type).newContent( portal_type=self.resource_portal_type, title='Resource',) client = self.portal.organisation_module.newContent( portal_type='Organisation', title='Client') vendor = self.portal.organisation_module.newContent( portal_type='Organisation', title='Vendor') invoice = self.portal.getDefaultModule(self.invoice_portal_type).newContent( portal_type=self.invoice_portal_type, specialise=self.business_process, start_date=DateTime(2008, 12, 31), title='Invoice', source_value=vendor, source_section_value=vendor, destination_value=client, destination_section_value=client) line = invoice.newContent(portal_type=self.invoice_line_portal_type, resource_value=resource, quantity=10, price=3) invoice.confirm() self.tic() odt = invoice.Invoice_viewAsODT() from Products.ERP5OOo.tests.utils import Validator odf_validator = Validator() err_list = odf_validator.validate(odt) if err_list: self.fail(''.join(err_list))
def test_report_view(self): self.loginAsUser('bob') self.portal.changeSkin('Deferred') response = self.publish( '/%s/person_module/pers/Base_viewHistory?deferred_portal_skin=%s' % (self.portal.getId(), self.skin), '%s:%s' % (self.username, self.password)) self.tic() last_message = self.portal.MailHost._last_message self.assertNotEquals((), last_message) mfrom, mto, message_text = last_message self.assertEqual( '"%s" <%s>' % (self.first_name, self.recipient_email_address), mto[0]) mail_message = email.message_from_string(message_text) for part in mail_message.walk(): content_type = part.get_content_type() file_name = part.get_filename() if content_type == self.content_type: # "History" is the title of Base_viewHistory form file_name = part.get_filename() expected_file_name = 'History%s' % self.attachment_file_extension self.assertEqual(expected_file_name, file_name) self.assertEqual( 'attachment; filename="%s"' % expected_file_name, part.get('Content-Disposition')) data = part.get_payload(decode=True) error_list = Validator().validate(data) if error_list: self.fail(''.join(error_list)) break else: self.fail('Attachment not found in email\n%s' % message_text)
def test_normal_form(self): self.loginAsUser('bob') # simulate a big request, for which Base_callDialogMethod will not issue a # redirect response = self.publish( '/%s/person_module/pers/Base_callDialogMethod?deferred_portal_skin=%s&' 'dialog_method=Person_view&dialog_id=Person_view&' 'deferred_style:int=1&junk=%s' % (self.portal.getId(), self.skin, 'X' * 2000), '%s:%s' % (self.username, self.password)) self.tic() last_message = self.portal.MailHost._last_message self.assertNotEquals((), last_message) mfrom, mto, message_text = last_message self.assertEqual( '"%s" <%s>' % (self.first_name, self.recipient_email_address), mto[0]) mail_message = email.message_from_string(message_text) for part in mail_message.walk(): content_type = part.get_content_type() if content_type == self.content_type: # "Person" is the title of Person_view form file_name = part.get_filename() expected_file_name = 'Person%s' % self.attachment_file_extension self.assertEqual(expected_file_name, file_name) self.assertEqual( 'attachment; filename="%s"' % expected_file_name, part.get('Content-Disposition')) data = part.get_payload(decode=True) error_list = Validator().validate(data) if error_list: self.fail(''.join(error_list)) break else: self.fail('Attachment not found in email\n%s' % message_text)
def afterSetUp(self): self.login() self.getPortal().Localizer = DummyLocalizer() v12schema_url = os.path.join(os.path.dirname(__file__), 'OpenDocument-v1.2-os-schema.rng') self.validator = Validator(schema_url=v12schema_url) en_file_path = os.path.join(os.path.dirname(__file__), 'test_document', 'DYNAMIC_STYLE_en.odt') en_file = open(en_file_path, 'rb') ja_file_path = os.path.join(os.path.dirname(__file__), 'test_document', 'DYNAMIC_STYLE_ja.odt') ja_file = open(ja_file_path, 'rb') addStyleSheet = self.getPortal().manage_addProduct['OFSP'].manage_addFile if getattr(self.getPortal(), 'Test_getODTStyleSheet_en', None) is None: addStyleSheet(id='Test_getODTStyleSheet_en', file=en_file, title='', precondition='', content_type=self.content_type_writer) if getattr(self.getPortal(), 'Test_getODTStyleSheet_ja', None) is None: addStyleSheet(id='Test_getODTStyleSheet_ja', file=ja_file, title='', precondition='', content_type=self.content_type_writer) if getattr(self.getPortal(), 'Base_getODTStyleSheetByLanguage', None) is None: script_body = """ current_language = context.Localizer.get_selected_language() return getattr(context, "%s_%s" % (parameter, current_language)) """ dispatcher = self.getPortal().manage_addProduct['PythonScripts'] dispatcher.manage_addPythonScript('Base_getODTStyleSheetByLanguage') script = self.getPortal().Base_getODTStyleSheetByLanguage script.ZPythonScript_edit('parameter', script_body)
def afterSetUp(self): self.auth = 'ERP5TypeTestCase:' portal = self.getPortal() container = portal.portal_skins.custom if self.form_id not in container.objectIds(): container.manage_addProduct['ERP5Form'].addERP5Form( self.form_id, 'View') form = getattr(container, self.form_id) # create some persons in person_module self.createPersons() # add a ListBox field form.manage_addField('listbox', 'listbox', 'ListBox') form.listbox.ListBox_setPropertyList( field_list_method='zCountDocumentPerOwner', field_count_method='', field_columns=[ 'owner | Owner', 'owner_count | Owner Count', 'number_count | Reference Count' ], ) # create a Field OOoChart form.manage_addField(self.ooo_chart_id, self.ooo_chart_id, 'OOoChart') # create a Field OOoChart form.manage_addField('your_ooochart', 'your_ooochart', 'OOoChart') # create a ZSQL Method sql = """SELECT owner, count(uid) AS owner_count, count(reference) AS number_count FROM catalog WHERE portal_type = 'Person' GROUP BY owner ORDER BY owner_count DESC""" template = String(source_string=sql) container.manage_addProduct['ZSQLMethods'].manage_addZSQLMethod( 'zCountDocumentPerOwner', 'zCountDocumentPerOwner', 'erp5_sql_connection', '', template) # enable preference preference = self.getPortal( ).portal_preferences.default_site_preference preference.setPriority(1) if preference.getPreferenceState() == 'disabled': self.getWorkflowTool().doActionFor(ob=preference, action='enable_action', wf_id='preference_workflow') self.validator = Validator() self.tic()
def afterSetUp(self): self.login() self.setSystemPreference() # XML validator v12schema_url = os.path.join(os.path.dirname(__file__), 'OpenDocument-v1.2-os-schema.rng') self.validator = Validator(schema_url=v12schema_url) foo_file_path = os.path.join(os.path.dirname(__file__), 'test_document', 'Foo_001.odg') foo_file = open(foo_file_path, 'rb') self._validate(foo_file.read()) custom = self.portal.portal_skins.custom addStyleSheet = custom.manage_addProduct['OFSP'].manage_addFile if custom._getOb('Foo_getODGStyleSheet', None) is None: addStyleSheet( id='Foo_getODGStyleSheet', file=foo_file, title='', precondition='', content_type='application/vnd.oasis.opendocument.graphics') erp5OOo = custom.manage_addProduct['ERP5OOo'] if custom._getOb('Foo_viewAsODGPrintout', None) is None: erp5OOo.addFormPrintout(id='Foo_viewAsODGPrintout', title='', form_name='Foo_view', template='Foo_getODGStyleSheet') if custom._getOb('Foo_viewProxyFieldAsODGPrintout', None) is None: erp5OOo.addFormPrintout(id='Foo_viewProxyFieldAsODGPrintout', title='', form_name='Foo_viewProxyField', template='Foo_getODGStyleSheet') if custom._getOb('FooReport_viewAsODGPrintout', None) is None: erp5OOo.addFormPrintout(id='FooReport_viewAsODGPrintout', title='') ## append 'test1' data to a listbox foo_module = self.portal.foo_module if foo_module._getOb('test1', None) is None: foo_module.newContent(id='test1', portal_type='Foo') test1 = foo_module.test1 if test1._getOb("foo_1", None) is None: test1.newContent("foo_1", title='Foo Line 1', portal_type='Foo Line') if test1._getOb("foo_2", None) is None: test1.newContent("foo_2", title='Foo Line 2', portal_type='Foo Line') self.tic()
def pt_render(self, source=0, extra_context={}): # Get request request = extra_context.get('REQUEST', self.REQUEST) # Get parent object (the one to render this template on) here = getattr(self, 'aq_parent', None) if here is None: # This is a system error raise ValueError, 'Can not render a template without a parent acquisition context' # Retrieve master document ooo_document = None # If script is setting, call it if self.ooo_script_name: ooo_script = getattr(here, self.ooo_script_name) ooo_document = ooo_script(self.ooo_stylesheet) else: ooo_document = getattr(here, self.ooo_stylesheet) format = request.get('format') try: # If style is dynamic, call it if getattr(aq_base(ooo_document), '__call__', None) is not None: request.set('format', None) ooo_document = ooo_document() finally: request.set('format', format) # Create a new builder instance ooo_builder = OOoBuilder(ooo_document) # Pass builder instance as extra_context extra_context['ooo_builder'] = ooo_builder # And render page template doc_xml = ZopePageTemplate.pt_render(self, source=source, extra_context=extra_context) if isinstance(doc_xml, unicode): doc_xml = doc_xml.encode('utf-8') # Replace the includes (doc_xml, attachments_dict) = self.renderIncludes(here, doc_xml, extra_context, request) try: default_styles_text = ooo_builder.extract('styles.xml') except AttributeError: default_styles_text = None # Add the associated files for dir_name, document_dict in attachments_dict.iteritems(): # Special case : the document is an OOo one if document_dict['doc_type'].startswith(self._OOo_content_type_root) or \ document_dict['doc_type'].startswith(self._ODF_content_type_root): ooo_builder.addFileEntry(full_path=dir_name, media_type=document_dict['doc_type']) ooo_builder.addFileEntry(full_path=dir_name + '/content.xml', media_type='text/xml', content=document_dict['document']) styles_text = default_styles_text if document_dict.has_key( 'stylesheet') and document_dict['stylesheet']: styles_text = document_dict['stylesheet'] if styles_text: ooo_builder.addFileEntry(full_path=dir_name + '/styles.xml', media_type='text/xml', content=styles_text) else: # Generic case ooo_builder.addFileEntry(full_path=dir_name, media_type=document_dict['doc_type'], content=document_dict['document']) # Replace content.xml in master openoffice template ooo_builder.replace(self.ooo_xml_file_id, doc_xml) # Old templates correction try: self.OLE_documents_zipstring except AttributeError: self.OLE_documents_zipstring = None # Convert if necessary opts = extra_context.get("options", dict()) # Get batch_mode batch_mode = opts.get('batch_mode', None) # If the file has embedded OLE documents, restore them if self.OLE_documents_zipstring: additional_builder = OOoBuilder(self.OLE_documents_zipstring) for name in additional_builder.getNameList(): if name not in ('META-INF/manifest.xml', ): # We don't replace manifest ooo_builder.replace(name, additional_builder.extract(name)) # Update the META information ooo_builder.updateManifest() # Produce final result if batch_mode: ooo = ooo_builder.render() else: ooo = ooo_builder.render(name=self.title or self.id, source=source) if DevelopmentMode: # Validate XML in development mode from Products.ERP5OOo.tests.utils import Validator err_list = Validator().validate(ooo) if err_list: LOG( 'ERP5OOo', PROBLEM, 'Validation of %s failed:\n%s' % (self.getId(), ''.join(err_list))) extension = None mimetype = ooo_builder.getMimeType() mimetypes_registry = self.getPortalObject().mimetypes_registry mimetype_object_list = mimetypes_registry.lookup(mimetype) for mimetype_object in mimetype_object_list: if mimetype_object.extensions: extension = mimetype_object.extensions[0] break elif mimetype_object.globs: extension = mimetype_object.globs.strip('*.') break if extension: filename = '%s.%s' % (self._getFileName(), extension) else: filename = self._getFileName() from Products.ERP5Type.Document import newTempOOoDocument tmp_ooo = newTempOOoDocument(self, self.title_or_id()) tmp_ooo.edit( data=ooo, filename=filename, content_type=mimetype, ) format = opts.get('format', request.get('format', None)) if format: # Performance improvement: # We already have OOo format data, so we do not need to call # convertToBaseFormat(), but just copy it into base_data property. tmp_ooo.setBaseData(ooo) tmp_ooo.setBaseContentType(mimetype) if request is not None and not batch_mode and not source: return tmp_ooo.index_html(REQUEST=request, RESPONSE=request.RESPONSE, format=format) return tmp_ooo.convert(format)[1]