예제 #1
0
    def test_transition_changes_requested_feedback(self):
        self.erase_logging_file()
        self.login_creator()
        data = base.DataFactory(name="Test data",
                                state="ready",
                                created_by=self.creator)
        provider = base.DataProviderFactory(name="Test provider",
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(
            data=data,
            state="ready",
            created_by=self.creator,
            provider=provider)
        items = [data, data_provider]
        for item in items:
            self.assertEqual((getattr(item, "state")).name, "ready")

        self.client.force_login(self.other_user)
        self.client.post(
            reverse(
                "data:transition",
                kwargs={
                    "source": "ready",
                    "target": "changes",
                    "pk": data.pk
                },
            ),
            {"feedback": "this is a feedback test"},
        )
        getattr(data, "refresh_from_db")()
        self.assertEqual(data.state, "changes")
        self.assertEqual(data.feedback, "this is a feedback test")
예제 #2
0
    def test_transition_inexistent_state(self):
        self.login_creator()
        metrics = base.RequirementFactory.create_metrics(self.creator)
        requirement = base.RequirementFactory(name="Test requirement",
                                              created_by=self.creator,
                                              **metrics)
        data = base.DataFactory(name="Test data", created_by=self.creator)
        data_requirement = base.DataRequirementFactory(data=data,
                                                       created_by=self.creator,
                                                       requirement=requirement)
        provider = base.DataProviderFactory(name="Test provider",
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(
            data=data, created_by=self.creator, provider=provider)

        items = [requirement, data, data_requirement, provider, data_provider]

        response = self.client.post(
            reverse(
                "requirement:transition",
                kwargs={
                    "source": "draft",
                    "target": "nosuchstate",
                    "pk": requirement.pk,
                },
            ))
        self.assertEqual(response.status_code, 404)

        for item in items:
            getattr(item, "refresh_from_db")()
            self.assertEqual((getattr(item, "state")).name, "draft")
예제 #3
0
    def test_transition_existent_state_no_transition(self):
        self.login_creator()
        data = base.DataFactory(name="Test data", created_by=self.creator)
        provider = base.DataProviderFactory(name="Test provider",
                                            created_by=self.creator)
        base.DataProviderRelationFactory(data=data,
                                         created_by=self.creator,
                                         provider=provider)

        items = [data, provider]

        response = self.client.post(
            reverse(
                "data:transition",
                kwargs={
                    "source": "draft",
                    "target": "valid",
                    "pk": data.pk
                },
            ))
        self.assertEqual(response.status_code, 404)

        for item in items:
            getattr(item, "refresh_from_db")()
            self.assertEqual((getattr(item, "state")).name, "draft")
예제 #4
0
    def test_transition_existent_state_no_transition(self):
        self.login_creator()
        metrics = base.RequirementFactory.create_metrics(self.creator)
        requirement = base.RequirementFactory(name='Test requirement',
                                              created_by=self.creator,
                                              **metrics)
        data = base.DataFactory(name='Test data', created_by=self.creator)
        data_requirement = base.DataRequirementFactory(data=data,
                                                       created_by=self.creator,
                                                       requirement=requirement)
        provider = base.DataProviderFactory(name='Test provider',
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(
            data=data, created_by=self.creator, provider=provider)

        items = ([requirement, data_requirement] + list(metrics.values()))

        response = self.client.post(
            reverse('requirement:transition',
                    kwargs={
                        'source': 'draft',
                        'target': 'valid',
                        'pk': requirement.pk
                    }))
        self.assertEqual(response.status_code, 404)

        for item in items:
            getattr(item, 'refresh_from_db')()
            self.assertEqual((getattr(item, 'state')).name, 'draft')
예제 #5
0
 def test_provider_relation_edit(self):
     self.login_creator()
     data_object = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data_object,
         created_by=self.creator,
     )
     data = self._DATA
     data.pop("data")
     data.pop("provider")
     resp = self.client.post(
         reverse(
             "data:provider:edit",
             kwargs={
                 "group_pk": provider_relation.data.pk,
                 "pk": provider_relation.pk,
             },
         ),
         data,
     )
     self.assertEqual(resp.status_code, 302)
     data["data"] = provider_relation.data.pk
     data["provider"] = provider_relation.provider.pk
     self.check_single_object(models.DataProviderRelation, data)
예제 #6
0
    def test_user_records(self):
        self.login_creator()
        user_data = base.DataFactory(created_by=self.creator)
        user_provider = base.DataProviderFactory(created_by=self.creator)
        user_provider_rel = base.DataProviderRelationFactory(
            created_by=self.creator,
            data=user_data,
            provider=user_provider,
        )
        link_table_name = 'Links between Data and Data Providers'

        resp = self.client.get(
            reverse('user_records', kwargs={"pk": self.creator.id}))

        self.assertEqual(resp.status_code, 200)
        self.assertQuerysetEqual(resp.context['data_list'],
                                 ['<Data: test Data>'])
        self.assertEqual(resp.context['providers_list'][0].created_by,
                         self.creator)
        self.assertEqual(len(resp.context['provider_relations']), 1)
        self.assertEqual(len(resp.context['requirements_list']), 0)
        self.assertEqual(resp.context['provider_relations'][0].data, user_data)
        self.assertEqual(resp.context['provider_relations'][0].provider,
                         user_provider_rel.provider)
        self.assertIn(link_table_name, str(resp.content, 'utf-8'))
예제 #7
0
 def test_provider_relation_add_unique(self):
     base.DataProviderRelationFactory(data=self.data,
                                      provider=self.provider,
                                      created_by=self.creator)
     data = self._DATA
     resp = self.client.post(
         reverse('data:provider:add', kwargs={'group_pk': self.data.pk}),
         data)
     self.assertEqual(resp.status_code, 200)
     self.assertEqual(resp.context['form'].errors,
                      {'__all__': ['This relation already exists.']})
예제 #8
0
 def test_provider_relation_add_unique(self):
     base.DataProviderRelationFactory(
         data=self.data, provider=self.provider, created_by=self.creator
     )
     data = self._DATA
     resp = self.client.post(
         reverse("data:provider:add", kwargs={"group_pk": self.data.pk}), data
     )
     self.assertEqual(resp.status_code, 200)
     self.assertEqual(
         resp.context["form"].errors, {"__all__": ["This relation already exists."]}
     )
예제 #9
0
 def test_delete_data_provider_non_network_related_objects(self):
     self.login_creator()
     provider = base.DataProviderFactory(is_network=False,
                                         created_by=self.creator)
     data = base.DataFactory(created_by=self.creator)
     base.DataProviderDetailsFactory(data_provider=provider,
                                     created_by=self.creator)
     base.DataProviderRelationFactory(provider=provider,
                                      data=data,
                                      created_by=self.creator)
     self.client.post(
         reverse("provider:delete_non_network", kwargs={"pk": provider.pk}))
     self.check_objects_are_soft_deleted(models.DataProviderDetails)
     self.check_objects_are_soft_deleted(models.DataProviderRelation)
예제 #10
0
 def test_provider_relation_edit_not_auth(self):
     data = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data,
         created_by=self.creator,
     )
     self.check_user_redirect_all_methods(redirect_url=self.login_url,
                                          url=reverse(
                                              'data:provider:edit',
                                              kwargs={
                                                  'group_pk': data.pk,
                                                  'pk': provider_relation.pk
                                              }))
예제 #11
0
 def test_delete_provider_relation_teammate(self):
     data = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data,
         created_by=self.creator,
     )
     self.check_permission_for_teammate(
         method="GET",
         url=reverse(
             "data:provider:delete",
             kwargs={"group_pk": data.pk, "pk": provider_relation.pk},
         ),
     )
