Commit 43e29047 authored by Romain Courteaud's avatar Romain Courteaud

slapos_subscription_request: drop SubscriptionRequest_processOrdered

parent 5fbd7139
if context.getSimulationState() != "ordered":
# Skip if the instance isn't ordered anymore
return
instance_tree = context.getAggregateValue()
# Don't request again if it is already requested.
if instance_tree is None:
context.SubscriptionRequest_processRequest()
# Don't perform everything on the same transaction
return "Skipped (Instance Requested)"
if instance_tree is not None:
if instance_tree.getCausalityState() == "diverged":
# Call it as soon as possible
subscription_condition = context.getSpecialiseValue(portal_type='Subscription Condition')
trade_condition = subscription_condition.getSpecialiseValue(portal_type='Sale Trade Condition')
if trade_condition is None:
return 'Skipped (No Trade Condition)'
instance_tree.InstanceTree_requestUpdateOpenSaleOrder(trade_condition.getRelativeUrl())
instance = instance_tree.getSuccessorValue()
# This ensure that the user has a valid cloud contract.
# At this stage he already have a paied invoice for the reservation,
# so the cloud contact will be just created.
instance.SoftwareInstance_requestValidationPayment()
# create a Deduction for his fee
context.SubscriptionRequest_generateReservationRefoundSalePackingList()
# Instance is already destroyed so move into stopped state diretly.
if instance_tree.getValidationState() == "archived":
comment="Instance Tree is Destroyed and archived, Stop the Subscription Request"
context.confirm(comment=comment)
context.start(comment=comment)
context.stop(comment=comment)
invoice = context.SubscriptionRequest_verifyPaymentBalanceIsReady()
if not invoice:
# Invoice isn't available for the user to Pay
return "Skipped (Payment isn't ready)"
if not context.SubscriptionRequest_verifyInstanceIsAllocated():
# Only continue if instance is ready
return "Skipped (Instance isn't ready)"
# Link to be sent is the invoice one
if context.SubscriptionRequest_notifyPaymentIsReady(invoice):
context.confirm(comment="Payment is ready for the user")
return "Payment is ready for the user"
return "Skipped (User isn't notified)"
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SubscriptionRequest_processOrdered</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -1091,230 +1091,6 @@ class TestSubscriptionRequest_verifyReservationPaymentTransaction(TestSubscripti
def test_deleted_sale_invoice_state(self):
self._test_cancel_due_sale_invoice_state(state="deleted")
class TestSubscriptionRequest_processOrdered(TestSubscriptionSkinsMixin):
def test_no_sale_invoice(self):
person = self.makePerson()
subscription_condition = self.newSubscriptionCondition(
url_string="https://%s/software.cfg" % self.new_id,
sla_xml="""<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="oi">couscous</parameter>
<parameter id="zz">yy</parameter>
</instance>""",
text_content="""<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="xx">couscous</parameter>
<parameter id="zz">yy</parameter>
</instance>""",
root_slave=False,
source_reference="test_for_test_123")
subscription_request = self.newSubscriptionRequest(
quantity=1, destination_section_value=person,
specialise_value=subscription_condition
)
self.tic()
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(),
None)
subscription_request.plan()
subscription_request.order()
self.tic()
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(),
'Skipped (Instance Requested)')
self.tic()
instance_tree = subscription_request.getAggregateValue(portal_type="Instance Tree")
self.assertNotEqual(instance_tree, None)
instance = instance_tree.getSuccessorValue()
self.assertNotEqual(instance, None)
self.assertEqual('diverged', instance_tree.getCausalityState())
instance = instance_tree.getSuccessorValue()
self.assertNotEqual(instance, None)
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(),
"Skipped (Payment isn't ready)")
self.tic()
self.assertEqual('solved', instance_tree.getCausalityState())
contract = self.portal.portal_catalog.getResultValue(
portal_type=["Cloud Contract"],
default_destination_section_uid=person.getUid(),
validation_state=['invalidated', 'validated'],
)
self.assertNotEqual(contract, None)
# here the Reservation fee invoice wasn't generated to the user
# don't get cloud contact approved
self.assertEqual(contract.getValidationState(), "invalidated")
# Check if refundable invoice wasn't generated as causality is None anyway...
invoice = subscription_request.getCausalityValue(
portal_type="Sale Invoice Transaction")
self.assertEqual(None, invoice)
self.assertEqual(
subscription_request.getSimulationState(),
"ordered"
)
@simulate('SubscriptionRequest_verifyPaymentBalanceIsReady', '*args, **kwrgs', 'return None')
@simulate('InstanceTree_requestUpdateOpenSaleOrder', '*args, **kwargs', 'context.converge()')
@simulate('SubscriptionRequest_verifyInstanceIsAllocated', '*args, **kwargs','return True')
def test_with_reservation_fee(self):
person = self.makePerson()
subscription_condition = self.newSubscriptionCondition(
url_string="https://%s/software.cfg" % self.new_id,
sla_xml="""<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="oi">couscous</parameter>
<parameter id="zz">yy</parameter>
</instance>""",
text_content="""<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="xx">couscous</parameter>
<parameter id="zz">yy</parameter>
</instance>""",
root_slave=False,
source_reference="test_for_test_123",
specialise_value=self.newSaleTradeCondition()
)
subscription_request = self.newSubscriptionRequest(
quantity=1, destination_section_value=person,
specialise_value=subscription_condition
)
self.tic()
# The SubscriptionRequest_createRelatedSaleInvoiceTransaction is invoked up, as it proven on
# test TestSubscriptionRequest_requestPaymentTransaction, so let's keep it simple, and just reinvoke
current_payment = subscription_request.SubscriptionRequest_requestPaymentTransaction("TAG")
self.assertNotEqual(current_payment, None)
self.tic()
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(), None)
subscription_request.plan()
subscription_request.order()
self.tic()
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(), 'Skipped (Instance Requested)')
self.tic()
instance_tree = subscription_request.getAggregateValue(portal_type="Instance Tree")
self.assertNotEqual(instance_tree, None)
self.assertEqual('diverged', instance_tree.getCausalityState())
self.assertEqual('start_requested', instance_tree.getSlapState())
instance = instance_tree.getSuccessorValue()
self.assertNotEqual(instance, None)
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(),
"Skipped (Payment isn't ready)")
self.tic()
self.assertEqual('solved', instance_tree.getCausalityState())
contract = self.portal.portal_catalog.getResultValue(
portal_type=["Cloud Contract"],
default_destination_section_uid=person.getUid(),
validation_state=['invalidated', 'validated'],
)
self.assertNotEqual(contract, None)
# here the Reservation fee invoice wasn't generated to the user
# don't get cloud contact approved
self.assertEqual(contract.getValidationState(), "invalidated")
# Check if refundable invoice wasn't generated as causality is None anyway...
invoice = subscription_request.getCausalityValue(
portal_type="Sale Invoice Transaction")
self.assertNotEqual(None, invoice)
self.assertEqual(
subscription_request.getSimulationState(),
"ordered"
)
@simulate('SubscriptionRequest_verifyPaymentBalanceIsReady', '*args, **kwrgs', 'return context.fake_payment')
@simulate('InstanceTree_requestUpdateOpenSaleOrder', '*args, **kwargs', 'context.converge()')
@simulate('SubscriptionRequest_verifyInstanceIsAllocated', '*args, **kwargs','return True')
def test_confirmed(self):
person = self.makePerson()
subscription_condition = self.newSubscriptionCondition(
url_string="https://%s/software.cfg" % self.new_id,
sla_xml="""<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="oi">couscous</parameter>
<parameter id="zz">yy</parameter>
</instance>""",
text_content="""<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="xx">couscous</parameter>
<parameter id="zz">yy</parameter>
</instance>""",
root_slave=False,
source_reference="test_for_test_123",
specialise_value=self.newSaleTradeCondition()
)
subscription_request = self.newSubscriptionRequest(
quantity=1, destination_section_value=person,
specialise_value=subscription_condition
)
subscription_request.plan()
subscription_request.order()
self.createNotificationMessage("subscription_request-payment-is-ready",
text_content='${name} ${subscription_title} ${payment_relative_relative_url}')
fake_invoice = self.portal.accounting_module.newContent(
portal_type="Sale Invoice Transaction"
)
fake_payment = self.portal.accounting_module.newContent(
portal_type="Payment Transaction",
causality=fake_invoice.getRelativeUrl())
# Set this to the mock script can return it
setattr(subscription_request, 'fake_payment', fake_payment)
self.tic()
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(),
'Skipped (Instance Requested)')
self.tic()
instance_tree = subscription_request.getAggregateValue()
self.assertNotEqual(None, instance_tree)
self.assertEqual('diverged', instance_tree.getCausalityState())
self.assertEqual(
subscription_request.SubscriptionRequest_processOrdered(),
'Payment is ready for the user')
self.tic()
self.assertEqual('solved', instance_tree.getCausalityState())
self.assertEqual(
subscription_request.getSimulationState(),
"confirmed"
)
class TestSubscriptionRequest_verifyInstanceIsAllocated(TestSubscriptionSkinsMixin):
......
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