Commit 7c6f1a73 authored by Romain Courteaud's avatar Romain Courteaud

slapos_cloud: starts moving test to virtual master design

parent f4c1c3e3
...@@ -156,6 +156,28 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -156,6 +156,28 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
"""Overwrite this function on project context to tweak production focus tests""" """Overwrite this function on project context to tweak production focus tests"""
pass pass
def addProjectProductionManagerAssignment(self, person, project):
person.newContent(
portal_type='Assignment',
destination_project_value=project,
function='production/manager'
).open()
def addProjectCustomerAssignment(self, person, project):
person.newContent(
portal_type='Assignment',
destination_project_value=project,
function='customer'
).open()
def addProject(self):
project = self.portal.project_module.newContent(
portal_type='Project',
title='project-%s' % self.generateNewId()
)
project.validate()
return project
def makeCustomOrganisation(self, new_id=None, index=True, def makeCustomOrganisation(self, new_id=None, index=True,
price_currency="currency_module/EUR"): price_currency="currency_module/EUR"):
# Create a custom organisation same as slapos, for ensure we can have # Create a custom organisation same as slapos, for ensure we can have
...@@ -210,7 +232,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -210,7 +232,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
login.validate() login.validate()
return login return login
def makePerson(self, new_id=None, index=True, user=True): def makePerson(self, project, new_id=None, index=True, user=True):
if new_id is None: if new_id is None:
new_id = self.generateNewId() new_id = self.generateNewId()
...@@ -224,9 +246,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -224,9 +246,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
) )
person_user.validate() person_user.validate()
for assignment in person_user.contentValues(portal_type="Assignment"): self.addProjectCustomerAssignment(person_user, project)
assignment.open()
if user: if user:
login = self._addERP5Login(person_user) login = self._addERP5Login(person_user)
...@@ -239,7 +259,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -239,7 +259,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
return person_user return person_user
def _makeTree(self, requested_template_id='template_software_instance'): def _makeTree(self, project, requested_template_id='template_software_instance'):
new_id = self.generateNewId() new_id = self.generateNewId()
self.request_kw = dict( self.request_kw = dict(
...@@ -252,7 +272,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -252,7 +272,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
state="started" state="started"
) )
self.person_user = self.makePerson(new_id=new_id, index=False) self.person_user = self.makePerson(project, new_id=new_id, index=False)
self.commit() self.commit()
# prepare part of tree # prepare part of tree
self.instance_tree = self.portal.instance_tree_module\ self.instance_tree = self.portal.instance_tree_module\
...@@ -306,10 +326,10 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -306,10 +326,10 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
self.portal.portal_alarms.slapos_request_update_instance_tree_open_sale_order.activeSense() self.portal.portal_alarms.slapos_request_update_instance_tree_open_sale_order.activeSense()
self.tic() self.tic()
def _makeSlaveTree(self, requested_template_id='template_slave_instance'): def _makeSlaveTree(self, project, requested_template_id='template_slave_instance'):
return self._makeTree(requested_template_id=requested_template_id) return self._makeTree(project, requested_template_id=requested_template_id)
def _makeComputeNode(self, owner=None, allocation_scope='open/public'): def _makeComputeNode(self, owner=None, allocation_scope='open'):
self.compute_node = self.portal.compute_node_module.template_compute_node\ self.compute_node = self.portal.compute_node_module.template_compute_node\
.Base_createCloneDocument(batch_mode=1) .Base_createCloneDocument(batch_mode=1)
reference = 'TESTCOMP-%s' % self.generateNewId() reference = 'TESTCOMP-%s' % self.generateNewId()
...@@ -543,40 +563,84 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -543,40 +563,84 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
self.tic() self.tic()
self._cleaupREQUEST() self._cleaupREQUEST()
def _makeSoftwareProduct(self, new_id=None): def _makeSoftwareProduct(self, project, new_id=None, url=None, software_type='foobar'):
if new_id is None: if new_id is None:
new_id = self.generateNewId() new_id = self.generateNewId()
software_product = self.portal.software_product_module\ if url is None:
.template_software_product.Base_createCloneDocument(batch_mode=1) url = self.generateNewSoftwareReleaseUrl()
software_product.edit( software_product = self.portal.software_product_module.newContent(
reference='TESTSOFTPROD-%s' % new_id, reference='TESTSOFTPROD-%s' % new_id,
title='Test software product %s' % new_id title='Test software product %s' % new_id,
follow_up_value=project
)
software_product.newContent(
portal_type='Software Product Release Variation',
url_string=url
)
software_product.newContent(
portal_type='Software Product Type Variation',
reference=software_type
) )
software_product.publish() software_product.publish()
return software_product return software_product
def _makeSoftwareRelease(self, new_id=None): def _makeSoftwareRelease(self, software_product):
if new_id is None: return software_product.newContent(
new_id = self.generateNewId() portal_type='Software Product Release Variation',
software_release = self.portal.software_release_module\
.template_software_release.Base_createCloneDocument(batch_mode=1)
software_release.edit(
url_string=self.generateNewSoftwareReleaseUrl(), url_string=self.generateNewSoftwareReleaseUrl(),
reference='TESTSOFTRELS-%s' % new_id,
title='Start requested for %s' % new_id
) )
software_release.release()
return software_release def _makeSoftwareType(self, software_product):
return software_product.newContent(
def _makeCustomSoftwareRelease(self, software_product_url, software_url): portal_type='Software Product Type Variation',
software_release = self._makeSoftwareRelease() url_string='type%s' % self.generateNewId(),
software_release.edit( )
aggregate_value=software_product_url,
url_string=software_url def addAllocationSupply(self, title, node, software_product,
) software_release, software_type,
software_release.publish() destination_value=None,
return software_release is_slave_on_same_instance_tree_allocable=False):
allocation_supply = self.portal.allocation_supply_module.newContent(
portal_type="Allocation Supply",
title=title,
aggregate_value=node,
destination_value=destination_value,
destination_project_value=software_product.getFollowUpValue(),
slave_on_same_instance_tree_allocable=is_slave_on_same_instance_tree_allocable
)
resource_vcl = [
'software_release/%s' % software_release.getRelativeUrl(),
'software_type/%s' % software_type.getRelativeUrl()
]
resource_vcl.sort()
allocation_supply_line = allocation_supply.newContent(
portal_type="Allocation Supply Line",
resource_value=software_product,
)
allocation_supply_line.edit(
p_variation_base_category_list=allocation_supply_line.getVariationRangeBaseCategoryList()
)
base_id = 'path'
allocation_supply_line.setCellRange(
base_id=base_id,
*allocation_supply_line.SupplyLine_asCellRange(base_id=base_id)
)
#cell_key = list(allocation_supply_line.getCellKeyList(base_id=base_id))[0]
cell_key = resource_vcl
allocation_supply_line.log(resource_vcl, cell_key)
allocation_supply_cell = allocation_supply_line.newCell(
base_id=base_id,
portal_type='Allocation Supply Cell',
*cell_key
)
allocation_supply_cell.edit(
mapped_value_property_list=['allocable'],
allocable=True,
predicate_category_list=cell_key,
variation_category_list=cell_key
)
allocation_supply.validate()
return allocation_supply
def generateNewSoftwareReleaseUrl(self): def generateNewSoftwareReleaseUrl(self):
return 'http://example.org/têst%s.cfg' % self.generateNewId() return 'http://example.org/têst%s.cfg' % self.generateNewId()
......
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