diff --git a/product/ERP5OOo/tests/testOOoImport.py b/product/ERP5OOo/tests/testOOoImport.py index 19dcd61b77a8e80b1463db6ee5f2d68231ec6bab..1c7dffd41163a19125687102348286e0ea9ac398 100644 --- a/product/ERP5OOo/tests/testOOoImport.py +++ b/product/ERP5OOo/tests/testOOoImport.py @@ -1,7 +1,7 @@ ############################################################################## # -*- coding: utf8 -*- -# Copyright (c) 2005 Nexedi SARL and Contributors. All Rights Reserved. -# Nicolas Delaby <nicolas@nexedi.com> +# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved. +# Mohamadou Mbengue <mmbengue@gmail.com> # # WARNING: This program as such is intended to be used by professional # programmers who take the whole responsability of assessing all potential @@ -29,7 +29,6 @@ import unittest import os -import sys from zLOG import LOG from Testing import ZopeTestCase @@ -37,6 +36,16 @@ from AccessControl.SecurityManagement import newSecurityManager from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.Sequence import SequenceList from Products.ERP5OOo.OOoUtils import OOoParser +from Products.ERP5.Document.Document import ConversionError +from DateTime import DateTime +import transaction + +person_current_id = 1 + +def shout(msg): + msg = str(msg) + ZopeTestCase._print('\n ' + msg) + LOG('Testing... ', 0, msg) def unpackData(data): """ @@ -75,6 +84,8 @@ class TestOOoImport(ERP5TypeTestCase): # pseudo constants RUN_ALL_TEST = 1 QUIET = 0 + gender_base_cat_id = 'gender' + function_base_cat_id = 'function' ################################## ## ZopeTestCase Skeleton @@ -84,7 +95,7 @@ class TestOOoImport(ERP5TypeTestCase): """ Return the title of the current test set. """ - return "ERP5 Site - importing" + return "ERP5 Site - OOo File importing" def getBusinessTemplateList(self): """ @@ -101,18 +112,49 @@ class TestOOoImport(ERP5TypeTestCase): # Enable oood on localhost:8008 # This should probably become a test runner option self.pref = self.portal.portal_preferences.newContent( - portal_type='System Preference') + portal_type='Preference') self.pref.setPreferredOoodocServerAddress('localhost') self.pref.setPreferredOoodocServerPortNumber(8008) self.pref.enable() - get_transaction().commit() + + # create browser_id_manager + ZopeTestCase.installProduct('Sessions') + if not "browser_id_manager" in self.portal.objectIds(): + self.portal.manage_addProduct['Sessions'].constructBrowserIdManager() + + # We create categories needed + # For testing file whith column corresponding to category + portal_categories = self.getCategoryTool() + + gender_bc = self.gender_base_cat_id + if gender_bc not in portal_categories.objectIds(): + portal_categories.newContent(portal_type='Base Category', id=gender_bc) + if not portal_categories[gender_bc].has_key('male'): + portal_categories[gender_bc].newContent(id='male', portal_type='Category', title='Male') + if not portal_categories[gender_bc].has_key('female'): + portal_categories[gender_bc].newContent(id='female', portal_type='Category', title='Female') + + function_bc = self.function_base_cat_id + if function_bc not in portal_categories.objectIds(): + portal_categories.newContent(portal_type='Base Category', id=function_bc) + if not portal_categories[function_bc].has_key('director'): + portal_categories[function_bc].newContent(id='director', portal_type='Category', title='Director') + if not portal_categories[function_bc].has_key('manager'): + portal_categories[function_bc].newContent(id='manager', portal_type='Category', title='Manager') + + transaction.commit() self.tic() def beforeTearDown(self): region = self.portal.portal_categories.region region.manage_delObjects(list(region.objectIds())) self.portal.portal_preferences.manage_delObjects([self.pref.getId()]) - get_transaction().commit() + gender = self.portal.portal_categories.gender + function = self.portal.portal_categories.function + gender.manage_delObjects(list(gender.objectIds())) + function.manage_delObjects(list(function.objectIds())) + + transaction.commit() self.tic() @@ -126,7 +168,8 @@ class TestOOoImport(ERP5TypeTestCase): """ user_name = 'bartek' user_folder = self.portal.acl_users - user_folder._doAddUser(user_name, '', ['Manager', 'Owner', 'Assignor'], []) + user_folder._doAddUser(user_name, '', ['Manager', 'Owner', 'Assignor', + 'Associate', 'Auditor', 'Author'], []) user = user_folder.getUserById(user_name).__of__(user_folder) newSecurityManager(None, user) @@ -142,7 +185,7 @@ class TestOOoImport(ERP5TypeTestCase): person_module = self.getPortal().person_module #purge existing persons person_module.manage_delObjects([id for id in person_module.getObjectIds()]) - get_transaction().commit(); self.tic() + transaction.commit(); self.tic() listbox=( { 'listbox_key': '001', 'portal_type_property_list':'Person.title'}, @@ -156,30 +199,370 @@ class TestOOoImport(ERP5TypeTestCase): person_module.Base_importFile(import_file=f, listbox=listbox) def stepCheckActivitiesCount(self, sequence=None, sequence_list=None, **kw): - message_list = self.getPortal().portal_activities.getMessageList() - self.assertEqual(102, len(message_list)) # 101 import activities - # +1 immediateReindexObject for - # in portal_activities - method_id = message_list[0].method_id - self.assertEqual('Base_importFileLineDefaultScript',method_id) + message_list = self.getPortal().portal_activities.getMessageList() + self.assertEqual(102,len(message_list)) + '''for i in range(101): + method_id = message_list[i].method_id + self.assertEqual('Base_importFileLine',method_id)''' def stepCheckImportedPersonList(self, sequence=None, sequence_list=None, **kw): + global person_current_id person_module = self.getPortal().person_module for i in range(101): - object = person_module['%s' % (i+1)] + object_id = i + person_current_id + object = person_module['%s' % (object_id)] self.assertEqual('John Doe %s' % (i), object.getTitle()) self.assertEqual('John', object.getFirstName()) self.assertEqual('Doe %s' % (i), object.getLastName()) self.assertEqual('john.doe%s@foo.com' % (i), object.getDefaultEmailText()) + person_current_id = person_current_id+101 - ################################## - ## Tests - ################################## + def stepCheckImportedPersonListBlank(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(101): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('Doe %s' % (i), object.getLastName()) + self.assertEqual('john.doe%s@foo.com' % (i), object.getDefaultEmailText()) + person_current_id = person_current_id+101 + + def stepCheckImportedPersonListCategory(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(10): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('male', object.getGender()) + self.assertEqual('director', object.getFunction()) + person_current_id = person_current_id+10 + + def stepCheckAuthorImportedPersonList(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(10): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('male', object.getGender()) + self.assertEqual('director', object.getFunction()) + person_current_id=person_current_id+10 + + def stepCheckImportedPersonListFreeText(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(10): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('male', object.getGenderFreeText()) + self.assertEqual('Director', object.getFunctionFreeText()) + person_current_id=person_current_id+10 + + def stepCheckImportedPersonListAccentuated(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(10): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + title = 'John Doe 茅 %s' % (i) + #encode_title = title.encode('UTF-8') + self.assertEqual(title, object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('male', object.getGender()) + self.assertEqual('director', object.getFunction()) + person_current_id = person_current_id+10 + + def stepCheckXLSImportedPersonList(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(10): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('Doe %s' % (i), object.getLastName()) + self.assertEqual('john.doe%s@foo.com' % (i), object.getDefaultEmailText()) + person_current_id = person_current_id+10 + + def stepCheckImportedPersonListWithDates(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(9): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('male', object.getGender()) + self.assertEqual(DateTime('2008/02/0%s %s' % (i+1, 'GMT')), object.getStartDate()) + object = person_module['%s' % (object_id+1)] + self.assertEqual(DateTime('2008/02/%s %s' % (10, 'GMT')), object.getStartDate()) + person_current_id = person_current_id+10 + + def stepCheckImportFloatsAndPercentage(self, sequence=None, sequence_list=None, **kw): + currency_module = self.getPortal().currency_module + for i in range(10): + height_quantity = 1000.3 + i + object = currency_module['%s' % (i + 1)] + self.assertEqual('Currency %s' % (i), object.getTitle()) + self.assertEqual(height_quantity, object.getHeightQuantity()) + + def stepCheckImportedPersonList_1(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(1000): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('Doe %s' % (i), object.getLastName()) + self.assertEqual('john.doe%s@foo.com' % (i), object.getDefaultEmailText()) + person_current_id = person_current_id+1000 + + def stepCheckImportedPersonList_2(self, sequence=None, sequence_list=None, **kw): + global person_current_id + person_module = self.getPortal().person_module + for i in range(10000): + object_id = i + person_current_id + object = person_module['%s' % (object_id)] + self.assertEqual('John Doe %s' % (i), object.getTitle()) + self.assertEqual('John', object.getFirstName()) + self.assertEqual('Doe %s' % (i), object.getLastName()) + self.assertEqual('john.doe%s@foo.com' % (i), object.getDefaultEmailText()) + person_current_id = person_current_id+10000 + + def stepCheckImportedOrganisationList(self, sequence=None, sequence_list=None, **kw): + organisation_module = self.getPortal().organisation_module + for i in range(10): + object_id = i + 1 + object = organisation_module['%s' % (object_id)] + self.assertEqual('Foo Organisation %s' % (i), object.getTitle()) + self.assertEqual('Description organisation %s' % (i), object.getDescription()) + self.assert_('1234567%s' % (i) in object.getTelephoneText()) + self.assertEqual('org%s@foo.com' % (i), object.getEmailText()) + + def stepImportFileNoMapping(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_list.ods') + #self.logMessage("f : %s" % str(f)) + + person_module = self.getPortal().person_module + person_module.Base_importFile(import_file=f, listbox=()) + self.assertRaises(ConversionError, person_module.Base_importFile, import_file=f, listbox=()) + #self.logMessage("Validation failed : %s" % kw) + + def stepImportFileWithBlankLine(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_list_blank_line.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.last_name'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.default_email_text'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportFileWithCategory(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_with_categories.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.gender'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.function'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportFileWithDates(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_with_dates.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.gender'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.start_date'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) - def test_01_ImportObjectFromOOoInActivities(self, quiet=QUIET, run=RUN_ALL_TEST): + def stepImportFloatsAndPercentage(self, sequence=None, sequence_list=None, **kw): """ - Simulate import of OOo file using Base_importFile for Person Module. + This test make sure that either floats (1000,9), sientific numbers (1,00E+003) + or percentage (19%) are correctly imported . """ + f = makeFileUpload('import_float_and_percentage.ods') + currency_module = self.getPortal().currency_module + currency_module.manage_delObjects([id for id in currency_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Currency.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Currency.height_quantity'} + ) + currency_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportOrganisation(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_organisation_list.ods') + organisation_module = self.getPortal().organisation_module + #purge existing persons + organisation_module.manage_delObjects([id for id in organisation_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Organisation.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Organisation.description'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Organisation.telephone_text'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Organisation.email_text'} + ) + organisation_module.Base_importFile(import_file=f, listbox=listbox) + + def stepAuthorImportFile(self, sequence=None, sequence_list=None, **kw): + user_name = 'author' + user_folder = self.portal.acl_users + user_folder._doAddUser(user_name, '', ['Author', 'Member'], []) + user = user_folder.getUserById(user_name).__of__(user_folder) + newSecurityManager(None, user) + + f = makeFileUpload('import_data_with_categories.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.gender'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.function'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportFileWithFreeText(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_with_categories.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.gender_free_text'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.function_free_text'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportFileWithAccentuatedText(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_accentuated_text.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.gender'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.function'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportXLSFile(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_list.xls') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.last_name'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.default_email_text'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportBigFile_1(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_big_file_1.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.last_name'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.default_email_text'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + def stepImportBigFile_2(self, sequence=None, sequence_list=None, **kw): + f = makeFileUpload('import_data_big_file_2.ods') + person_module = self.getPortal().person_module + #purge existing persons + person_module.manage_delObjects([id for id in person_module.getObjectIds()]) + transaction.commit(); self.tic() + listbox=( + { 'listbox_key': '001', + 'portal_type_property_list':'Person.title'}, + { 'listbox_key': '002', + 'portal_type_property_list':'Person.first_name'}, + { 'listbox_key': '003', + 'portal_type_property_list':'Person.last_name'}, + { 'listbox_key': '004', + 'portal_type_property_list':'Person.default_email_text'} + ) + person_module.Base_importFile(import_file=f, listbox=listbox) + + ## Tests + ################################## + def test_01_ImportFileLine(self, quiet=QUIET, run=RUN_ALL_TEST): + # Simulate import of OOo file Base_importFile for Person Module. if not run: return sequence_list = SequenceList() step_list = [ 'stepImportRawDataFile' @@ -191,39 +574,149 @@ class TestOOoImport(ERP5TypeTestCase): sequence_list.addSequenceString(sequence_string) sequence_list.play(self, quiet=quiet) - def test_Base_getCategoriesSpreadSheetMapping(self): - # test structure returned by Base_getCategoriesSpreadSheetMapping - mapping = self.portal.Base_getCategoriesSpreadSheetMapping( - import_file=makeFileUpload('import_region_category.sxc')) - self.assertTrue(isinstance(mapping, dict)) - self.assertEquals(['region'], list(mapping.keys())) - region = mapping['region'] - self.assertTrue(isinstance(region, list)) - self.assertEquals(6, len(region)) - # base category is contained in the list - self.assertEquals(dict(path='region', - title='region'), - region[0]) - self.assertEquals(dict(path='region/europe', - title='Europe'), - region[1]) - self.assertEquals(dict(codification='FR', - description='A Country', - int_index='1', - path='region/europe/france', - title='France'), - region[2]) - # strings are encoded in UTF8 - self.assertTrue(isinstance(region[1]['title'], str)) - self.assertTrue(isinstance(region[1]['path'], str)) - for k in region[1].keys(): - self.assertTrue(isinstance(k, str), (k, type(k))) + def test_02_ImportFileBlankLine(self, quiet=QUIET, run=RUN_ALL_TEST): + #Simulate import of an OOo file with blank lines. + #self.logMessage('Simulate import of an OOo file with blank lines') + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFileWithBlankLine' + ,'Tic' + ,'stepCheckImportedPersonListBlank' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_03_ImportNoMapping(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFileNoMapping' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_04_ImportFileWithCategory(self, quiet=QUIET, run=RUN_ALL_TEST): + #self.logMessage('Simulate import of an OOo file with blank lines') + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFileWithCategory' + ,'Tic' + ,'stepCheckImportedPersonListCategory' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_05_ImportOrganisation(self, quiet=QUIET, run=RUN_ALL_TEST): + #self.logMessage('Simulate import of an OOo file with blank lines') + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportOrganisation' + ,'Tic' + ,'stepCheckImportedOrganisationList' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_06_AuthorImportFile(self, quiet=QUIET, run=RUN_ALL_TEST): + #self.logMessage('Simulate import of an OOo file with blank lines') + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepAuthorImportFile' + ,'Tic' + ,'stepCheckAuthorImportedPersonList' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_07_ImportFileWithFreeText(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFileWithFreeText' + ,'Tic' + ,'stepCheckImportedPersonListFreeText' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_08_ImportFileWithAccentuatedText(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFileWithAccentuatedText' + ,'Tic' + ,'stepCheckImportedPersonListAccentuated' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_09_ImportXLSFile(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportXLSFile' + ,'Tic' + ,'stepCheckXLSImportedPersonList' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_10_ImportFileWithDates(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFileWithDates' + ,'Tic' + ,'stepCheckImportedPersonListWithDates' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_11_ImportFloatAndPercentage(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportFloatsAndPercentage' + ,'Tic' + ,'stepCheckImportFloatsAndPercentage' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + def test_12_ImportBigFile_1(self, quiet=QUIET, run=RUN_ALL_TEST): + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportBigFile_1' + ,'Tic' + ,'stepCheckImportedPersonList_1' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + + ''' + def test_12_ImportBigFile_2(self, quiet=QUIET, run=RUN_ALL_TEST): + #self.logMessage('Simulate import of an OOo file with blank lines') + if not run: return + sequence_list = SequenceList() + step_list = [ 'stepImportBigFile_2' + ,'Tic' + ,'stepCheckImportedPersonList_2' + ] + sequence_string = ' '.join(step_list) + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self, quiet=quiet) + ''' def test_CategoryTool_importCategoryFile(self): # tests simple use of CategoryTool_importCategoryFile script self.portal.portal_categories.CategoryTool_importCategoryFile( import_file=makeFileUpload('import_region_category.sxc')) - get_transaction().commit() + transaction.commit() self.tic() region = self.portal.portal_categories.region self.assertEqual(2, len(region)) @@ -240,7 +733,7 @@ class TestOOoImport(ERP5TypeTestCase): # tests that CategoryTool_importCategoryFile supports .xls files self.portal.portal_categories.CategoryTool_importCategoryFile( import_file=makeFileUpload('import_region_category.xls')) - get_transaction().commit() + transaction.commit() self.tic() region = self.portal.portal_categories.region self.assertEqual(2, len(region)) @@ -253,101 +746,6 @@ class TestOOoImport(ERP5TypeTestCase): self.assertEquals('FR', france.getCodification()) self.assertEquals(1, france.getIntIndex()) - def test_CategoryTool_importCategoryFile_PathStars(self): - # tests CategoryTool_importCategoryFile with * in the paths columns - self.portal.portal_categories.CategoryTool_importCategoryFile( - import_file=makeFileUpload('import_region_category_path_stars.sxc')) - get_transaction().commit() - self.tic() - region = self.portal.portal_categories.region - self.assertEqual(2, len(region)) - self.assertTrue('europe' in region.objectIds()) - self.assertTrue('germany' in region.europe.objectIds()) - self.assertTrue('france' in region.europe.objectIds()) - france = region.europe.france - self.assertEquals('France', france.getTitle()) - self.assertEquals('A Country', france.getDescription()) - self.assertEquals('FR', france.getCodification()) - self.assertEquals(1, france.getIntIndex()) - - def test_CategoryTool_importCategoryFile_PathStars_noID(self): - # tests CategoryTool_importCategoryFile with * in the paths columns, and no - # ID column, and non ascii titles - self.portal.portal_categories.CategoryTool_importCategoryFile( - import_file=makeFileUpload( - 'import_region_category_path_stars_non_ascii.sxc')) - get_transaction().commit() - self.tic() - region = self.portal.portal_categories.region - self.assertEqual(2, len(region)) - self.assertTrue('europe' in region.objectIds()) - self.assertTrue('germany' in region.europe.objectIds()) - self.assertTrue('france' in region.europe.objectIds()) - france = region.europe.france - self.assertEquals('Fr脿nce', france.getTitle()) - self.assertEquals('A Country', france.getDescription()) - self.assertEquals('FR', france.getCodification()) - self.assertEquals(1, france.getIntIndex()) - - def test_CategoryTool_importCategoryFile_DuplicateIds(self): - # tests CategoryTool_importCategoryFile when a document contain same - # categories ID at different level (a good candidate for an acquisition - # bug) - self.portal.portal_categories.CategoryTool_importCategoryFile( - import_file=makeFileUpload('import_region_category_duplicate_ids.sxc')) - get_transaction().commit() - self.tic() - region = self.portal.portal_categories.region - self.assertEqual(1, len(region)) - self.assertEquals(['europe'], list(region.objectIds())) - self.assertEquals(['france'], list(region.europe.objectIds())) - self.assertEquals(['europe'], list(region.europe.france.objectIds())) - self.assertEquals(['france'], list(region.europe.france.europe.objectIds())) - self.assertEquals([], list(region.europe.france.europe.france.objectIds())) - - def test_Base_getCategoriesSpreadSheetMapping_DuplicateIdsAtSameLevel(self): - # tests Base_getCategoriesSpreadSheetMapping when a document contain same - # categories ID at the same level, in that case, a ValueError is raised - import_file = makeFileUpload( - 'import_region_category_duplicate_ids_same_level.sxc') - try: - self.portal.portal_categories.Base_getCategoriesSpreadSheetMapping( - import_file=import_file) - except ValueError, error: - # 'france' is the duplicate ID in this spreadsheet - self.assertTrue('france' in str(error), str(error)) - else: - self.fail('ValueError not raised') - - # Base_getCategoriesSpreadSheetMapping performs checks on the spreadsheet, - # an "invalid spreadsheet" error handler can be provided, to report errors - # nicely. - message_list = [] - def on_invalid_spreadsheet(message): - message_list.append(message) - - import_file = makeFileUpload( - 'import_region_category_duplicate_ids_same_level.sxc') - self.portal.portal_categories.Base_getCategoriesSpreadSheetMapping(import_file, - invalid_spreadsheet_error_handler=on_invalid_spreadsheet) - - self.assertEquals(1, len(message_list)) - self.assertTrue('france' in str(message_list[0])) - - def test_Base_getCategoriesSpreadSheetMapping_WrongHierarchy(self): - # tests Base_getCategoriesSpreadSheetMapping when the spreadsheet has an - # invalid hierarchy (#788) - import_file = makeFileUpload( - 'import_region_category_wrong_hierarchy.sxc') - try: - self.portal.portal_categories.Base_getCategoriesSpreadSheetMapping( - import_file=import_file) - except ValueError, error: - # 'wrong_hierarchy' is the ID of the category where the problem happens - self.assertTrue('wrong_hierarchy' in str(error), str(error)) - else: - self.fail('ValueError not raised') - # simple OOoParser tests def test_getSpreadSheetMapping(self): parser = OOoParser() @@ -361,7 +759,7 @@ class TestOOoImport(ERP5TypeTestCase): ['Title', 'First Name', 'Last Name', 'Default Email Text']) self.assertEquals(person_mapping[1], ['John Doe 0', 'John', 'Doe 0', 'john.doe0@foo.com']) - + def test_openFromString(self): parser = OOoParser() parser.openFromString( @@ -369,39 +767,6 @@ class TestOOoImport(ERP5TypeTestCase): mapping = parser.getSpreadsheetsMapping() self.assertEquals(['Person'], mapping.keys()) - def test_getSpreadSheetMappingStyle(self): - parser = OOoParser() - parser.openFile(open(makeFilePath('import_data_list_with_style.ods'), 'rb')) - mapping = parser.getSpreadsheetsMapping() - self.assertEquals(['Feuille1'], mapping.keys()) - self.assertEquals(mapping['Feuille1'][1], - ['a line with style']) - self.assertEquals(mapping['Feuille1'][2], - ['a line with multiple styles']) - self.assertEquals(mapping['Feuille1'][3], - ['http://www.erp5.org']) - self.assertEquals(mapping['Feuille1'][4], - ['john.doe@example.com']) - - def test_getSpreadSheetMappingDataTypes(self): - parser = OOoParser() - parser.openFile(open(makeFilePath('import_data_list_data_type.ods'), 'rb')) - mapping = parser.getSpreadsheetsMapping() - self.assertEquals(['Feuille1'], mapping.keys()) - self.assertEquals(mapping['Feuille1'][0], - ['1234.5678']) - self.assertEquals(mapping['Feuille1'][1], - ['1234.5678']) - self.assertEquals(mapping['Feuille1'][2], - ['0.1']) - self.assertEquals(mapping['Feuille1'][3], - ['2008-11-14']) - self.assertEquals(mapping['Feuille1'][4], - ['2008-11-14T10:20:30']) # supported by DateTime - self.assertEquals(mapping['Feuille1'][5], - ['PT12H34M56S']) # maybe not good, this is raw format - - def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestOOoImport)) diff --git a/product/ERP5OOo/tests/test_document/import_data_accentuated_text.ods b/product/ERP5OOo/tests/test_document/import_data_accentuated_text.ods new file mode 100644 index 0000000000000000000000000000000000000000..91107516928669446068d288ee5efd9441a78bee Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_accentuated_text.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_data_big_file_1.ods b/product/ERP5OOo/tests/test_document/import_data_big_file_1.ods new file mode 100644 index 0000000000000000000000000000000000000000..5cd26944deb64012be0dd091f5e69d0781a8efff Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_big_file_1.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_data_big_file_2.ods b/product/ERP5OOo/tests/test_document/import_data_big_file_2.ods new file mode 100644 index 0000000000000000000000000000000000000000..76adda7b225716bd30d26c3e27287779b0934d18 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_big_file_2.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_data_list.xls b/product/ERP5OOo/tests/test_document/import_data_list.xls new file mode 100644 index 0000000000000000000000000000000000000000..3ee21070177b226a0aec646b4ff674140350c331 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_list.xls differ diff --git a/product/ERP5OOo/tests/test_document/import_data_list_blank_line.ods b/product/ERP5OOo/tests/test_document/import_data_list_blank_line.ods new file mode 100644 index 0000000000000000000000000000000000000000..4e21063bdcc86b4809c3742321b674c85c6062d0 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_list_blank_line.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_data_with_categories.ods b/product/ERP5OOo/tests/test_document/import_data_with_categories.ods new file mode 100644 index 0000000000000000000000000000000000000000..1b3c552def2d7834400eb9f5b3f3b5da22d43567 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_with_categories.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_data_with_dates.ods b/product/ERP5OOo/tests/test_document/import_data_with_dates.ods new file mode 100644 index 0000000000000000000000000000000000000000..b91fb48d0acc4110027fd5006a26d0be19192b28 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_data_with_dates.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_float_and_percentage.ods b/product/ERP5OOo/tests/test_document/import_float_and_percentage.ods new file mode 100644 index 0000000000000000000000000000000000000000..8da7800b4569f9625e0d25234f2ef19d65894bf3 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_float_and_percentage.ods differ diff --git a/product/ERP5OOo/tests/test_document/import_organisation_list.ods b/product/ERP5OOo/tests/test_document/import_organisation_list.ods new file mode 100644 index 0000000000000000000000000000000000000000..575b35d97c127a0eb82ec367e79cb7b88ca71709 Binary files /dev/null and b/product/ERP5OOo/tests/test_document/import_organisation_list.ods differ