Exemple #1
0
 def test_get(self):
     """
     GET returns a list of Disaggregations.
     """
     num_instances = 3
     DisaggregationFactory.create_batch(size=num_instances)
     response = self.forced_auth_req('get', self.url)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), num_instances)
Exemple #2
0
 def test_create_update_delete_value_single_call(self):
     """
     Just test that creation/update/deletion all play nice together.
     """
     disaggregation = DisaggregationFactory()
     v1 = DisaggregationValueFactory(disaggregation=disaggregation)
     v2 = DisaggregationValueFactory(disaggregation=disaggregation)
     DisaggregationValueFactory(disaggregation=disaggregation)
     data = DisaggregationSerializer(instance=disaggregation).data
     # modify the first one
     data['disaggregation_values'][0]['value'] = 'updated'
     # remove the second one
     data['disaggregation_values'] = data['disaggregation_values'][:1]
     # add a new one
     data['disaggregation_values'].append({
         "value": "a new value",
         "active": False
     })
     response = self.forced_auth_req('put',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data=data)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     disaggregation = Disaggregation.objects.get(pk=disaggregation.pk)
     self.assertEqual(2, disaggregation.disaggregation_values.count())
     self.assertEqual(
         'updated',
         disaggregation.disaggregation_values.get(pk=v1.pk).value)
     self.assertFalse(
         disaggregation.disaggregation_values.filter(pk=v2.pk).exists())
     self.assertEqual(
         'a new value',
         disaggregation.disaggregation_values.exclude(pk=v1.pk)[0].value)
Exemple #3
0
 def test_patch_non_pme_user(self):
     disaggregation = DisaggregationFactory()
     new_name = 'patched via API'
     response = self.forced_auth_req('patch',
                                     self._get_url(disaggregation),
                                     data={'name': new_name})
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
Exemple #4
0
 def test_delete(self):
     """
     Test deleting a disaggregation is not allowed
     """
     disaggregation = DisaggregationFactory()
     response = self.forced_auth_req('delete',
                                     self._get_url(disaggregation),
                                     user=self.pme_user)
     self.assertEqual(response.status_code,
                      status.HTTP_405_METHOD_NOT_ALLOWED)
     self.assertTrue(
         Disaggregation.objects.filter(pk=disaggregation.pk).exists())
Exemple #5
0
 def test_get(self):
     """
     Test retrieving a single disaggregation
     """
     disaggregation = DisaggregationFactory()
     num_values = 3
     for i in range(num_values):
         DisaggregationValueFactory(disaggregation=disaggregation)
     response = self.forced_auth_req('get', self._get_url(disaggregation))
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(disaggregation.name, response.data['name'])
     self.assertEqual(num_values, len(response.data['disaggregation_values']))
Exemple #6
0
 def test_patch_metadata(self):
     """
     Test patching a disaggregation's metadata
     """
     disaggregation = DisaggregationFactory()
     new_name = 'patched via API'
     response = self.forced_auth_req('patch',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data={'name': new_name})
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     disaggregation = Disaggregation.objects.get(pk=disaggregation.pk)
     self.assertEqual(new_name, disaggregation.name)
Exemple #7
0
 def test_removing_disaggregation_deletes_it(self):
     disaggregation = DisaggregationFactory()
     value = DisaggregationValueFactory(disaggregation=disaggregation)
     data = DisaggregationSerializer(instance=disaggregation).data
     data['disaggregation_values'] = []
     response = self.forced_auth_req('put',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data=data)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     disaggregation = Disaggregation.objects.get(pk=disaggregation.pk)
     self.assertEqual(0, disaggregation.disaggregation_values.count())
     self.assertFalse(
         DisaggregationValue.objects.filter(pk=value.pk).exists())
Exemple #8
0
 def test_disallow_modifying_unrelated_disaggregation_values(self):
     disaggregation = DisaggregationFactory()
     value = DisaggregationValueFactory()
     data = DisaggregationSerializer(instance=disaggregation).data
     data['disaggregation_values'].append({
         "id": value.pk,
         "value": "not allowed",
     })
     response = self.forced_auth_req('put',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data=data)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     # also try with patch
     response = self.forced_auth_req('patch',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data=data)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Exemple #9
0
 def test_update_values(self):
     """
     Test updating a disaggregation's values
     """
     disaggregation = DisaggregationFactory()
     value = DisaggregationValueFactory(disaggregation=disaggregation)
     new_value = 'updated value'
     data = DisaggregationSerializer(instance=disaggregation).data
     data['disaggregation_values'][0]['value'] = new_value
     response = self.forced_auth_req('put',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data=data)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     disaggregation = Disaggregation.objects.get(pk=disaggregation.pk)
     self.assertEqual(1, disaggregation.disaggregation_values.count())
     updated_value = disaggregation.disaggregation_values.all()[0]
     self.assertEqual(value.pk, updated_value.pk)
     self.assertEqual(new_value, updated_value.value)
Exemple #10
0
 def test_create_values(self):
     """
     Test creating new disaggregation values
     """
     disaggregation = DisaggregationFactory()
     value = DisaggregationValueFactory(disaggregation=disaggregation)
     data = DisaggregationSerializer(instance=disaggregation).data
     data['disaggregation_values'].append({
         "value": "a new value",
         "active": False
     })
     response = self.forced_auth_req('put',
                                     self._get_url(disaggregation),
                                     user=self.pme_user,
                                     data=data)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     disaggregation = Disaggregation.objects.get(pk=disaggregation.pk)
     self.assertEqual(2, disaggregation.disaggregation_values.count())
     new_value = disaggregation.disaggregation_values.exclude(
         pk=value.pk)[0]
     self.assertEqual('a new value', new_value.value)
Exemple #11
0
 def setUpTestData(cls):
     cls.disaggregation = DisaggregationFactory()