def test_create_missing_support_offerings(self):
        offering = support_factories.OfferingFactory()
        category = marketplace_factories.CategoryFactory()
        customer = structure_factories.CustomerFactory()

        marketplace_support_utils.init_offerings_and_resources(category, customer)
        self.assertTrue(marketplace_models.Resource.objects.filter(scope=offering, project=offering.project).exists())
Exemple #2
0
    def setUp(self):
        self.fixture = structure_fixtures.UserFixture()
        self.offering_1 = support_factories.OfferingFactory(
            backend_id='backend_id')
        self.offering_2 = support_factories.OfferingFactory(
            backend_id='backend_id')
        self.offering_3 = support_factories.OfferingFactory(
            backend_id='other_backend_id')

        ct = ContentType.objects.get_for_model(support_models.Offering)
        self.resource_1 = factories.ResourceFactory(
            object_id=self.offering_1.id, content_type=ct)
        factories.ResourceFactory(object_id=self.offering_3.id,
                                  content_type=ct)

        self.url = factories.ResourceFactory.get_list_url()
Exemple #3
0
 def create_issue(self):
     self.issue = support_factories.IssueFactory(backend_id='', key='')
     support_offering = support_factories.OfferingFactory(issue=self.issue)
     resource = marketplace_factories.ResourceFactory(scope=support_offering)
     self.order_item = marketplace_factories.OrderItemFactory(resource=resource, offering=self.offering)
     self.issue.backend_id = 'TST-1'
     self.issue.save()
    def test_order_item_set_state_done_if_offering_set_state_ok(self):
        fixture = fixtures.ProjectFixture()
        offering = support_factories.OfferingFactory()
        resource = marketplace_factories.ResourceFactory(
            project=fixture.project, scope=offering)

        order_item = marketplace_factories.OrderItemFactory(resource=resource)
        order_item.set_state_executing()
        order_item.save()

        order_item.order.state = marketplace_models.Order.States.EXECUTING
        order_item.order.save()

        offering.state = support_models.Offering.States.OK
        offering.save()

        order_item.refresh_from_db()
        self.assertEqual(order_item.state, order_item.States.DONE)

        order_item.resource.refresh_from_db()
        self.assertEqual(order_item.resource.state,
                         marketplace_models.Resource.States.OK)

        order_item.order.refresh_from_db()
        self.assertEqual(order_item.order.state,
                         marketplace_models.Order.States.DONE)
 def setUp(self):
     self.fixture = structure_fixtures.UserFixture()
     self.resource = marketplace_factories.ResourceFactory()
     marketplace_factories.ResourceFactory()
     self.request = support_factories.OfferingFactory(
         backend_id='offering_backend_id')
     self.resource.scope = self.request
     self.resource.save()
     self.url = marketplace_factories.ResourceFactory.get_list_url()
