def setUp(self):
        self.expert_fixture = structure_fixtures.ProjectFixture()
        self.expert_manager = self.expert_fixture.owner
        self.expert_provider = factories.ExpertProviderFactory(
            customer=self.expert_fixture.customer)

        self.project_fixture = structure_fixtures.ProjectFixture()
        self.project = self.project_fixture.project
        self.expert_request = factories.ExpertRequestFactory(
            project=self.project)
        self.expert = self.project_fixture.admin
Esempio n. 2
0
    def submit_public_and_private(self, role):
        provider_fixture = fixtures.ProjectFixture()
        consumer_fixture = fixtures.ProjectFixture()
        service = structure_factories.TestServiceFactory(
            settings=self.service_settings, customer=consumer_fixture.customer
        )
        structure_factories.TestServiceProjectLinkFactory(
            service=service, project=consumer_fixture.project
        )
        private_offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=False,
            billable=False,
            customer=provider_fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
        )
        private_offering.allowed_customers.add(consumer_fixture.customer)
        public_offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=True,
            billable=True,
            customer=provider_fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
        )
        public_offering.allowed_customers.add(consumer_fixture.customer)

        self.client.force_authenticate(getattr(consumer_fixture, role))

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(private_offering),
                'project': structure_factories.ProjectFactory.get_url(
                    consumer_fixture.project
                ),
                'attributes': {'name': 'test'},
            },
        )

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(public_offering),
                'project': structure_factories.ProjectFactory.get_url(
                    consumer_fixture.project
                ),
                'attributes': {'name': 'test'},
            },
        )

        return self.submit(consumer_fixture.project)
Esempio n. 3
0
    def setUp(self):
        self.project_fixture = structure_fixtures.ProjectFixture()
        self.project_manager = self.project_fixture.manager
        self.customer_owner = self.project_fixture.owner
        self.project = self.project_fixture.project

        self.expert_fixture = structure_fixtures.ProjectFixture()
        self.expert_provider = factories.ExpertProviderFactory(customer=self.expert_fixture.customer)
        self.expert_manager = self.expert_fixture.owner

        self.backend_patcher = mock.patch('waldur_mastermind.support.backend.get_active_backend')
        self.backend_patcher.start()
    def test_add_backlink_to_order_item_details_into_created_service_desk_ticket(
            self):
        fixture = fixtures.ProjectFixture()
        offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME,
                                                         options={'order': []})

        order_item = marketplace_factories.OrderItemFactory(offering=offering,
                                                            attributes={
                                                                'name':
                                                                'item_name',
                                                                'description':
                                                                'Description'
                                                            })

        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)
        self.assertTrue(
            support_models.Offering.objects.filter(name='item_name').exists())
        offering = support_models.Offering.objects.get(name='item_name')
        link_template = settings.WALDUR_MARKETPLACE['ORDER_ITEM_LINK_TEMPLATE']
        order_item_url = link_template.format(
            order_item_uuid=order_item.uuid,
            project_uuid=order_item.order.project.uuid)
        self.assertTrue(order_item_url in offering.issue.description)
Esempio n. 5
0
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.admin = self.fixture.admin
     self.manager = self.fixture.manager
     self.project = self.fixture.project
     self.url = factories.ProjectFactory.get_url(self.project,
                                                 action='users')
Esempio n. 6
0
    def test_create_confirmation_comment_if_offering_template_is_defined(self):
        mock.patch.stopall()
        fixture = fixtures.ProjectFixture()
        offering = marketplace_factories.OfferingFactory(
            type=PLUGIN_NAME,
            options={'order': []},
            secret_options={
                'template_confirmation_comment':
                'template_confirmation_comment'
            },
        )

        order_item = marketplace_factories.OrderItemFactory(
            offering=offering,
            attributes={
                'name': 'item_name',
                'description': 'Description'
            },
        )

        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)

        self.mock_get_active_backend(
        ).create_confirmation_comment.assert_called_once_with(
            mock.ANY, 'template_confirmation_comment')
 def setUp(self):
     self.fixture = structure_fixtures.ProjectFixture()
     self.offering = factories.OfferingFactory(
         shared=True, customer=self.fixture.customer)
     OfferingUser.objects.create(offering=self.offering,
                                 user=self.fixture.user,
                                 username='******')
