def test_update_label_wrong_params(self):
     label_data = {
         'label_meta': self.label_meta,
         'shape': self.shape,
         'class_id': 'eye',
         'surface': 'BOL'
     }
     sample_serializer = SampleSerializer(data={
         'label': label_data,
         'image_name': self.image_name
     })
     sample_serializer.is_valid()
     sample = sample_serializer.save()
     label_data.update({'class_id': None, 'surface': False})
     resp = self.client.put(
         f'/api/label/{sample.label.id}/',
         data=encode_multipart('BoUnDaRyStRiNg',
                               {'label': json.dumps(label_data)}),
         content_type='multipart/form-data; boundary=BoUnDaRyStRiNg')
     label_data.pop('label_meta')
     label_data.pop('shape')
     label_data.update({'id': DummyValue()})
     self.assertEqual(resp.status_code, 400)
     expected_data = {
         'class_id': ['This field may not be null.'],
         'surface': ['Not a valid string.']
     }
     self.assertEqual(expected_data, json.loads(resp.content))
 def test_create_sample_with_label(self):
     label = {
         'label_meta': self.label_meta,
         'shape': self.shape,
         'class_id': 'tooth',
         'surface': 'BOL'
     }
     with open(f'samples/test_data/{self.image_name}', 'rb') as image:
         resp = self.client.post('/api/sample/',
                                 data={
                                     'image': image,
                                     'label': json.dumps(label)
                                 })
     self.assertEqual(resp.status_code, 200)
     self.label_meta.update({'id': DummyValue()})
     self.shape.update({'id': DummyValue()})
     label.update({'id': DummyValue()})
     serialized_sample = {
         'id': DummyValue(),
         'label': label,
         'image_name': self.image_name
     }
     sample = Sample.objects.all()[0]
     self.assertEqual(
         serialized_sample,
         self.__ordered_dict_to_dict(dict(SampleSerializer(sample).data)))
 def post(self, request, *args, **kwargs):
     image = request.data.get('image')
     if image is None:
         return Response({'image': ['Must not be empty.']},
                         status=status.HTTP_400_BAD_REQUEST)
     data = {'image_name': image.name}
     label = request.data.get('label')
     if label:
         data.update({'label': json.loads(label)})
     sample_serializer = SampleSerializer(data=data)
     if not sample_serializer.is_valid():
         return Response(sample_serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
     with transaction.atomic():
         sample = sample_serializer.save()
         default_storage.save(name=image.name, content=image)
         return Response(sample.id, content_type='application/json')
 def test_get_label(self):
     label_data = {
         'label_meta': self.label_meta,
         'shape': self.shape,
         'class_id': 'tooth',
         'surface': 'BOL'
     }
     sample_serializer = SampleSerializer(data={
         'label': label_data,
         'image_name': self.image_name
     })
     sample_serializer.is_valid()
     sample = sample_serializer.save()
     resp = self.client.get(f'/api/label/{sample.label.id}/')
     self.assertEqual(resp.status_code, 200)
     label_data.update({'id': DummyValue()})
     label_data.pop('label_meta')
     label_data.pop('shape')
     self.assertEqual(label_data, json.loads(resp.content))
 def test_create_sample_without_label(self):
     with open(f'samples/test_data/{self.image_name}', 'rb') as image:
         resp = self.client.post('/api/sample/', data={'image': image})
     self.assertEqual(resp.status_code, 200)
     sample = Sample.objects.all()[0]
     serialized_sample = {
         'id': DummyValue(),
         'label': None,
         'image_name': self.image_name
     }
     self.assertEqual(serialized_sample,
                      dict(SampleSerializer(sample).data))
 def test_update_label(self):
     label_data = {
         'label_meta': self.label_meta,
         'shape': self.shape,
         'class_id': 'eye',
         'surface': 'BOL'
     }
     sample_serializer = SampleSerializer(data={
         'label': label_data,
         'image_name': self.image_name
     })
     sample_serializer.is_valid()
     sample = sample_serializer.save()
     label_data.update({'surface': 'BO'})
     resp = self.client.put(
         f'/api/label/{sample.label.id}/',
         data=encode_multipart('BoUnDaRyStRiNg',
                               {'label': json.dumps(label_data)}),
         content_type='multipart/form-data; boundary=BoUnDaRyStRiNg')
     label_data.pop('label_meta')
     label_data.pop('shape')
     label_data.update({'id': DummyValue()})
     self.assertEqual(resp.status_code, 200)
     self.assertEqual(label_data, json.loads(resp.content))