예제 #1
0
    def setUp(self):
        super().setUp()
        group = base.ProductGroupFactory()
        component = base.ComponentFactory()
        status = base.ProductStatusFactory()
        area = base.AreaFactory()
        self.user = provider_user = base.UserFactory(is_superuser=True,
                                                     username='******')
        self.client.force_login(provider_user)
        self._DATA = {
            'acronym': 'TST',
            'name': 'TEST product',
            'note': 'TEST note',
            'description': 'TEST description',
            'group': group.pk,
            'component': component.pk,
            'status': status.pk,
            'area': area.pk
        }

        with open(os.devnull, 'w') as f:
            call_command('search_index', '--rebuild', '-f', stdout=f)
예제 #2
0
    def setUp(self):
        super().setUp()
        group = base.ProductGroupFactory()
        component = base.ComponentFactory()
        status = base.StatusFactory()
        area = base.AreaFactory()
        self.user = provider_user = base.UserFactory(
            is_superuser=True, username="******"
        )
        self.client.force_login(provider_user)
        self._DATA = {
            "acronym": "TST",
            "name": "TEST product",
            "note": "TEST note",
            "description": "TEST description",
            "group": group.pk,
            "component": component.pk,
            "status": status.pk,
            "area": area.pk,
        }

        with open(os.devnull, "w") as f:
            call_command("search_index", "--rebuild", "-f", stdout=f)
예제 #3
0
    def test_entity_and_group_sync_other_filters(self):
        """
        Whenever any of the filters is selected, this should trigger
        a synchronization of all other filters. Because of combinatorial
        explosion it is impractical to test all possible combinations, so this
        only tests one specific case that was selected at random, namely
        `entity`, and `group` triggering the synchronization of `service`,
        `component`, `status` and `area`.
        """
        service_1 = base.CopernicusServiceFactory(name="Service 1")
        service_2 = base.CopernicusServiceFactory(name="Service 2")
        entity_1 = base.EntrustedEntityFactory(acronym="Entity 1")
        entity_2 = base.EntrustedEntityFactory(acronym="Entity 2")

        component_1 = base.ComponentFactory(name='Component 1',
                                            service=service_1,
                                            entrusted_entity=entity_1)
        component_2 = base.ComponentFactory(name='Component 2',
                                            service=service_1,
                                            entrusted_entity=entity_2)
        component_3 = base.ComponentFactory(name='Component 3',
                                            service=service_2,
                                            entrusted_entity=entity_1)

        group_1 = base.ProductGroupFactory(name='Group 1')
        group_2 = base.ProductGroupFactory(name='Group 2')
        status_1 = base.ProductStatusFactory(name='Status 1')
        status_2 = base.ProductStatusFactory(name='Status 2')
        area_1 = base.AreaFactory(name='Area 1')
        area_2 = base.AreaFactory(name='Area 2')

        base.ProductFactory(component=component_1,
                            group=group_1,
                            status=status_1,
                            area=area_1)
        base.ProductFactory(component=component_2,
                            group=group_1,
                            status=status_1,
                            area=area_1)
        base.ProductFactory(component=component_1,
                            group=group_2,
                            status=status_2,
                            area=area_1)
        base.ProductFactory(component=component_3,
                            group=group_1,
                            status=status_1,
                            area=area_2)

        resp = self.client.get(reverse('product:json'), {
            'entity': entity_1.acronym,
            'group': group_1.name
        })
        self.assertEqual(resp.status_code, 200)

        data = resp.json()

        filters = {
            'component': {
                'options': ['Component 1', 'Component 3'],
                'selected': None
            },
            'area': {
                'options': ['Area 1', 'Area 2'],
                'selected': None
            },
            'entity': {
                'options': ['Entity 1'],
                'selected': 'Entity 1'
            },
            'group': {
                'options': ['Group 1'],
                'selected': 'Group 1'
            },
            'service': {
                'options': ['Service 1', 'Service 2'],
                'selected': None
            },
            'status': {
                'options': ['Status 1'],
                'selected': None
            }
        }

        self.assertEqual(data['filters'], filters)