Exemple #6
0
 def test_offering_items_are_serialized(self):
     offering = support_factories.OfferingFactory(
         template__name='OFFERING-001', project=self.fixture.project)
     offering.state = offering.__class__.States.OK
     offering.save()
     report = format_invoice_csv(self.invoice)
     lines = report.splitlines()
     self.assertEqual(3, len(lines))
     self.assertTrue('OFFERING-001' in ''.join(lines))
 def test_order_item_set_state_done(self):
     offering = support_factories.OfferingFactory()
     order_item = marketplace_factories.OrderItemFactory(scope=offering)
     order_item.set_state('executing')
     order_item.order.state = marketplace_models.Order.States.EXECUTING
     order_item.order.save()
     offering.state = support_models.Offering.States.OK
     offering.save()
     order_item.refresh_from_db()
     self.assertEqual(order_item.state, order_item.States.DONE)
    def test_invoice_item_with_half_monthly_price_with_start_in_second_half(self):
        start_date = timezone.datetime(2017, 7, 16)
        offering = support_factories.OfferingFactory(unit=common_mixins.UnitPriceMixin.Units.PER_HALF_MONTH)
        with freeze_time(start_date):
            offering.state = support_models.Offering.States.OK
            offering.save(update_fields=['state'])

        expected_price = offering.unit_price
        offering_item = models.GenericInvoiceItem.objects.get(scope=offering)
        self.assertEqual(offering_item.price, expected_price)
    def test_invoice_item_with_daily_price(self):
        start_date = timezone.datetime(2017, 7, 14)
        end_date = timezone.datetime(2017, 7, 31, 23, 59, 59)
        offering = support_factories.OfferingFactory(unit=common_mixins.UnitPriceMixin.Units.PER_DAY)
        with freeze_time(start_date):
            offering.state = support_models.Offering.States.OK
            offering.save(update_fields=['state'])

        expected_price = utils.get_full_days(start_date, end_date) * offering.unit_price
        offering_item = models.GenericInvoiceItem.objects.get(scope=offering)
        self.assertEqual(offering_item.price, expected_price)
    def test_create_missing_support_offerings_with_offering_plan(self):
        offering = support_factories.OfferingFactory()
        category = marketplace_factories.CategoryFactory()
        customer = structure_factories.CustomerFactory()
        offering_plan = support_factories.OfferingPlanFactory(template=offering.template,
                                                              unit_price=offering.unit_price)

        marketplace_support_utils.init_offerings_and_resources(category, customer)
        self.assertTrue(marketplace_models.Plan.objects.filter(scope=offering_plan).exists())
        self.assertEqual(marketplace_models.Plan.objects.count(), 1)
        self.assertTrue(marketplace_models.Resource.objects.filter(scope=offering).exists())
    def test_invoice_is_not_created_for_pending_offering(self):
        issue = support_factories.IssueFactory(customer=self.fixture.customer, project=self.fixture.project)
        pending_offering = support_factories.OfferingFactory(issue=issue)

        offering = self.fixture.offering
        offering.state = offering.States.OK
        offering.save()

        self.assertEqual(models.Invoice.objects.count(), 1)
        invoice = models.Invoice.objects.first()
        self.assertTrue(invoice.offering_items.filter(offering=offering).exists())
        self.assertFalse(invoice.offering_items.filter(offering=pending_offering).exists())
    def test_invoice_item_with_half_monthly_price_with_start_in_first_half(self):
        start_date = timezone.datetime(2017, 7, 14)
        usage_days = 2
        offering = support_factories.OfferingFactory(unit=common_mixins.UnitPriceMixin.Units.PER_HALF_MONTH)
        with freeze_time(start_date):
            offering.state = support_models.Offering.States.OK
            offering.save(update_fields=['state'])

        month_days = monthrange(2017, 7)[1]
        expected_price = offering.unit_price * decimal.Decimal(1 + (usage_days / (month_days / 2)))
        offering_item = models.GenericInvoiceItem.objects.get(scope=offering)
        self.assertEqual(offering_item.price, expected_price)
    def _start_end_offering(self, start_date, end_date):
        offering = support_factories.OfferingFactory(unit=common_mixins.UnitPriceMixin.Units.PER_HALF_MONTH)

        with freeze_time(start_date):
            offering.state = support_models.Offering.States.OK
            offering.save(update_fields=['state'])
            offering_item = models.GenericInvoiceItem.objects.get(scope=offering)

        with freeze_time(end_date):
            offering.state = support_models.Offering.States.TERMINATED
            offering.save(update_fields=['state'])
            offering_item.refresh_from_db()

        return offering, offering_item
Exemple #14
0
    def test_invoice_item_with_monthly_price(self):
        start_date = timezone.datetime(2017, 7, 20)
        month_days = monthrange(2017, 7)[1]
        usage_days = month_days - start_date.day + 1
        offering = support_factories.OfferingFactory(
            unit=common_mixins.UnitPriceMixin.Units.PER_MONTH)
        with freeze_time(start_date):
            offering.state = support_models.Offering.States.OK
            offering.save(update_fields=['state'])

        expected_price = offering.unit_price * quantize_price(
            decimal.Decimal((usage_days / month_days)))
        offering_item = models.InvoiceItem.objects.get(scope=offering)
        self.assertEqual(offering_item.price, expected_price)
Exemple #15
0
    def test_invoice_item_with_half_monthly_price_with_end_in_first_half(self):
        start_date = timezone.datetime(2017, 7, 10)
        end_date = timezone.datetime(2017, 7, 14)
        offering = support_factories.OfferingFactory(
            unit=common_mixins.UnitPriceMixin.Units.PER_HALF_MONTH)
        with freeze_time(start_date):
            offering.state = support_models.Offering.States.OK
            offering.save(update_fields=['state'])
            offering_item = models.OfferingItem.objects.get(offering=offering)

        with freeze_time(end_date):
            offering.state = support_models.Offering.States.TERMINATED
            offering.save(update_fields=['state'])
            offering_item.refresh_from_db()

        expected_price = offering.unit_price
        self.assertEqual(offering_item.price, expected_price)
    def test_offering_set_state_done(self):
        offering = support_factories.OfferingFactory()
        resource = marketplace_factories.ResourceFactory(scope=offering)
        order_item = marketplace_factories.OrderItemFactory(resource=resource)
        order_item.set_state_executing()
        order_item.save()

        order_item.order.state = marketplace_models.Order.States.EXECUTING
        order_item.order.save()
        offering.issue.status = 'Completed'
        offering.issue.resolution = 'Done'
        offering.issue.save()

        order_item.refresh_from_db()
        self.assertEqual(order_item.state, order_item.States.DONE)
        offering.refresh_from_db()
        self.assertEqual(offering.state, offering.States.OK)