예제 #12
0
 def test_provider_relation_delete_not_auth(self):
     data = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data,
         created_by=self.creator,
     )
     self.check_user_redirect_all_methods(
         redirect_url=reverse("data:list"),
         url=reverse(
             "data:provider:delete",
             kwargs={"group_pk": data.pk, "pk": provider_relation.pk},
         ),
     )
예제 #13
0
 def test_provider_relation_delete_auth(self):
     data = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data,
         created_by=self.creator,
     )
     self.check_authenticated_user_redirect_all_methods(
         redirect_url=reverse('data:list'),
         url=reverse('data:provider:delete',
                     kwargs={
                         'group_pk': data.pk,
                         'pk': provider_relation.pk
                     }))
예제 #14
0
 def test_get_provider_relation_edit(self):
     self.login_creator()
     data_object = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data_object,
         created_by=self.creator,
     )
     resp = self.client.get(
         reverse('data:provider:edit',
                 kwargs={
                     'group_pk': provider_relation.data.pk,
                     'pk': provider_relation.pk
                 }))
     self.assertEqual(resp.status_code, 200)
예제 #15
0
 def test_delete_data_related_objects(self):
     self.login_creator()
     data = base.DataFactory(created_by=self.creator)
     metrics = base.RequirementFactory.create_metrics(self.creator)
     requirement = base.RequirementFactory(created_by=self.creator,
                                           **metrics)
     base.DataRequirementFactory(data=data,
                                 requirement=requirement,
                                 created_by=self.creator)
     data_provider = base.DataProviderFactory(created_by=self.creator)
     base.DataProviderRelationFactory(data=data,
                                      provider=data_provider,
                                      created_by=self.creator)
     self.client.post(reverse('data:delete', kwargs={'pk': data.pk}))
     self.check_objects_are_soft_deleted(models.DataRequirement)
     self.check_objects_are_soft_deleted(models.DataProviderRelation)
