Commit 88b120e7 authored by Kevin Deldycke's avatar Kevin Deldycke

First version of Bug module unit test

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@12670 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 616f86db
############################################################################## ##############################################################################
# #
# Copyright (c) 2005 Nexedi SARL and Contributors. All Rights Reserved. # Copyright (c) 2007 Nexedi SA and Contributors. All Rights Reserved.
# Kevin Deldycke <kevin_AT_nexedi_DOT_com> # Kevin Deldycke <kevin_AT_nexedi_DOT_com>
# #
# WARNING: This program as such is intended to be used by professional # WARNING: This program as such is intended to be used by professional
...@@ -47,9 +47,9 @@ os.environ['EVENT_LOG_SEVERITY'] = '-300' ...@@ -47,9 +47,9 @@ os.environ['EVENT_LOG_SEVERITY'] = '-300'
class TestHR(ERP5TypeTestCase): class TestBug(ERP5TypeTestCase):
""" """
ERP5 Human Ressources related tests. ERP5 unit tests for Bug module (part of erp5_forge business template).
""" """
# pseudo constants # pseudo constants
...@@ -65,14 +65,16 @@ class TestHR(ERP5TypeTestCase): ...@@ -65,14 +65,16 @@ class TestHR(ERP5TypeTestCase):
""" """
Return the title of the current test set. Return the title of the current test set.
""" """
return "ERP5 HR" return "Bug"
def getBusinessTemplateList(self): def getBusinessTemplateList(self):
""" """
Return the list of required business templates. Return the list of required business templates.
""" """
return ('erp5_base',) return ( 'erp5_base'
, 'erp5_forge'
)
def afterSetUp(self, quiet=QUIET, run=RUN_ALL_TEST): def afterSetUp(self, quiet=QUIET, run=RUN_ALL_TEST):
...@@ -80,12 +82,9 @@ class TestHR(ERP5TypeTestCase): ...@@ -80,12 +82,9 @@ class TestHR(ERP5TypeTestCase):
Initialize the ERP5 site. Initialize the ERP5 site.
""" """
self.login() self.login()
self.datetime = DateTime() self.datetime = DateTime() # Save today at initialisation to "freeze" the time
self.portal = self.getPortal() self.portal = self.getPortal()
self.portal_categories = self.getCategoryTool() self.workflow_tool = self.portal.getWorkflowTool()
self.portal_catalog = self.getCatalogTool()
self.createCategories()
################################## ##################################
...@@ -103,734 +102,139 @@ class TestHR(ERP5TypeTestCase): ...@@ -103,734 +102,139 @@ class TestHR(ERP5TypeTestCase):
newSecurityManager(None, user) newSecurityManager(None, user)
def createCategories(self):
"""
Create some categories for testing.
"""
self.category_list = [
# Grade categories
{'path' : 'grade/director'
,'title': 'Director'
}
, {'path' : 'grade/engineer'
,'title': 'Engineer'
}
# Function categories
, {'path' : 'function/hq'
,'title': 'Headquarters'
}
, {'path' : 'function/warehouse'
,'title': 'Warehouse'
}
, {'path' : 'function/research_center'
,'title': 'Research Center'
}
# Activity categories
, {'path' : 'activity/media'
,'title': 'Media'
}
, {'path' : 'activity/software'
,'title': 'Software'
}
, {'path' : 'activity/mechanics'
,'title': 'Mechanics'
}
, {'path' : 'activity/mechanics/aerospace'
,'title': 'Aerospace'
}
, {'path' : 'activity/mechanics/automotive'
,'title': 'Automotive'
}
# Group categories
, {'path' : 'group/nexedi'
,'title': 'Nexedi'
}
, {'path' : 'group/nexedi/storever'
,'title': 'Storever'
}
, {'path' : 'group/nexedi/rentalinux'
,'title': 'Rentalinux'
}
# Role categories
, {'path' : 'role/client'
,'title': 'Client'
}
, {'path' : 'role/supplier'
,'title': 'Supplier'
}
, {'path' : 'role/internal'
,'title': 'Internal'
}
# Site categories
, {'path' : 'site/production/madrid'
,'title': 'Madrid Production Site'
}
, {'path' : 'site/distibution/paris'
,'title': 'Paris Distribution Site'
}
, {'path' : 'site/distibution/tokyo'
,'title': 'Tokyo Distribution Site'
}
, {'path' : 'site/distibution/new_york'
,'title': 'New York Distribution Site'
}
# Skill categories
, {'path' : 'skill/design/graphic'
,'title': 'Graphic'
}
, {'path' : 'skill/design/sound'
,'title': 'Sound'
}
, {'path' : 'skill/it/consulting'
,'title': 'Consulting'
}
, {'path' : 'skill/it/programming'
,'title': 'Programming'
}
# Region categories
, {'path' : 'region/europe/france'
,'title': 'France'
}
, {'path' : 'region/europe/germany'
,'title': 'Germany'
}
, {'path' : 'region/america/canada'
,'title': 'Canada'
}
, {'path' : 'region/america/brazil'
,'title': 'Brazil'
}
# Salary Level categories
, {'path' : 'salary_level/france/1/A'
,'title': '1.A'
}
, {'path' : 'salary_level/france/1/B'
,'title': '1.B'
}
, {'path' : 'salary_level/france/1/C'
,'title': '1.C'
}
, {'path' : 'salary_level/france/2'
,'title': '2'
}
]
# Create categories ##################################
# Note : this code was taken from the CategoryTool_importCategoryFile python ## Basic steps
# script (packaged in erp5_core). ##################################
for category in self.category_list:
keys = category.keys()
if 'path' in keys:
base_path_obj = self.portal_categories
is_base_category = True
for category_id in category['path'].split('/'):
# The current category is not existing
if category_id not in base_path_obj.contentIds():
# Create the category
if is_base_category:
category_type = 'Base Category'
else:
category_type = 'Category'
base_path_obj.newContent( portal_type = category_type
, id = category_id
, immediate_reindex = 1
)
base_path_obj = base_path_obj[category_id]
is_base_category = False
new_category = base_path_obj
# Set the category properties def stepTic(self, **kw):
for key in keys: """
if key != 'path': Flush activity queue.
method_id = "set" + convertToUpperCase(key) """
value = category[key] self.tic()
if value not in ('', None):
if hasattr(new_category, method_id):
method = getattr(new_category, method_id)
method(value.encode('UTF-8'))
def getCategoryList(self, base_category=None): def stepCreateBug(self, sequence=None, sequence_list=None, **kw):
""" """
Get a list of categories with same base categories. Create a dummy bug
""" """
categories = [] portal_type = 'Bug'
if base_category != None: bug_module = self.portal.getDefaultModule(portal_type)
for category in self.category_list: bug = bug_module.newContent( portal_type = portal_type
if category["path"].split('/')[0] == base_category: , immediate_reindex = 1
categories.append(category) , title = 'This is an important bug'
return categories , description = 'This %µ&~#^@! bug always happend on ERP5 start. The solution consist to kill the developper.'
, start_date = self.datetime # Today
, stop_date = self.datetime # Today XXXXXXXXXXXXXXXXXXXXXX
)
sequence.edit(bug = bug)
def stepOpenBug(self, sequence=None, sequence_list=None, **kw):
"""
Open the bug.
"""
bug = sequence.get('bug')
self.workflow_tool.doActionFor(bug, 'open_action')
self.assertEquals(bug.getValidationState(), 'open')
##################################
## Basic steps
##################################
def stepCreateOrganisation(self, sequence=None, sequence_list=None, **kw): def stepCloseBug(self, sequence=None, sequence_list=None, **kw):
""" """
Create an organisation. Close the bug.
""" """
portal_type = 'Organisation' bug = sequence.get('bug')
organisation_module = self.portal.getDefaultModule(portal_type) self.workflow_tool.doActionFor(bug, 'close_action')
organisation = organisation_module.newContent(portal_type=portal_type, self.assertEquals(bug.getValidationState(), 'close')
immediate_reindex=1,
title='A new organisation')
sequence.edit(organisation = organisation)
def stepSetOrganisationCategories(self, sequence=None,
sequence_list=None, **kw):
"""
Set & Check default organisation categories
(function, activity, site, group...).
"""
organisation = sequence.get('organisation')
# Set & Check function
function_categories = self.getCategoryList(base_category='function')
function_path = function_categories[0]['path']
function_title = function_categories[0]['title']
function_object = self.portal_categories.resolveCategory(function_path)
organisation.setFunction(function_path)
self.assertEquals(organisation.getFunction() , function_path)
self.assertEquals(organisation.getFunctionTitle(), function_title)
self.assertEquals(organisation.getFunctionValue(), function_object)
# Set & Check activity
activity_categories = self.getCategoryList(base_category='activity')
activity_path = activity_categories[0]['path']
activity_title = activity_categories[0]['title']
activity_object = self.portal_categories.resolveCategory(activity_path)
organisation.setActivity(activity_path)
self.assertEquals(organisation.getActivity() , activity_path)
self.assertEquals(organisation.getActivityTitle(), activity_title)
self.assertEquals(organisation.getActivityValue(), activity_object)
# Set & Check group
group_categories = self.getCategoryList(base_category='group')
group_path = group_categories[0]['path']
group_title = group_categories[0]['title']
group_object = self.portal_categories.resolveCategory(group_path)
organisation.setGroup(group_path)
self.assertEquals(organisation.getGroup() , group_path)
self.assertEquals(organisation.getGroupTitle(), group_title)
self.assertEquals(organisation.getGroupValue(), group_object)
# Set & Check role
role_categories = self.getCategoryList(base_category='role')
role_path = role_categories[0]['path']
role_title = role_categories[0]['title']
role_object = self.portal_categories.resolveCategory(role_path)
organisation.setRole(role_path)
self.assertEquals(organisation.getRole() , role_path)
self.assertEquals(organisation.getRoleTitle(), role_title)
self.assertEquals(organisation.getRoleValue(), role_object)
# Set & Check site
site_categories = self.getCategoryList(base_category='site')
site_path = site_categories[0]['path']
site_title = site_categories[0]['title']
site_object = self.portal_categories.resolveCategory(site_path)
organisation.setSite(site_path)
self.assertEquals(organisation.getSite() , site_path)
self.assertEquals(organisation.getSiteTitle(), site_title)
self.assertEquals(organisation.getSiteValue(), site_object)
# Set & Check skills
skill_categories = self.getCategoryList(base_category='skill')
skill_path_list = []
skill_title_list = []
skill_object_list = []
for skill in skill_categories[:2]:
skill_path = skill['path']
skill_title = skill['title']
skill_object = self.portal_categories.resolveCategory(skill_path)
skill_path_list.append(skill_path)
skill_title_list.append(skill_title)
skill_object_list.append(skill_object)
organisation.setSkillList(skill_path_list)
self.failIfDifferentSet(organisation.getSkillList() , skill_path_list)
self.failIfDifferentSet(organisation.getSkillTitleList(), skill_title_list)
self.failIfDifferentSet(organisation.getSkillValueList(), skill_object_list)
def stepResetOrganisationCategories(self, sequence=None,
sequence_list=None, **kw):
"""
Reset default organisation categories (function, activity, site, group...).
"""
organisation = sequence.get('organisation')
organisation.setFunction(None)
organisation.setActivity(None)
organisation.setGroup(None)
organisation.setRole(None)
organisation.setSite(None)
organisation.setSkillList(None)
self.assertEquals(organisation.getFunction() , None)
self.assertEquals(organisation.getActivity() , None)
self.assertEquals(organisation.getGroup() , None)
self.assertEquals(organisation.getRole() , None)
self.assertEquals(organisation.getSite() , None)
self.failIfDifferentSet(organisation.getSkillList(), [])
self.assertEquals(organisation.getFunctionTitle() , None)
self.assertEquals(organisation.getActivityTitle() , None)
self.assertEquals(organisation.getGroupTitle() , None)
self.assertEquals(organisation.getRoleTitle() , None)
self.assertEquals(organisation.getSiteTitle() , None)
self.failIfDifferentSet(organisation.getSkillTitleList(), [])
self.assertEquals(organisation.getFunctionValue() , None)
self.assertEquals(organisation.getActivityValue() , None)
self.assertEquals(organisation.getGroupValue() , None)
self.assertEquals(organisation.getRoleValue() , None)
self.assertEquals(organisation.getSiteValue() , None)
self.failIfDifferentSet(organisation.getSkillValueList(), [])
def stepSetOrganisationAddress(self, sequence=None, sequence_list=None, **kw):
"""
Set organisation address and test acquired properties and categories
from the Address sub-object.
"""
organisation = sequence.get('organisation')
region = self.getCategoryList(base_category='region')[0]
region_path = region["path"]
region_title = region["title"]
region_object = self.portal_categories.resolveCategory(region_path)
organisation.setDefaultAddressCity('Lille')
organisation.setDefaultAddressRegion(region_path)
organisation.setDefaultAddressZipCode('59000')
organisation.setDefaultAddressStreetAddress('42, rue des gnous')
organisation.setDefaultTelephoneText('+55(0)66-5555') # Phone follows default conventions
organisation.setDefaultFaxText('+55(0)69-1337')
organisation.setDefaultEmailText('kevin@truc-bidule.com')
self.failUnless('default_address' in organisation.contentIds())
default_address = organisation.default_address
self.assertEquals(default_address.getPortalType(), 'Address')
self.assertEquals(organisation.getDefaultAddressValue(), default_address)
self.assertEquals( organisation.getDefaultAddressCity()
, default_address.getCity()
)
self.assertEquals( organisation.getDefaultAddressRegion()
, default_address.getRegion()
)
# self.assertEquals( organisation.getDefaultAddressRegionTitle() # XXX Why ?
# , default_address.getRegionTitle()
# )
# self.assertEquals( organisation.getDefaultAddressRegionValue()
# , region_object
# )
# self.assertEquals( default_address.getRegionValue()
# , region_object
# )
self.assertEquals( organisation.getDefaultAddressZipCode()
, default_address.getZipCode()
)
self.assertEquals( organisation.getDefaultAddressStreetAddress()
, default_address.getStreetAddress()
)
# Organisation's region is acquired from the Address object
self.assertEquals( organisation.getRegion()
, default_address.getRegion()
)
self.failUnless('default_telephone' in organisation.contentIds()) def stepCancelBug(self, sequence=None, sequence_list=None, **kw):
default_telephone = organisation.default_telephone """
self.assertEquals(default_telephone.getPortalType(), 'Telephone') Cancel the bug.
self.assertEquals( organisation.getDefaultTelephoneText() """
, default_telephone.asText() bug = sequence.get('bug')
) self.workflow_tool.doActionFor(bug, 'cancel_action')
self.assertEquals(bug.getValidationState(), 'cancel')
self.failUnless('default_fax' in organisation.contentIds())
default_fax = organisation.default_fax
self.assertEquals(default_fax.getPortalType(), 'Fax')
self.assertEquals( organisation.getDefaultFaxText()
, default_fax.asText()
)
self.failUnless('default_email' in organisation.contentIds()) def stepFollowBug(self, sequence=None, sequence_list=None, **kw):
default_email = organisation.default_email """
self.assertEquals(default_email.getPortalType(), 'Email') The bug reporter don't know how to nicely report a bug. Tell him.
self.assertEquals( organisation.getDefaultEmailText() """
, default_email.asText() bug = sequence.get('bug')
) self.workflow_tool.doActionFor(bug, 'follow_action', comment="Your Bug report is bad. You don't know how to report a bug. Please read http://www.chiark.greenend.org.uk/~sgtatham/bugs.html and resubmit your bug.")
self.assertEquals(bug.getValidationState(), 'follow')
def stepCreatePerson(self, sequence=None, sequence_list=None, **kw): def stepSetTestedBug(self, sequence=None, sequence_list=None, **kw):
""" """
Create a person. Set the bug as unit tested.
""" """
portal_type = 'Person' bug = sequence.get('bug')
person_module = self.portal.getDefaultModule(portal_type) bug.setTested(True)
person = person_module.newContent( portal_type = portal_type self.assertEquals(bug.getTested(), True)
, immediate_reindex = 1
)
sequence.edit(person = person)
def stepSetPersonCareer(self, sequence=None, sequence_list=None, **kw):
"""
Set & Check default person properties acquired through default career.
"""
person = sequence.get('person')
organisation = sequence.get('organisation')
# Set subordination
person.setCareerSubordinationValue(organisation)
self.assertEquals(person.getCareerSubordinationValue(), organisation)
# Set & Check simple properties with 'Career' prefix
person.setCareerTitle('A brand new career step')
person.setCareerDescription(
'This career step correspond to my arrival at Nexedi as employee')
self.assertEquals(person.getCareerTitle() , 'A brand new career step')
self.assertEquals(person.getCareerDescription(),
'This career step correspond to my arrival at Nexedi as employee')
dummy_date1 = self.datetime + 10
dummy_date2 = self.datetime + 20
person.setCareerStopDate(dummy_date2)
person.setCareerStartDate(dummy_date1)
person.setCareerSalaryCoefficient(1)
person.setCareerCollectiveAgreementTitle('SYNTEC convention')
self.assertEquals(person.getCareerStopDate() , dummy_date2)
self.assertEquals(person.getCareerStartDate() , dummy_date1)
self.assertEquals(person.getCareerSalaryCoefficient() , 1)
self.assertEquals(person.getCareerCollectiveAgreementTitle(), 'SYNTEC convention')
# Set & Check function
function_categories = self.getCategoryList(base_category='function')
function_path = function_categories[1]['path']
function_title = function_categories[1]['title']
function_object = self.portal_categories.resolveCategory(function_path)
person.setCareerFunction(function_path)
self.assertEquals(person.getCareerFunction() , function_path)
self.assertEquals(person.getCareerFunctionTitle(), function_title)
self.assertEquals(person.getCareerFunctionValue(), function_object)
# function must be acquired on person
person.reindexObject(); get_transaction().commit(); self.tic()
self.failUnless(person in function_object.getFunctionRelatedValueList())
# Set & Check role
role_categories = self.getCategoryList(base_category='role')
role_path = role_categories[1]['path']
role_title = role_categories[1]['title']
role_object = self.portal_categories.resolveCategory(role_path)
person.setCareerRole(role_path)
self.assertEquals(person.getCareerRole() , role_path)
self.assertEquals(person.getCareerRoleTitle(), role_title)
self.assertEquals(person.getCareerRoleValue(), role_object)
# role must be acquired on person
person.reindexObject(); get_transaction().commit(); self.tic()
self.failUnless(person in role_object.getRoleRelatedValueList())
# Set & Check grade
grade_categories = self.getCategoryList(base_category='grade')
grade_path = grade_categories[1]['path']
grade_title = grade_categories[1]['title']
grade_object = self.portal_categories.resolveCategory(grade_path)
person.setCareerGrade(grade_path)
self.assertEquals(person.getCareerGrade() , grade_path)
self.assertEquals(person.getCareerGradeTitle(), grade_title)
self.assertEquals(person.getCareerGradeValue(), grade_object)
# grade must be acquired on person
person.reindexObject(); get_transaction().commit(); self.tic()
self.failUnless(person in grade_object.getGradeRelatedValueList())
# Set & Check salary level
salary_level_categories = self.getCategoryList(
base_category='salary_level')
salary_level_path = salary_level_categories[1]['path']
salary_level_title = salary_level_categories[1]['title']
salary_level_object = self.portal_categories.resolveCategory(
salary_level_path)
person.setCareerSalaryLevel(salary_level_path)
self.assertEquals(person.getCareerSalaryLevel() , salary_level_path)
self.assertEquals(person.getCareerSalaryLevelTitle(), salary_level_title)
self.assertEquals(person.getCareerSalaryLevelValue(), salary_level_object)
# salary_level must be acquired on person
person.reindexObject(); get_transaction().commit(); self.tic()
self.failUnless(person in
salary_level_object.getSalaryLevelRelatedValueList())
# Set & Check skills
skill_categories = self.getCategoryList(base_category='skill')
skill_path_list = []
skill_title_list = []
skill_object_list = []
for skill in skill_categories[1:3]:
skill_path = skill['path']
skill_title = skill['title']
skill_object = self.portal_categories.resolveCategory(skill_path)
skill_path_list.append(skill_path)
skill_title_list.append(skill_title)
skill_object_list.append(skill_object)
person.setCareerSkillList(skill_path_list)
self.failIfDifferentSet(person.getCareerSkillList() , skill_path_list)
self.failIfDifferentSet(person.getCareerSkillTitleList(), skill_title_list)
self.failIfDifferentSet(person.getCareerSkillValueList(), skill_object_list)
# skill must be acquired on person
person.reindexObject(); get_transaction().commit(); self.tic()
for skill_object in skill_object_list:
self.failUnless(person in skill_object.getSkillRelatedValueList())
def stepCheckPersonCareer(self, sequence=None, sequence_list=None, **kw):
"""
Check the consistency of default_career properties with person
getters (= check the acquisition).
"""
person = sequence.get('person')
# Check default career sub-object
self.failUnless('default_career' in person.contentIds())
default_career = person.default_career
self.assertEquals(default_career.getPortalType(), 'Career')
# Test getter with 'Career' prefix
self.assertEquals(person.getCareer() , default_career.getRelativeUrl())
self.assertEquals(person.getCareerTitle() , default_career.getTitle())
self.assertEquals(person.getCareerValue() , default_career)
self.assertEquals(person.getCareerDescription(), default_career.getDescription())
self.assertEquals(person.getCareerFunction() , default_career.getFunction())
self.assertEquals(person.getCareerFunctionTitle(), default_career.getFunctionTitle())
self.assertEquals(person.getCareerFunctionValue(), default_career.getFunctionValue())
# Test getter with no prefix (aka 'transparent' getters) on simple properties
# then on category properties
self.assertEquals(person.getCareerStopDate() , default_career.getStopDate())
self.assertEquals(person.getCareerStartDate() , default_career.getStartDate())
self.assertEquals(person.getCareerSalaryCoefficient() , default_career.getSalaryCoefficient())
self.assertEquals(person.getCareerCollectiveAgreementTitle(), default_career.getCollectiveAgreementTitle())
self.assertEquals(person.getCareerRole() , default_career.getRole())
self.assertEquals(person.getCareerRoleTitle(), default_career.getRoleTitle())
self.assertEquals(person.getCareerRoleValue(), default_career.getRoleValue())
self.assertEquals(person.getCareerGrade() , default_career.getGrade())
self.assertEquals(person.getCareerGradeTitle(), default_career.getGradeTitle())
self.assertEquals(person.getCareerGradeValue(), default_career.getGradeValue())
self.assertEquals(person.getCareerSalaryLevel() , default_career.getSalaryLevel())
self.assertEquals(person.getCareerSalaryLevelTitle(), default_career.getSalaryLevelTitle())
self.assertEquals(person.getCareerSalaryLevelValue(), default_career.getSalaryLevelValue())
self.failIfDifferentSet(person.getCareerSkillList() , default_career.getSkillList())
self.failIfDifferentSet(person.getCareerSkillTitleList(), default_career.getSkillTitleList())
self.failIfDifferentSet(person.getCareerSkillValueList(), default_career.getSkillValueList())
self.assertEquals(person.getCareerSubordination(), default_career.getSubordination())
# Person's subordination is acquired from default career
self.assertEquals(person.getSubordination(), default_career.getSubordination())
def stepAddCareerStepInAnotherOrganisation(self, sequence=None, **kw) :
"""Adds another career step on the person."""
person = sequence.get('person')
other_organisation = self.getOrganisationModule().newContent(
portal_type = 'Organisation',
title = 'Another Organistion')
new_career_title = 'new career title'
# Create a new career step.
person.Career_shiftDefault()
self.assertEquals( 2,
len(person.contentValues(filter={'portal_type':'Career'})))
person.setCareerSubordination(other_organisation.getRelativeUrl())
person.setCareerTitle(new_career_title)
# Get the new and the old career, as Career_shiftDefault changes
# objects id, this may be the only safe way ...
old_career_step = None
new_career_step = None
for career in person.contentValues(filter={'portal_type':'Career'}):
if career.getTitle() == new_career_title :
new_career_step = career
else :
old_career_step = career
self.assertNotEquals(new_career_step, None)
self.assertNotEquals(old_career_step, None)
sequence.edit( old_career_step = old_career_step,
new_career_step = new_career_step,
new_organisation = other_organisation,
old_organisation = sequence.get('organisation') )
def stepCheckCareerSubordination (self, sequence=None, **kw) :
"""checks that setting subordination on a career does not conflict
with acquisition."""
person = sequence.get('person')
old_career_step = sequence.get('old_career_step')
new_career_step = sequence.get('new_career_step')
new_organisation = sequence.get('new_organisation')
old_organisation = sequence.get('old_organisation')
new_organisation_title = new_organisation.getTitle()
old_organisation_title = old_organisation.getTitle()
self.assert_( "subordination/%s" % old_organisation.getRelativeUrl() in
old_career_step.getCategoryList(),
'%s not in %s' % (old_organisation.getRelativeUrl(),
old_career_step.getCategoryList()))
self.assertEquals( old_career_step.getSubordination(),
old_organisation.getRelativeUrl() )
self.assertEquals( old_career_step.getSubordinationTitle(),
old_organisation_title )
self.assert_( "subordination/%s" % new_organisation.getRelativeUrl() in
new_career_step.getCategoryList(),
'%s not in %s' % (new_organisation.getRelativeUrl(),
new_career_step.getCategoryList()))
self.assertEquals( new_career_step.getSubordination(),
new_organisation.getRelativeUrl() )
self.assertEquals( new_career_step.getSubordinationTitle(),
new_organisation_title )
def stepCheckChangePersonAddress(self, sequence=None, **kw) :
"""
We must make sure that if we change the address of a person,
then it will not change the address of the organisation.
"""
person = sequence.get('person')
organisation = sequence.get('organisation')
self.assertEquals(organisation.getDefaultAddressCity(),'Lille')
self.assertEquals(organisation.getDefaultAddressZipCode(), '59000')
self.assertEquals(person.getDefaultAddressCity(),'Lille')
self.assertEquals(person.getDefaultAddressZipCode(), '59000')
# here, the parameters we pass to edit are the same as the one acquired
# from the organisation, edit shouldn't do anything
person.edit(
default_address_city='Lille',
default_address_zip_code='59000')
self.assertEquals(person.getDefaultAddress(),
organisation.getDefaultAddress())
self.assertEquals(person.getDefaultAddressCity(),'Lille')
self.assertEquals(person.getDefaultAddressZipCode(), '59000')
# here, the first parameter we pass will trigger the creation of a
# subobject on person, and we need to make sure that the second one gets
# copied (when calling edit from the interface, all displayed fields are
# passed to edit)
person.edit(
default_address_city='La Garnache',
default_address_zip_code='59000')
self.assertNotEquals(person.getDefaultAddress(),
organisation.getDefaultAddress())
self.assertEquals(person.getDefaultAddressCity(),'La Garnache')
self.assertEquals(person.getDefaultAddressZipCode(), '59000')
self.assertEquals(organisation.getDefaultAddressCity(),'Lille')
self.assertEquals(organisation.getDefaultAddressZipCode(), '59000')
##################################
## Tests
##################################
def test_01_Organisation(self, quiet=QUIET, run=RUN_ALL_TEST): def stepSetOldClosedDate(self, sequence=None, sequence_list=None, **kw):
""" """
Test basic behaviour of Organisation. Change Closed Date to a funky old value.
""" """
if not run: return bug = sequence.get('bug')
sequence_list = SequenceList() bug.setStopDate(self.datetime - 10)
step_list = [ 'stepCreateOrganisation' self.assertEquals(bug.getStopDate(), self.datetime - 10) # Check that datetime is fixed
, 'stepSetOrganisationCategories'
, 'stepResetOrganisationCategories'
, 'stepSetOrganisationAddress'
]
sequence_string = ' '.join(step_list)
sequence_list.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet)
def test_02_Person(self, quiet=QUIET, run=RUN_ALL_TEST): def stepCheckClosedDate(self, sequence=None, sequence_list=None, **kw):
""" """
Test basic behaviour of Person. Check that the closed date is set as today.
""" """
if not run: return bug = sequence.get('bug')
sequence_list = SequenceList() self.assertEquals(bug.getStopDate(), self.datetime)
step_list = [ 'stepCreatePerson'
, 'stepCreateOrganisation'
, 'stepSetPersonCareer'
, 'stepCheckPersonCareer'
]
sequence_string = ' '.join(step_list)
sequence_list.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet)
def test_03_Subordination(self, quiet=QUIET, run=RUN_ALL_TEST):
##################################
## Tests
##################################
def test_01_StopDateUpdatedOnClose(self, quiet=QUIET, run=RUN_ALL_TEST):
""" """
Tests that career steps subordination properties behave correctly Test that a closed bug has its stop date property updated.
""" """
if not run: return if not run: return
sequence_list = SequenceList() sequence_list = SequenceList()
step_list = [ 'stepCreatePerson' step_list = [ 'stepCreateBug'
, 'stepCreateOrganisation' , 'stepOpenBug'
, 'stepSetPersonCareer' , 'stepTic'
, 'stepAddCareerStepInAnotherOrganisation' , 'stepSetOldClosedDate'
, 'stepCheckCareerSubordination' , 'stepCloseBug'
, 'stepTic'
, 'stepCheckClosedDate'
] ]
sequence_string = ' '.join(step_list) sequence_string = ' '.join(step_list)
sequence_list.addSequenceString(sequence_string) sequence_list.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet) sequence_list.play(self, quiet=quiet)
def test_04_SubordinationAndAddress(self, quiet=QUIET, run=RUN_ALL_TEST):
def test_02_StopDateUpdatedOnCancel(self, quiet=QUIET, run=RUN_ALL_TEST):
""" """
Tests that career steps subordination properties behave correctly Same test as above but on cancel action (test bug #600).
""" """
if not run: return if not run: return
sequence_list = SequenceList() sequence_list = SequenceList()
step_list = [ 'stepCreatePerson' step_list = [ 'stepCreateBug'
, 'stepCreateOrganisation' , 'stepOpenBug'
, 'stepSetOrganisationAddress' , 'stepTic'
, 'stepSetPersonCareer' , 'stepSetOldClosedDate'
, 'stepCheckChangePersonAddress' , 'stepCancelBug'
, 'stepTic'
, 'stepCheckClosedDate'
] ]
sequence_string = ' '.join(step_list) sequence_string = ' '.join(step_list)
sequence_list.addSequenceString(sequence_string) sequence_list.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet) sequence_list.play(self, quiet=quiet)
def test_05_DatesOnPerson(self, quiet=QUIET, run=RUN_ALL_TEST):
"""Tests dates on Person objects.
"""
pers = self.getPersonModule().newContent(portal_type='Person')
birthday = DateTime(1999, 01, 01)
now = DateTime()
pers.edit(birthday = birthday)
self.assertEquals(birthday, pers.getBirthday())
self.assertEquals(birthday, pers.getStartDate())
for slot in ['year', 'month', 'day', 'hour', 'minute']:
self.assertEquals(getattr(now, slot)(),
getattr(pers.getCreationDate(), slot)(),
'Wrong creation date %s' % pers.getCreationDate())
def test_06_DatesOnOrganisation(self, quiet=QUIET, run=RUN_ALL_TEST):
"""Tests dates on Organisation objects.
"""
org = self.getOrganisationModule().newContent(portal_type='Organisation')
start_date = DateTime(1999, 01, 01)
now = DateTime()
org.edit(start_date = start_date)
self.assertEquals(start_date, org.getStartDate())
for slot in ['year', 'month', 'day', 'hour', 'minute']:
self.assertEquals(getattr(now, slot)(),
getattr(org.getCreationDate(), slot)(),
'Wrong creation date %s' % org.getCreationDate())
if __name__ == '__main__': if __name__ == '__main__':
framework() framework()
...@@ -838,5 +242,5 @@ else: ...@@ -838,5 +242,5 @@ else:
import unittest import unittest
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestHR)) suite.addTest(unittest.makeSuite(TestBug))
return suite return suite
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment