def test_transition_with_draft_data(self): self.erase_logging_file() 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, update_frequency=None) data_requirement = base.DataRequirementFactory(data=data, created_by=self.creator, requirement=requirement) items = ([requirement, data_requirement] + list(metrics.values())) for item in items: self.assertEqual((getattr(item, 'state')).name, 'draft') self.client.force_login(self.creator) response = self.client.get( reverse('requirement:transition', kwargs={ 'source': 'draft', 'target': 'ready', 'pk': requirement.pk })) self.assertTrue(response.status_code, 200)
def test_transition_with_draft_data(self): self.erase_logging_file() 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, update_frequency=None) data_requirement = base.DataRequirementFactory(data=data, created_by=self.creator, requirement=requirement) items = [requirement, data_requirement] for item in items: self.assertEqual((getattr(item, "state")).name, "draft") self.client.force_login(self.creator) response = self.client.get( reverse( "requirement:transition", kwargs={ "source": "draft", "target": "ready", "pk": requirement.pk }, )) self.assertTrue(response.status_code, 200)
def test_transition_changes_requested_feedback(self): self.erase_logging_file() self.login_creator() metrics = base.RequirementFactory.create_metrics(self.creator, state="ready") requirement = base.RequirementFactory(name="Test requirement", state="ready", created_by=self.creator, **metrics) data = base.DataFactory(name="Test data", created_by=self.creator) data_requirement = base.DataRequirementFactory(data=data, state="ready", created_by=self.creator, requirement=requirement) items = [requirement, data_requirement] for item in items: self.assertEqual((getattr(item, "state")).name, "ready") self.client.force_login(self.other_user) self.client.post( reverse( "requirement:transition", kwargs={ "source": "ready", "target": "changes", "pk": requirement.pk }, ), {"feedback": "this is a feedback test"}, ) getattr(requirement, "refresh_from_db")() self.assertEqual(requirement.state, "changes") self.assertEqual(requirement.feedback, "this is a feedback test")
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")
def test_data_requirement_edit(self): self.login_creator() data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) data = self._DATA data.pop("data") data.pop("requirement") resp = self.client.post( reverse( "requirement:data:edit", kwargs={ "requirement_pk": data_requirement.requirement.pk, "pk": data_requirement.pk, }, ), data, ) self.assertEqual(resp.status_code, 302) data["data"] = data_requirement.data.pk data["requirement"] = data_requirement.requirement.pk self.check_single_object(models.DataRequirement, data)
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')
def test_data_requirement_add_unique(self): base.DataRequirementFactory(data=self.data, requirement=self.requirement, created_by=self.creator) data = self._DATA resp = self.client.post( reverse('requirement:data:add', kwargs={'requirement_pk': self.requirement.pk}), data) self.assertEqual(resp.status_code, 200) self.assertEqual(resp.context['form'].errors, {'__all__': ['This relation already exists.']})
def test_data_requirement_add_unique(self): base.DataRequirementFactory(data=self.data, requirement=self.requirement, created_by=self.creator) data = self._DATA resp = self.client.post( reverse("requirement:data:add", kwargs={"requirement_pk": self.requirement.pk}), data, ) self.assertEqual(resp.status_code, 200) self.assertEqual(resp.context["form"].errors, {"__all__": ["This relation already exists."]})
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)
def test_delete_requirement_related_objects(self): self.login_creator() metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(name='Test requirement', created_by=self.creator, **metrics) base.ProductRequirementFactory(requirement=requirement, created_by=self.creator) data = base.DataFactory(created_by=self.creator) base.DataRequirementFactory(requirement=requirement, data=data, created_by=self.creator) self.client.post( reverse('requirement:delete', kwargs={'pk': requirement.pk})) self.check_objects_are_soft_deleted(models.ProductRequirement) self.check_objects_are_soft_deleted(models.DataRequirement)
def test_data_requirement_delete_auth_from_data_requirement(self): data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) self.check_authenticated_user_redirect_all_methods( redirect_url=reverse('requirement:list'), url=reverse('requirement:data:delete', kwargs={ 'requirement_pk': data_requirement.pk, 'pk': data_requirement.pk }))
def test_get_data_requirement_edit(self): self.login_creator() data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) resp = self.client.get( reverse('requirement:data:edit', kwargs={ 'requirement_pk': data_requirement.requirement.pk, 'pk': data_requirement.pk })) self.assertEqual(resp.status_code, 200)
def test_data_requirement_edit_teammate_from_data_requirement(self): data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) self.check_permission_for_teammate(method='GET', url=reverse('requirement:data:edit', kwargs={ 'requirement_pk': data_requirement.pk, 'pk': data_requirement.pk }))
def test_data_requirement_delete(self): self.login_creator() data = {} data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) resp = self.client.post( reverse('requirement:data:delete', kwargs={ 'requirement_pk': data_requirement.requirement.pk, 'pk': data_requirement.pk }), data) self.assertEqual(resp.status_code, 302) self.check_single_object_deleted(models.DataRequirement)
def test_data_requirement_delete_teammate_from_data_requirement(self): data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) self.check_permission_for_teammate( method="GET", url=reverse( "requirement:data:delete", kwargs={ "requirement_pk": data_requirement.pk, "pk": data_requirement.pk, }, ), )
def test_data_requirement_delete_not_auth_from_data_requirement(self): data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) self.check_user_redirect_all_methods( redirect_url=reverse("requirement:list"), url=reverse( "requirement:data:delete", kwargs={ "requirement_pk": data_requirement.pk, "pk": data_requirement.pk, }, ), )
def test_get_data_requirement_delete(self): self.login_creator() data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) resp = self.client.get( reverse( "requirement:data:delete", kwargs={ "requirement_pk": data_requirement.requirement.pk, "pk": data_requirement.pk, }, )) self.assertEqual(resp.status_code, 200)
def test_data_requirement_edit(self): self.login_creator() data_object = base.DataFactory(created_by=self.creator) metrics = base.RequirementFactory.create_metrics(self.creator) requirement = base.RequirementFactory(created_by=self.creator, **metrics) data_requirement = base.DataRequirementFactory( data=data_object, requirement=requirement, created_by=self.creator, ) data = self._DATA data.pop('data') data.pop('requirement') resp = self.client.post( reverse('requirement:data:edit', kwargs={ 'requirement_pk': data_requirement.requirement.pk, 'pk': data_requirement.pk }), data) self.assertEqual(resp.status_code, 302) data['data'] = data_requirement.data.pk data['requirement'] = data_requirement.requirement.pk self.check_single_object(models.DataRequirement, data)
def test_transition(self): self.erase_logging_file() 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) items = [requirement, data_requirement] 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( "requirement:transition", kwargs={ "source": transition["source"], "target": transition["target"], "pk": requirement.pk, }, )) self.assertRedirects( response, reverse("requirement:detail", kwargs={"pk": requirement.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)
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)
def test_transition(self): self.erase_logging_file() 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) items = ([requirement, data_requirement] + list(metrics.values())) 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('requirement:transition', kwargs={ 'source': transition['source'], 'target': transition['target'], 'pk': requirement.pk })) self.assertRedirects( response, reverse('requirement:detail', kwargs={'pk': requirement.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)
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)