예제 #16
0
 def test_delete_provider_relation_teammate(self):
     data = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data,
         created_by=self.creator,
     )
     self.check_permission_for_teammate(method='GET',
                                        url=reverse('data:provider:delete',
                                                    kwargs={
                                                        'group_pk':
                                                        data.pk,
                                                        'pk':
                                                        provider_relation.pk
                                                    }))
예제 #17
0
 def test_provider_relation_delete(self):
     self.login_creator()
     data = {}
     data_object = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data_object,
         created_by=self.creator,
     )
     resp = self.client.post(
         reverse('data:provider:delete',
                 kwargs={
                     'group_pk': provider_relation.data.pk,
                     'pk': provider_relation.pk
                 }), data)
     self.assertEqual(resp.status_code, 302)
     self.check_single_object_deleted(models.DataProviderRelation)
예제 #18
0
    def test_transition(self):
        self.erase_logging_file()
        self.login_creator()
        data = base.DataFactory(name='Test data',
                                created_by=self.creator)
        provider = base.DataProviderFactory(name='Test provider',
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(data=data,
                                                         created_by=self.creator,
                                                         provider=provider)
        items = ([data, data_provider])
        for item in items:
            self.assertEqual((getattr(item, 'state')).name, 'draft')

        transitions = [
            {'source': 'draft', 'target': 'ready', 'user': self.creator},
            {'source': 'ready', 'target': 'draft', 'user': self.creator},
            {'source': 'draft', 'target': 'ready', 'user': self.creator},
            {'source': 'ready', 'target': 'changes', 'user': self.other_user},
            {'source': 'changes', 'target': 'draft', 'user': self.creator},
            {'source': 'draft', 'target': 'ready', 'user': self.creator},
            {'source': 'ready', 'target': 'valid', 'user': self.other_user},
            {'source': 'ready', 'target': 'valid', 'user': self.creator},
        ]

        for transition in transitions:
            for item in items:
                self.assertEqual((getattr(item, 'state')).name, transition['source'])
            self.client.force_login(transition['user'])
            response = self.client.post(
                reverse('data:transition',
                        kwargs={'source': transition['source'],
                                'target': transition['target'],
                                'pk': data.pk}))
            self.assertRedirects(response, reverse('data:detail',
                                                   kwargs={'pk': data.pk}))
            for item in items:
                getattr(item, 'refresh_from_db')()
                self.assertEqual((getattr(item, 'state')).name, transition['target'])
            if transition['target'] == 'valid':
               for item in items:
                   item.state = transition['source']
                   item.save()
        self.logging(check_username=False)
예제 #19
0
 def test_get_provider_relation_delete(self):
     self.login_creator()
     data_object = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data_object,
         created_by=self.creator,
     )
     resp = self.client.get(
         reverse(
             "data:provider:delete",
             kwargs={
                 "group_pk": provider_relation.data.pk,
                 "pk": provider_relation.pk,
             },
         )
     )
     self.assertEqual(resp.status_code, 200)
