diff --git a/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py b/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py index d1bc01784aacd1e9602ea85704fe8d94f445edd4..a7cae841dc54b640f431e8c7d1dca9551ffb136e 100644 --- a/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py +++ b/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py @@ -244,6 +244,115 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): [q.getParentValue().getUid() for q in subscription_delivery_line_list if q.getSimulationState() == 'stopped']), sorted(setup_invoice_line_list[0].getParentValue().getCausalityUidList())) + def stepSelectPlannedInvoice(self, sequence, **kw): + hosting_subscription = self.portal.portal_catalog.getResultValue( + uid=sequence['hosting_subscription_uid']) + + invoice_line = self.portal.portal_catalog.getResultValue( + portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription.getRelativeUrl(), + simulation_state='planned' + ) + + sequence.edit(invoice_uid=invoice_line.getParentValue().getUid()) + + def stepConfirmInvoice(self, sequence, **kw): + self.portal.portal_catalog.getResultValue( + uid=sequence['invoice_uid']).confirm() + + def stepCheckHostingSubscriptionConfirmedInvoiceDocumentCoverage(self, + sequence, **kw): + catalog = self.portal.portal_catalog + hosting_subscription = catalog.getResultValue( + uid=sequence['hosting_subscription_uid']) + hosting_subscription_url = hosting_subscription.getRelativeUrl() + + # hosting is confirmed, so no invoice + hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + + self.assertEqual(1, len(hosting_delivery_line_list)) + self.assertEqual('confirmed', hosting_delivery_line_list[0]\ + .getSimulationState()) + + hosting_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + self.assertEqual(0, len(hosting_invoice_line_list)) + + # setup is stopped, and has there is invoice + setup_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + + self.assertEqual(1, len(setup_delivery_line_list)) + self.assertEqual('stopped', setup_delivery_line_list[0]\ + .getSimulationState()) + + setup_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + self.assertEqual(1, len(setup_invoice_line_list)) + self.assertEqual('confirmed', setup_invoice_line_list[0]\ + .getSimulationState()) + + # there are 10 confirmed and 2 stopped subscription, so 2 invoice line + subscription_delivery_line_list = catalog( + portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + + self.assertEqual(12, len(subscription_delivery_line_list)) + self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2), + sorted([q.getSimulationState() for \ + q in subscription_delivery_line_list])) + + subscription_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + self.assertEqual(2, len(subscription_invoice_line_list)) + self.assertEqual(['confirmed', 'planned'], + sorted([q.getSimulationState() for q in subscription_invoice_line_list])) + + # there are three invoice lines, where two share same invoice + # and other is on new one + self.assertEqual( + setup_invoice_line_list[0].getParentValue().getRelativeUrl(), + [q.getParentValue().getRelativeUrl() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'confirmed'][0] + ) + self.assertNotEqual( + setup_invoice_line_list[0].getParentValue().getRelativeUrl(), + [q.getParentValue().getRelativeUrl() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'planned'][0] + ) + + confirmed_invoice = setup_invoice_line_list[0].getParentValue() + planned_invoice = [q.getParentValue() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'planned'][0] + + # invoices shall be solved + self.assertEqual('solved', planned_invoice.getCausalityState()) + self.assertEqual('solved', confirmed_invoice.getCausalityState()) + + # confirmed invoice shall have causality of two packing lists + self.assertEqual( + sorted([setup_delivery_line_list[0].getParentValue().getUid()] + + [q.getParentValue().getUid() for q in subscription_delivery_line_list \ + if q.getSimulationState() == 'stopped' and \ + q.getParentValue().getUid() != sequence['subscription_delivery_uid']]), + sorted(confirmed_invoice.getCausalityUidList())) + + # planned invoice shall have causality of one packing list + self.assertEqual( + [q.getParentValue().getUid() for q in subscription_delivery_line_list \ + if q.getSimulationState() == 'stopped' and \ + q.getParentValue().getUid() == sequence['subscription_delivery_uid']], + planned_invoice.getCausalityUidList()) def test_OpenOrder_sale_packing_list(self): """ @@ -276,6 +385,23 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): CheckHostingSubscriptionStoppedDocumentCoverage + # Confirm current invoice and stop next delivery. After triggering build + # new planned invoice shall be available. + + SelectPlannedInvoice + ConfirmInvoice + Tic + + SelectNextSubscriptionDelivery + StartSubscriptionDelivery + StopSubscriptionDelivery + Tic + + TriggerBuild + Tic + + CheckHostingSubscriptionConfirmedInvoiceDocumentCoverage + CheckPayment """ sequence_list.addSequenceString(sequence_string)