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))