예제 #4
0
    def test_entity_and_group_sync_other_filters(self):
        """
        Whenever any of the filters is selected, this should trigger
        a synchronization of all other filters. Because of combinatorial
        explosion it is impractical to test all possible combinations, so this
        only tests one specific case that was selected at random, namely
        `entity`, and `group` triggering the synchronization of `service`,
        `component`, `status` and `area`.
        """
        service_1 = base.CopernicusServiceFactory(name="Service 1")
        service_2 = base.CopernicusServiceFactory(name="Service 2")
        entity_1 = base.EntrustedEntityFactory(acronym="Entity 1")
        entity_2 = base.EntrustedEntityFactory(acronym="Entity 2")

        component_1 = base.ComponentFactory(
            name="Component 1", service=service_1, entrusted_entity=entity_1
        )
        component_2 = base.ComponentFactory(
            name="Component 2", service=service_1, entrusted_entity=entity_2
        )
        component_3 = base.ComponentFactory(
            name="Component 3", service=service_2, entrusted_entity=entity_1
        )

        group_1 = base.ProductGroupFactory(name="Group 1")
        group_2 = base.ProductGroupFactory(name="Group 2")
        status_1 = base.StatusFactory(name="Status 1")
        status_2 = base.StatusFactory(name="Status 2")
        area_1 = base.AreaFactory(name="Area 1")
        area_2 = base.AreaFactory(name="Area 2")

        base.ProductFactory(
            component=component_1, group=group_1, status=status_1, area=area_1
        )
        base.ProductFactory(
            component=component_2, group=group_1, status=status_1, area=area_1
        )
        base.ProductFactory(
            component=component_1, group=group_2, status=status_2, area=area_1
        )
        base.ProductFactory(
            component=component_3, group=group_1, status=status_1, area=area_2
        )

        resp = self.client.get(
            reverse("product:json"), {"entity": entity_1.acronym, "group": group_1.name}
        )
        self.assertEqual(resp.status_code, 200)

        data = resp.json()

        filters = {
            "component": {"options": ["Component 1", "Component 3"], "selected": None},
            "area": {"options": ["Area 1", "Area 2"], "selected": None},
            "entity": {"options": ["Entity 1"], "selected": "Entity 1"},
            "group": {"options": ["Group 1"], "selected": "Group 1"},
            "service": {"options": ["Service 1", "Service 2"], "selected": None},
            "status": {"options": ["Status 1"], "selected": None},
        }

        self.assertEqual(data["filters"], filters)
예제 #5
0
    def test_list_provider_json_filter_component(self):
        metrics = base.RequirementFactory.create_metrics(self.creator)
        romania = base.CountryFactory(code="RO")

        # Create 4 components
        first_component = base.ComponentFactory(name="First component")
        second_component = base.ComponentFactory(name="Second component")
        common_component = base.ComponentFactory(name="Common component")
        other_component = base.ComponentFactory(name="Other component")

        # Create data provider
        dpr1 = base.DataProviderRelationFactory(
            created_by=self.creator,
            data__created_by=self.creator,
            provider__name="First provider",
            provider__created_by=self.creator,
            provider__countries=[romania],
        )
        requirement1 = base.RequirementFactory(created_by=self.creator,
                                               **metrics)
        data_req1 = base.DataRequirementFactory(
            created_by=self.creator,
            data=dpr1.data,
            requirement=requirement1,
        )
        # Associate it with first and common components
        prod_req1 = base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement1,
            product__component=first_component,
        )
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement1,
            product__component=common_component,
        )

        # Create a second data provider
        dpr2 = base.DataProviderRelationFactory(
            created_by=self.creator,
            data__created_by=self.creator,
            provider__name="Second provider",
            provider__created_by=self.creator,
            provider__countries=[romania],
        )
        requirement2 = base.RequirementFactory(created_by=self.creator,
                                               **metrics)
        base.DataRequirementFactory(
            created_by=self.creator,
            data=dpr2.data,
            requirement=requirement2,
        )
        # Associate it with second and common components
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement2,
            product__component=second_component,
        )
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement2,
            product__component=common_component,
        )

        # Create a third data provider
        dpr3 = base.DataProviderRelationFactory(
            created_by=self.creator,
            data__created_by=self.creator,
            provider__name="Third provider",
            provider__created_by=self.creator,
            provider__countries=[romania],
        )
        requirement3 = base.RequirementFactory(created_by=self.creator,
                                               **metrics)
        base.DataRequirementFactory(
            created_by=self.creator,
            data=dpr3.data,
            requirement=requirement3,
        )
        # Associate it with other component
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement3,
            product__component=other_component,
        )

        # Filter by component (First component)
        resp = self.client.get(reverse("provider:json"),
                               {"component": "First component"})
        self.assertEqual(resp.status_code, 200)
        data = resp.json()
        self.assertIs(data["recordsTotal"], 3)
        self.assertIs(data["recordsFiltered"], 1)

        # Filter by component (Second component)
        resp = self.client.get(reverse("provider:json"),
                               {"component": "Second component"})
        self.assertEqual(resp.status_code, 200)
        data = resp.json()
        self.assertIs(data["recordsTotal"], 3)
        self.assertIs(data["recordsFiltered"], 1)

        # Filter by component (Common component)
        resp = self.client.get(reverse("provider:json"),
                               {"component": "Common component"})
        self.assertEqual(resp.status_code, 200)
        data = resp.json()
        self.assertIs(data["recordsTotal"], 3)
        self.assertIs(data["recordsFiltered"], 2)

        objs_to_soft_delete = [
            dpr1.provider,
            dpr1,
            dpr1.data,
            data_req1,
            requirement1,
            prod_req1,
            prod_req1.product,
        ]
        # Soft delete intermediate objects
        for obj in objs_to_soft_delete:
            with soft_deleted(obj):
                resp = self.client.get(reverse("provider:json"),
                                       {"component": "First component"})
                self.assertEqual(resp.status_code, 200)
                data = resp.json()
                # No records are filtered
                self.assertIs(data["recordsFiltered"], 0)
