diff --git a/product/ERP5/tests/testAlarm.py b/product/ERP5/tests/testAlarm.py new file mode 100755 index 0000000000000000000000000000000000000000..e3c715367a761feb76d3e64f4762a6ae9d19f772 --- /dev/null +++ b/product/ERP5/tests/testAlarm.py @@ -0,0 +1,367 @@ +############################################################################## +# +# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. +# Sebastien Robin <seb@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + + + +# +# Skeleton ZopeTestCase +# + +from random import randint + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +# Needed in order to have a log file inside the current folder +os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') +os.environ['EVENT_LOG_SEVERITY'] = '-300' + +from Testing import ZopeTestCase +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager +from DateTime import DateTime +from Acquisition import aq_base, aq_inner +from zLOG import LOG +from Products.ERP5Type.DateUtils import addToDate +import time +import os +from Products.ERP5Type import product_path +from DateTime import DateTime + +class TestAlarm(ERP5TypeTestCase): + """ + This is the list of test + + test setNextStartDate : + - every hour + - at 6, 10, 15, 21 every day + - every day at 10 + - every 3 days at 14 and 15 and 17 + - every monday and friday, at 6 and 15 + - every 1st and 15th every month, at 12 and 14 + - every 1st day of every 2 month, at 6 + """ + + # Different variables used for this test + run_all_test = 1 + source_company_id = 'Nexedi' + destination_company_id = 'Coramy' + component_id = 'brick' + sales_order_id = '1' + quantity = 10 + base_price = 0.7832 + + def getBusinessTemplateList(self): + """ + Return the list of business templates. + + """ + business_template_dir = os.path.join( product_path, 'tests' ) + erp5_alarm_path = os.path.join( business_template_dir, 'erp5_alarm.bt5' ) + LOG('getBusinessTemplateList, erp5_alarm_path',0,erp5_alarm_path) + return (('erp5_alarm',erp5_alarm_path),) + + + def test_01_HasEverything(self, quiet=0, run=run_all_test): + # Test if portal_synchronizations was created + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Has Everything ') + LOG('Testing... ',0,'testHasEverything') + self.failUnless(self.getCategoryTool()!=None) + self.failUnless(self.getSimulationTool()!=None) + self.failUnless(self.getTypeTool()!=None) + self.failUnless(self.getSqlConnection()!=None) + self.failUnless(self.getCatalogTool()!=None) + + #def populate(self, quiet=1, run=1): + def afterSetUp(self, quiet=1, run=1): + self.login() + portal = self.getPortal() + catalog_tool = self.getCatalogTool() + # XXX This does not works + #catalog_tool.reindexObject(portal) + + # First reindex + #LOG('afterSetup',0,'portal.portal_categories.immediateReindexObject') + #portal.portal_categories.immediateReindexObject() + #LOG('afterSetup',0,'portal.portal_simulation.immediateReindexObject') + #portal.portal_simulation.immediateReindexObject() + + def newAlarm(self): + """ + Create an empty alarm + """ + a_tool = self.getAlarmTool() + return a_tool.newContent() + + def login(self, quiet=0, run=run_all_test): + uf = self.getPortal().acl_users + uf._doAddUser('seb', '', ['Manager'], []) + user = uf.getUserById('seb').__of__(uf) + newSecurityManager(None, user) + + def test_02_Initialization(self, quiet=0, run=run_all_test): + """ + Test some basic things right after the creation + """ + if not run: return + if not quiet: + message = 'Test Initialization' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + alarm = self.newAlarm() + now = DateTime() + date = addToDate(now,day=1) + alarm.setPeriodicityStartDate(date) + self.assertEquals(alarm.getAlarmDate(),date) + alarm.setNextAlarmDate(current_date=now) # This should not do change the alarm date + self.assertEquals(alarm.getAlarmDate(),date) + + def test_03_EveryHour(self, quiet=0, run=run_all_test): + if not run: return + if not quiet: + message = 'Test Every Hour' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + alarm = self.newAlarm() + now = DateTime() + date = addToDate(now,day=2) + alarm.setPeriodicityStartDate(date) + alarm.setPeriodicityHourFrequency(1) + alarm.setNextAlarmDate(current_date=now) + self.assertEquals(alarm.getAlarmDate(),date) + LOG(message + ' now :',0,now) + now = addToDate(now,day=2) + LOG(message + ' now :',0,now) + alarm.setNextAlarmDate(current_date=now) + next_date = addToDate(date,hour=1) + self.assertEquals(alarm.getAlarmDate(),next_date) + now = addToDate(now,hour=1,minute=5) + alarm.setNextAlarmDate(current_date=now) + next_date = addToDate(next_date,hour=1) + self.assertEquals(alarm.getAlarmDate(),next_date) + + def test_04_Every3Hours(self, quiet=0, run=run_all_test): + if not run: return + if not quiet: + message = 'Test Every 3 Hours' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + alarm = self.newAlarm() + now = DateTime() + hour_to_remove = now.hour() % 3 + now = addToDate(now,hour=-hour_to_remove) + date = addToDate(now,day=2) + alarm.setPeriodicityStartDate(date) + alarm.setPeriodicityHourFrequency(3) + alarm.setNextAlarmDate(current_date=now) + self.assertEquals(alarm.getAlarmDate(),date) + LOG(message + ' now :',0,now) + now = addToDate(now,day=2) + LOG(message + ' now :',0,now) + alarm.setNextAlarmDate(current_date=now) + next_date = addToDate(date,hour=3) + self.assertEquals(alarm.getAlarmDate(),next_date) + now = addToDate(now,hour=3,minute=7,second=4) + alarm.setNextAlarmDate(current_date=now) + next_date = addToDate(next_date,hour=3) + self.assertEquals(alarm.getAlarmDate(),next_date) + + def test_05_SomeHours(self, quiet=0, run=run_all_test): + if not run: return + if not quiet: + message = 'Test Some Hours' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,15,00,00)) + now = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,15,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,21,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,7,06,00,00)) + right_fourth_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,7,10,00,00)) + alarm = self.newAlarm() + hour_list = (6,10,15,21) + alarm.setPeriodicityStartDate(now) + alarm.setPeriodicityHourList(hour_list) + self.assertEquals(alarm.getAlarmDate(),right_first_date) + alarm.setNextAlarmDate(current_date=right_first_date) + self.assertEquals(alarm.getAlarmDate(),right_second_date) + alarm.setNextAlarmDate(current_date=right_second_date) + self.assertEquals(alarm.getAlarmDate(),right_third_date) + alarm.setNextAlarmDate(current_date=right_third_date) + self.assertEquals(alarm.getAlarmDate(),right_fourth_date) + + def test_06_EveryDayOnce(self, quiet=0, run=run_all_test): + if not run: return + if not quiet: + message = 'Every Day Once' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + now = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,10,00,00)) + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,10,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,7,10,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,8,10,00,00)) + alarm = self.newAlarm() + alarm.setPeriodicityStartDate(now) + alarm.setPeriodicityDayFrequency(1) + alarm.setPeriodicityHourList((10,)) + self.assertEquals(alarm.getAlarmDate(),right_first_date) + alarm.setNextAlarmDate(current_date=right_first_date) + self.assertEquals(alarm.getAlarmDate(),right_second_date) + alarm.setNextAlarmDate(current_date=right_second_date) + self.assertEquals(alarm.getAlarmDate(),right_third_date) + + def test_07_Every3DaysSomeHours(self, quiet=0, run=run_all_test): + """- every 3 days at 14 and 15 and 17""" + if not run: return + if not quiet: + message = 'Every 3 Days Some Hours' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,14,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,15,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,6,17,00,00)) + right_fourth_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,9,14,00,00)) + alarm = self.newAlarm() + alarm.setPeriodicityStartDate(right_first_date) + alarm.setPeriodicityDayFrequency(3) + alarm.setPeriodicityHourList((14,15,17)) + self.assertEquals(alarm.getAlarmDate(),right_first_date) + alarm.setNextAlarmDate(current_date=right_first_date) + self.assertEquals(alarm.getAlarmDate(),right_second_date) + alarm.setNextAlarmDate(current_date=right_second_date) + self.assertEquals(alarm.getAlarmDate(),right_third_date) + alarm.setNextAlarmDate(current_date=right_third_date) + self.assertEquals(alarm.getAlarmDate(),right_fourth_date) + + def test_08_SomeWeekDaysSomeHours(self, quiet=0, run=run_all_test): + """- every monday and friday, at 6 and 15""" + if not run: return + if not quiet: + message = 'Some Week Days Some Hours' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,9,27,6,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,9,27,15,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,1,6,00,00)) + right_fourth_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,1,15,00,00)) + alarm = self.newAlarm() + alarm.setPeriodicityStartDate(right_first_date) + alarm.setPeriodicityWeekDayList(('Monday','Friday')) + alarm.setPeriodicityHourList((6,15)) + self.checkDate(alarm, right_first_date, right_second_date, right_third_date, right_fourth_date) + #self.assertEquals(alarm.getAlarmDate(),right_first_date) + #alarm.setNextAlarmDate(current_date=right_first_date) + #self.assertEquals(alarm.getAlarmDate(),right_second_date) + #alarm.setNextAlarmDate(current_date=right_second_date) + #self.assertEquals(alarm.getAlarmDate(),right_third_date) + #alarm.setNextAlarmDate(current_date=right_third_date) + #self.assertEquals(alarm.getAlarmDate(),right_fourth_date) + + + def checkDate(self,alarm,*args): + """ + the basic test + """ + for date in args[:-1]: + LOG('checkDate, checking date...:',0,date) + self.assertEquals(alarm.getAlarmDate(),date) + alarm.setNextAlarmDate(current_date=date) + self.assertEquals(alarm.getAlarmDate(),args[-1]) + + def test_09_SomeMonthDaysSomeHours(self, quiet=0, run=run_all_test): + """- every 1st and 15th every month, at 12 and 14""" + if not run: return + if not quiet: + message = 'Some Month Days Some Hours' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,01,12,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,01,14,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,15,12,00,00)) + right_fourth_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,15,14,00,00)) + alarm = self.newAlarm() + alarm.setPeriodicityStartDate(right_first_date) + alarm.setPeriodicityMonthDayList((1,15)) + alarm.setPeriodicityHourList((12,14)) + self.checkDate(alarm, right_first_date, right_second_date, right_third_date, right_fourth_date) + + def test_10_OnceEvery2Month(self, quiet=0, run=run_all_test): + """- every 1st day of every 2 month, at 6""" + if not run: return + if not quiet: + message = 'Once Every 2 Month' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,01,6,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,12,01,6,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2005,2,01,6,00,00)) + alarm = self.newAlarm() + alarm.setPeriodicityStartDate(right_first_date) + alarm.setPeriodicityMonthDayList((1,)) + alarm.setPeriodicityMonthFrequency(2) + alarm.setPeriodicityHourList((6,)) + self.checkDate(alarm, right_first_date, right_second_date, right_third_date) + + def test_11_EveryDayOnceWeek41And42(self, quiet=0, run=run_all_test): + if not run: return + if not quiet: + message = 'Every Day Once Week 41 And 43' + ZopeTestCase._print('\n%s ' % message) + LOG('Testing... ',0,message) + # year/month/day hour:minute:second + right_first_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,10,6,00,00)) + right_second_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,18,6,00,00)) + right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,19,6,00,00)) + right_fourth_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,20,6,00,00)) + alarm = self.newAlarm() + alarm.setPeriodicityStartDate(right_first_date) + alarm.setPeriodicityHourList((6,)) + alarm.setPeriodicityWeekList((41,43)) + self.checkDate(alarm, right_first_date, right_second_date, right_third_date,right_fourth_date) + + + + + +if __name__ == '__main__': + framework() +else: + import unittest + def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestAlarm)) + return suite +