예제 #20
0
    def test_transition_with_draft_data(self):
        self.erase_logging_file()
        self.login_creator()
        data = base.DataFactory(name='Test data',
                                created_by=self.creator)
        provider = base.DataProviderFactory(name='Test provider',
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(data=data,
                                                         created_by=self.creator,
                                                         provider=provider)

        items = ([data, data_provider])
        for item in items:
            self.assertEqual((getattr(item, 'state')).name, 'draft')
        self.client.force_login(self.creator)
        response = self.client.get(
            reverse('data:transition',
                    kwargs={'source': 'draft',
                            'target': 'ready',
                            'pk': data.pk}))
        self.assertTrue(response.status_code, 200)
예제 #21
0
    def test_transition_inexistent_state(self):
        self.login_creator()
        data = base.DataFactory(name='Test data', created_by=self.creator)
        provider = base.DataProviderFactory(name='Test provider',
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(
            data=data, created_by=self.creator, provider=provider)
        items = ([data, data_provider])

        response = self.client.post(
            reverse('data:transition',
                    kwargs={
                        'source': 'draft',
                        'target': 'nosuchstate',
                        'pk': data.pk
                    }))
        self.assertEqual(response.status_code, 404)

        for item in items:
            getattr(item, 'refresh_from_db')()
            self.assertEqual((getattr(item, 'state')).name, 'draft')
예제 #22
0
 def test_provider_relation_edit(self):
     self.login_creator()
     data_object = base.DataFactory(created_by=self.creator)
     provider = base.DataProviderFactory(created_by=self.creator)
     provider_relation = base.DataProviderRelationFactory(
         provider=provider,
         data=data_object,
         created_by=self.creator,
     )
     data = self._DATA
     data.pop('data')
     data.pop('provider')
     resp = self.client.post(
         reverse('data:provider:edit',
                 kwargs={
                     'group_pk': provider_relation.data.pk,
                     'pk': provider_relation.pk
                 }), data)
     self.assertEqual(resp.status_code, 302)
     data['data'] = provider_relation.data.pk
     data['provider'] = provider_relation.provider.pk
     self.check_single_object(models.DataProviderRelation, data)
예제 #23
0
    def test_transition_with_draft_data(self):
        self.erase_logging_file()
        self.login_creator()
        data = base.DataFactory(name="Test data", created_by=self.creator)
        provider = base.DataProviderFactory(name="Test provider",
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(
            data=data, created_by=self.creator, provider=provider)

        items = [data, data_provider]
        for item in items:
            self.assertEqual((getattr(item, "state")).name, "draft")
        self.client.force_login(self.creator)
        response = self.client.get(
            reverse(
                "data:transition",
                kwargs={
                    "source": "draft",
                    "target": "ready",
                    "pk": data.pk
                },
            ))
        self.assertTrue(response.status_code, 200)
예제 #24
0
    def test_transition(self):
        self.erase_logging_file()
        self.login_creator()
        data = base.DataFactory(name="Test data", created_by=self.creator)
        provider = base.DataProviderFactory(name="Test provider",
                                            created_by=self.creator)
        data_provider = base.DataProviderRelationFactory(
            data=data, created_by=self.creator, provider=provider)
        items = [data, data_provider]
        for item in items:
            self.assertEqual((getattr(item, "state")).name, "draft")

        transitions = [
            {
                "source": "draft",
                "target": "ready",
                "user": self.creator
            },
            {
                "source": "ready",
                "target": "draft",
                "user": self.creator
            },
            {
                "source": "draft",
                "target": "ready",
                "user": self.creator
            },
            {
                "source": "ready",
                "target": "changes",
                "user": self.other_user
            },
            {
                "source": "changes",
                "target": "draft",
                "user": self.creator
            },
            {
                "source": "draft",
                "target": "ready",
                "user": self.creator
            },
            {
                "source": "ready",
                "target": "valid",
                "user": self.other_user
            },
            {
                "source": "ready",
                "target": "valid",
                "user": self.creator
            },
        ]

        for transition in transitions:
            for item in items:
                self.assertEqual((getattr(item, "state")).name,
                                 transition["source"])
            self.client.force_login(transition["user"])
            response = self.client.post(
                reverse(
                    "data:transition",
                    kwargs={
                        "source": transition["source"],
                        "target": transition["target"],
                        "pk": data.pk,
                    },
                ))
            self.assertRedirects(
                response, reverse("data:detail", kwargs={"pk": data.pk}))
            for item in items:
                getattr(item, "refresh_from_db")()
                self.assertEqual((getattr(item, "state")).name,
                                 transition["target"])
            if transition["target"] == "valid":
                for item in items:
                    item.state = transition["source"]
                    item.save()
        self.logging(check_username=False)
예제 #25
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)