Esempio n. 8
0
    def test_cart_item_limits_are_propagated_to_order_item(self):
        limits = {
            'storage': 1000,
            'ram': 30,
            'cpu_count': 5,
        }

        offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE)
        plan = factories.PlanFactory(offering=offering)

        for key in limits.keys():
            models.OfferingComponent.objects.create(
                offering=offering,
                type=key,
                billing_type=models.OfferingComponent.BillingTypes.USAGE)

        payload = {
            'offering': factories.OfferingFactory.get_url(offering),
            'plan': factories.PlanFactory.get_url(plan),
            'limits': limits,
        }

        fixture = fixtures.ProjectFixture()
        self.client.force_authenticate(fixture.staff)

        url = factories.CartItemFactory.get_list_url()
        response = self.client.post(url, payload)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        response = self.submit(fixture.project)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        order_item = models.OrderItem.objects.last()
        self.assertEqual(order_item.limits['cpu_count'], 5)
Esempio n. 9
0
    def setUp(self):
        self.fixture = structure_fixtures.ProjectFixture()
        self.service_provider = factories.ServiceProviderFactory()
        self.secret_code = self.service_provider.api_secret_code
        self.offering = factories.OfferingFactory(
            customer=self.fixture.customer)
        self.plan = factories.PlanFactory(unit=UnitPriceMixin.Units.PER_DAY,
                                          offering=self.offering)
        self.offering_component = factories.OfferingComponentFactory(
            offering=self.offering,
            billing_type=models.OfferingComponent.BillingTypes.USAGE,
        )
        self.component = factories.PlanComponentFactory(
            plan=self.plan, component=self.offering_component)
        self.resource = models.Resource.objects.create(
            offering=self.offering,
            plan=self.plan,
            project=self.fixture.project,
        )

        factories.OrderItemFactory(
            resource=self.resource,
            type=models.RequestTypeMixin.Types.CREATE,
            state=models.OrderItem.States.EXECUTING,
            plan=self.plan,
        )
        callbacks.resource_creation_succeeded(self.resource)
        self.plan_period = models.ResourcePlanPeriod.objects.get(
            resource=self.resource)
Esempio n. 10
0
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.project = self.fixture.project
     self.user = self.fixture.admin
     self.offering = marketplace_factories.OfferingFactory(
         type=PLUGIN_NAME,
         attributes={
             'schedules': [
                 {
                     'start': '2018-11-01T00:00:00.000000Z',
                     'end': '2018-11-01T23:59:59.000000Z',
                 },
                 {
                     'start': '2019-01-01T00:00:00.000000Z',
                     'end': '2019-01-01T23:59:59.000000Z',
                 },
                 {
                     'start': '2019-01-02T00:00:00.000000Z',
                     'end': '2019-01-02T23:59:59.000000Z',
                 },
                 {
                     'start': '2019-01-03T00:00:00.000000Z',
                     'end': '2019-01-03T23:59:59.000000Z',
                 },
             ]
         },
         state=marketplace_models.Offering.States.ACTIVE,
     )
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.customer = self.fixture.customer
     self.provider = factories.ServiceProviderFactory(
         customer=self.customer)
     self.category = factories.CategoryFactory()
     self.url = factories.CategoryFactory.get_url(self.category)
Esempio n. 12
0
    def setUp(self):
        fixture = structure_fixtures.ProjectFixture()
        offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME)

        self.order_item = marketplace_factories.OrderItemFactory(
            offering=offering,
            attributes={
                'schedules': [
                    {
                        'start': '2019-01-03T00:00:00.000000Z',
                        'end': '2019-01-05T23:59:59.000000Z',
                    },
                ],
                'name':
                'booking',
            },
        )

        serialized_order = core_utils.serialize_instance(self.order_item.order)
        serialized_user = core_utils.serialize_instance(fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)

        self.resource = marketplace_models.Resource.objects.get(name='booking')
        self.resource.state = marketplace_models.Resource.States.OK
        self.resource.save()
Esempio n. 13
0
    def test_resource_is_created_when_order_item_is_processed(self):
        fixture = fixtures.ProjectFixture()
        offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME)

        order_item = marketplace_factories.OrderItemFactory(
            offering=offering,
            attributes={
                'name':
                'item_name',
                'description':
                'Description',
                'schedules': [{
                    'start': '2021-02-05T10:00:00.000000+00:00',
                    'end': '2021-02-05T15:00:00.000000+00:00',
                }],
            },
        )

        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)

        self.assertTrue(
            marketplace_models.Resource.objects.filter(
                name='item_name').exists())
        resource = marketplace_models.Resource.objects.get(name='item_name')
        self.assertEqual(resource.state,
                         marketplace_models.Resource.States.CREATING)