예제 #6
0
    def test_list_data_json_filter_component(self):
        metrics = base.RequirementFactory.create_metrics(self.creator)

        # Create 4 components
        first_component = base.ComponentFactory(name="First component")
        second_component = base.ComponentFactory(name="Second component")
        common_component = base.ComponentFactory(name="Common component")
        other_component = base.ComponentFactory(name="Other component")

        # Create first Data and DataRequirement objects
        data1 = base.DataFactory(created_by=self.creator)
        requirement1 = base.RequirementFactory(created_by=self.creator,
                                               **metrics)
        data_req1 = base.DataRequirementFactory(
            created_by=self.creator,
            data=data1,
            requirement=requirement1,
        )
        # Associate it with first and common components
        prod_req1 = base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement1,
            product__component=first_component,
        )
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement1,
            product__component=common_component,
        )

        # Create second Data and DataRequirement objects
        data2 = base.DataFactory(created_by=self.creator)
        requirement = base.RequirementFactory(created_by=self.creator,
                                              **metrics)
        base.DataRequirementFactory(
            created_by=self.creator,
            data=data2,
            requirement=requirement,
        )
        # Associate it with second and common components
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement,
            product__component=second_component,
        )
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement,
            product__component=common_component,
        )

        # Create third Data and DataRequirement objects
        data3 = base.DataFactory(created_by=self.creator)
        requirement = base.RequirementFactory(created_by=self.creator,
                                              **metrics)
        base.DataRequirementFactory(
            created_by=self.creator,
            data=data3,
            requirement=requirement,
        )
        # Associate it with other component
        base.ProductRequirementFactory(
            created_by=self.creator,
            requirement=requirement,
            product__component=other_component,
        )

        # Filter by component (First component)
        resp = self.client.get(reverse("data:json"),
                               {"component": "First component"})
        self.assertEqual(resp.status_code, 200)
        data = resp.json()
        self.assertIs(data["recordsTotal"], 3)
        self.assertIs(data["recordsFiltered"], 1)

        # Filter by component (Second component)
        resp = self.client.get(reverse("data:json"),
                               {"component": "Second component"})
        self.assertEqual(resp.status_code, 200)
        data = resp.json()
        self.assertIs(data["recordsTotal"], 3)
        self.assertIs(data["recordsFiltered"], 1)

        # Filter by component (Common component)
        resp = self.client.get(reverse("data:json"),
                               {"component": "Common component"})
        self.assertEqual(resp.status_code, 200)
        data = resp.json()
        self.assertIs(data["recordsTotal"], 3)
        self.assertIs(data["recordsFiltered"], 2)

        objs_to_soft_delete = [
            data1,
            data_req1,
            requirement1,
            prod_req1,
            prod_req1.product,
        ]
        # Soft delete intermediate objects
        for obj in objs_to_soft_delete:
            with soft_deleted(obj):
                resp = self.client.get(reverse("provider:json"),
                                       {"component": "First component"})
                self.assertEqual(resp.status_code, 200)
                data = resp.json()
                # No records are filtered
                self.assertIs(data["recordsFiltered"], 0)