Exemple #17
0
    def setUp(self):
        super(RequestActionBaseTest, self).setUp()
        self.fixture = fixtures.ProjectFixture()
        self.project = self.fixture.project

        self.user = self.fixture.staff
        self.offering = marketplace_factories.OfferingFactory(
            state=marketplace_models.Offering.States.ACTIVE, type=PLUGIN_NAME
        )

        self.request = support_factories.OfferingFactory(
            template=self.offering.scope, project=self.project, name='test_request'
        )
        self.current_plan = marketplace_factories.PlanFactory(
            offering=self.offering, unit_price=10
        )
        self.offering_component = marketplace_factories.OfferingComponentFactory(
            offering=self.offering,
            billing_type=marketplace_models.OfferingComponent.BillingTypes.FIXED,
        )

        self.plan_component = marketplace_factories.PlanComponentFactory(
            plan=self.current_plan, component=self.offering_component
        )
        self.resource = marketplace_factories.ResourceFactory(
            project=self.project,
            scope=self.request,
            offering=self.offering,
            plan=self.current_plan,
        )
        self.resource.scope.state = support_models.Offering.States.OK
        self.resource.scope.save()

        self.success_issue_status = 'ok'
        support_factories.IssueStatusFactory(
            name=self.success_issue_status,
            type=support_models.IssueStatus.Types.RESOLVED,
        )

        self.error_issue_status = 'error'
        support_factories.IssueStatusFactory(
            name=self.error_issue_status, type=support_models.IssueStatus.Types.CANCELED
        )

        self.start = datetime.datetime.now()
 def setUp(self):
     super(RequestDeleteTest, self).setUp()
     self.fixture = fixtures.ProjectFixture()
     self.offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME)
     self.request = support_factories.OfferingFactory(
         state=support_models.Offering.States.TERMINATED)
     self.resource = marketplace_factories.ResourceFactory(
         project=self.fixture.project,
         scope=self.request,
         offering=self.offering,
     )
     self.order = marketplace_factories.OrderFactory(
         project=self.fixture.project,
         state=marketplace_models.Order.States.EXECUTING,
     )
     self.order_item = marketplace_factories.OrderItemFactory(
         resource=self.resource,
         type=marketplace_models.RequestTypeMixin.Types.TERMINATE,
     )
Exemple #19
0
    def setUp(self):
        super(SupportOfferingTest, self).setUp()

        self.success_issue_status = 'Completed'
        support_factories.IssueStatusFactory(
            name=self.success_issue_status,
            type=support_models.IssueStatus.Types.RESOLVED)

        self.fail_issue_status = 'Cancelled'
        support_factories.IssueStatusFactory(
            name=self.fail_issue_status,
            type=support_models.IssueStatus.Types.CANCELED)

        self.offering = support_factories.OfferingFactory()
        resource = marketplace_factories.ResourceFactory(scope=self.offering)
        self.order_item = marketplace_factories.OrderItemFactory(
            resource=resource)
        self.order_item.set_state_executing()
        self.order_item.save()

        self.order_item.order.state = marketplace_models.Order.States.EXECUTING
        self.order_item.order.save()
Exemple #20
0
    def setUp(self):
        self.provider = marketplace_factories.ServiceProviderFactory()
        self.provider_2 = marketplace_factories.ServiceProviderFactory()

        self.offering = marketplace_factories.OfferingFactory(
            type=PACKAGE_TYPE, customer=self.provider.customer)

        self.offering_component = marketplace_factories.OfferingComponentFactory(
            offering=self.offering)
        self.plan = marketplace_factories.PlanFactory(
            offering=self.offering,
            unit=UnitPriceMixin.Units.PER_DAY,
        )
        self.component = marketplace_factories.PlanComponentFactory(
            component=self.offering_component,
            price=Decimal(5),
            plan=self.plan)

        self.offering_2 = marketplace_factories.OfferingFactory(
            type=PACKAGE_TYPE, customer=self.provider_2.customer)

        self.offering_component_2 = marketplace_factories.OfferingComponentFactory(
            offering=self.offering_2)
        self.plan_2 = marketplace_factories.PlanFactory(
            offering=self.offering_2,
            unit=UnitPriceMixin.Units.PER_DAY,
        )
        self.component_2 = marketplace_factories.PlanComponentFactory(
            component=self.offering_component_2,
            price=Decimal(7),
            plan=self.plan_2)

        self.resource_1 = marketplace_factories.ResourceFactory(
            state=marketplace_models.Resource.States.OK,
            offering=self.offering,
            plan=self.plan,
            limits={'cpu': 1},
        )

        self.resource_2 = marketplace_factories.ResourceFactory(
            state=marketplace_models.Resource.States.OK,
            offering=self.offering,
            project=self.resource_1.project,
            plan=self.plan,
            limits={'cpu': 1},
        )

        self.resource_3 = marketplace_factories.ResourceFactory(
            state=marketplace_models.Resource.States.OK,
            offering=self.offering_2,
            project=self.resource_1.project,
            plan=self.plan_2,
            limits={'cpu': 1},
        )

        self.customer = self.resource_1.project.customer

        self.support_template = support_factories.OfferingTemplateFactory()
        self.support_plan = support_factories.OfferingPlanFactory(
            template=self.support_template,
            unit_price=7,
        )
        self.support_offering = support_factories.OfferingFactory(
            project=self.resource_1.project,
            template=self.support_template,
            plan=self.support_plan,
            state=support_models.Offering.States.OK,
        )