Esempio n. 14
0
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.project = self.fixture.project
     self.manager = self.fixture.manager
     self.order = factories.OrderFactory(project=self.project,
                                         created_by=self.manager)
     self.offering = factories.OfferingFactory()
Esempio n. 15
0
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.project = self.fixture.project
     self.manager = self.fixture.manager
     self.order = factories.OrderFactory(project=self.project,
                                         created_by=self.manager)
     self.order_item = factories.OrderItemFactory(order=self.order)
Esempio n. 16
0
    def test_set_creation_ticket_id_as_backend_id_of_resource(self):
        def mock_create_issue(issue):
            issue.backend_id = 'WAL TEST'
            issue.save()

        self.mock_get_active_backend().create_issue = mock_create_issue
        fixture = fixtures.ProjectFixture()
        offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME,
                                                         options={'order': []})

        order_item = marketplace_factories.OrderItemFactory(
            offering=offering,
            attributes={
                'name': 'item_name',
                'description': 'Description'
            },
        )

        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)

        resource = marketplace_models.Resource.objects.get(name='item_name')
        issue = support_models.Issue.objects.get(
            resource_object_id=order_item.id)
        self.assertEqual(issue.backend_id, resource.backend_id)
Esempio n. 17
0
 def create_offering(self, components=True):
     fixture = structure_fixtures.ProjectFixture()
     url = marketplace_factories.OfferingFactory.get_list_url()
     self.client.force_authenticate(fixture.owner)
     payload = {
         'name': 'offering',
         'category': marketplace_factories.CategoryFactory.get_url(self.category),
         'customer': structure_factories.CustomerFactory.get_url(fixture.customer),
         'type': PACKAGE_TYPE,
         'service_attributes': {
             'backend_url': 'http://example.com/',
             'username': '******',
             'password': '******',
             'tenant_name': 'admin',
             'external_network_id': uuid.uuid4(),
         },
         'plans': [
             {
                 'name': 'small',
                 'description': 'CPU 1',
                 'unit': UnitPriceMixin.Units.PER_DAY,
                 'unit_price': 1010100,
             }
         ],
     }
     if components:
         payload['plans'][0]['prices'] = self.prices
         payload['plans'][0]['quotas'] = self.quotas
     with mock.patch('waldur_core.structure.models.ServiceSettings.get_backend'):
         return self.client.post(url, payload)
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.offering = factories.OfferingFactory(
         shared=True, customer=self.fixture.customer
     )
     self.permission = factories.OfferingPermissionFactory(offering=self.offering)
     self.url = factories.OfferingPermissionFactory.get_url(self.permission)
Esempio n. 19
0
    def test_order_gets_approved_if_all_offerings_are_private(self, role, mocked_task):
        fixture = fixtures.ProjectFixture()
        service = structure_factories.TestServiceFactory(
            settings=self.service_settings, customer=fixture.customer
        )
        structure_factories.TestServiceProjectLinkFactory(
            service=service, project=fixture.project
        )

        offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=False,
            billable=False,
            customer=fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
        )

        self.client.force_authenticate(getattr(fixture, role))

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(offering),
                'project': structure_factories.ProjectFactory.get_url(fixture.project),
                'attributes': {'name': 'test'},
            },
        )

        response = self.submit(fixture.project)
        self.assertEqual(response.data['state'], 'executing')
        mocked_task.delay.assert_not_called()
Esempio n. 20
0
    def setUp(self):
        self.fixture = fixtures.ProjectFixture()
        self.customer = self.fixture.customer

        factories.ServiceProviderFactory(customer=self.customer)
        self.offering = factories.OfferingFactory(customer=self.customer, shared=True)
        self.url = factories.OfferingFactory.get_url(self.offering)
Esempio n. 21
0
    def test_limits_are_not_allowed_for_components_with_disabled_quotas(self):
        limits = {
            'storage': 1000,
            'ram': 30,
            'cpu_count': 5,
        }

        offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE)
        plan = factories.PlanFactory(offering=offering)

        for key in limits.keys():
            models.OfferingComponent.objects.create(
                offering=offering,
                type=key,
                billing_type=models.OfferingComponent.BillingTypes.USAGE,
                disable_quotas=True,
            )

        payload = {
            'offering': factories.OfferingFactory.get_url(offering),
            'plan': factories.PlanFactory.get_url(plan),
            'limits': limits,
        }

        fixture = fixtures.ProjectFixture()
        self.client.force_authenticate(fixture.staff)

        url = factories.CartItemFactory.get_list_url()
        response = self.client.post(url, payload)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Esempio n. 22
0
    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)
Esempio n. 23
0
    def test_private_offerings_are_available_for_users_in_allowed_projects(self):
        fixture = fixtures.ProjectFixture()
        self.offering.allowed_customers.add(fixture.customer)

        self.client.force_authenticate(fixture.manager)
        response = self.client.get(self.url)
        self.assertEqual(len(response.data), 1)
Esempio n. 24
0
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.customer = self.fixture.customer
     self.provider = factories.ServiceProviderFactory(
         customer=self.customer)
     self.offering = factories.OfferingFactory(customer=self.customer)
     self.screenshot = factories.ScreenshotFactory(offering=self.offering)
Esempio n. 25
0
    def test_request_is_created_when_order_item_is_processed(self):
        fixture = fixtures.ProjectFixture()
        offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME,
                                                         options={'order': []})

        order_item = marketplace_factories.OrderItemFactory(
            offering=offering,
            attributes={
                'name': 'item_name',
                'description': 'Description'
            },
        )

        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)

        self.assertTrue(
            support_models.Offering.objects.filter(name='item_name').exists())
        support_offering = support_models.Offering.objects.get(
            name='item_name')
        resource = marketplace_models.Resource.objects.get(
            scope=support_offering)
        order_item = marketplace_models.OrderItem.objects.get(
            resource=resource)
        self.assertTrue(
            support_models.Issue.objects.filter(
                resource_object_id=order_item.id).exists())
Esempio n. 26
0
 def test_other_expert_manager_can_not_see_expert_bid(self):
     fixture = structure_fixtures.ProjectFixture()
     factories.ExpertProviderFactory(customer=fixture.customer)
     self.client.force_authenticate(fixture.owner)
     response = self.client.get(factories.ExpertBidFactory.get_list_url())
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 0)
Esempio n. 27
0
 def setUp(self):
     self.fixture = fixtures.ProjectFixture()
     self.project = self.fixture.project
     self.manager = self.fixture.manager
     self.order = factories.OrderFactory(project=self.project,
                                         created_by=self.manager)
     self.url = factories.OrderFactory.get_url(self.order, 'approve')
Esempio n. 28
0
    def setUp(self):
        fixture = fixtures.ProjectFixture()
        self.customer1 = fixture.customer
        self.project1 = fixture.project
        self.staff = fixture.staff
        self.owner1 = fixture.owner
        self.manager1 = fixture.manager

        fixture2 = fixtures.ProjectFixture()
        self.customer2 = fixture2.customer
        self.project2 = fixture2.project
        self.owner2 = fixture2.owner
        self.manager2 = fixture2.manager

        self.client.force_authenticate(self.staff)
        self.url = factories.UserFactory.get_list_url()
 def setUp(self):
     self.fixture = structure_fixtures.ProjectFixture()
     self.offering = factories.OfferingFactory(
         shared=True, customer=self.fixture.customer)
     self.offering.secret_options[
         'service_provider_can_create_offering_user'] = True
     self.offering.save()
Esempio n. 30
0
    def setUp(self):
        fixture = structure_fixtures.ProjectFixture()
        service_settings = structure_factories.ServiceSettingsFactory(type='SLURM')
        offering = marketplace_factories.OfferingFactory(type=PLUGIN_NAME, scope=service_settings)
        plan = marketplace_factories.PlanFactory(offering=offering)
        self.allocation = slurm_factories.AllocationFactory()
        self.resource = marketplace_models.Resource.objects.create(
            scope=self.allocation,
            offering=offering,
            plan=plan,
            project=fixture.project,
        )
        self.plan_period = marketplace_models.ResourcePlanPeriod.objects.create(
            resource=self.resource,
            plan=plan,
            start=timezone.make_aware(datetime.datetime.now())
        )
        for component in manager.get_components(PLUGIN_NAME):
            offering_component = marketplace_models.OfferingComponent.objects.create(
                offering=offering,
                type=component.type,
                name=component.name,
                measured_unit=component.measured_unit,
                billing_type=marketplace_models.OfferingComponent.BillingTypes.USAGE,
            )
            marketplace_models.PlanComponent.objects.create(
                component=offering_component,
                plan=plan,
                price=3
            )

        marketplace_models.ResourcePlanPeriod.objects.create(
            start=datetime.date(2017, 1, 1),
            resource=self.resource,
            plan=plan)