required=False,
)
+ storage_path = serializers.PrimaryKeyRelatedField(
+ queryset=StoragePath.objects.all(),
+ label="Storage path",
+ allow_null=True,
+ write_only=True,
+ required=False,
+ )
+
tags = serializers.PrimaryKeyRelatedField(
many=True,
queryset=Tag.objects.all(),
else:
return None
+ def validate_storage_path(self, storage_path):
+ if storage_path:
+ return storage_path.id
+ else:
+ return None
+
def validate_tags(self, tags):
if tags:
return [tag.id for tag in tags]
) as f:
response = self.client.post(
"/api/documents/post_document/",
- {"document": f, "title": "", "correspondent": "", "document_type": ""},
+ {
+ "document": f,
+ "title": "",
+ "correspondent": "",
+ "document_type": "",
+ "storage_path": "",
+ },
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIsNone(overrides.title)
self.assertIsNone(overrides.correspondent_id)
self.assertIsNone(overrides.document_type_id)
+ self.assertIsNone(overrides.storage_path_id)
self.assertIsNone(overrides.tag_ids)
def test_upload_invalid_form(self):
self.consume_file_mock.assert_not_called()
+ def test_upload_with_storage_path(self):
+ self.consume_file_mock.return_value = celery.result.AsyncResult(
+ id=str(uuid.uuid4()),
+ )
+
+ sp = StoragePath.objects.create(name="invoices")
+ with open(
+ os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"),
+ "rb",
+ ) as f:
+ response = self.client.post(
+ "/api/documents/post_document/",
+ {"document": f, "storage_path": sp.id},
+ )
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ self.consume_file_mock.assert_called_once()
+
+ _, overrides = self.get_last_consume_delay_call_args()
+
+ self.assertEqual(overrides.storage_path_id, sp.id)
+ self.assertIsNone(overrides.correspondent_id)
+ self.assertIsNone(overrides.title)
+ self.assertIsNone(overrides.tag_ids)
+
+ def test_upload_with_invalid_storage_path(self):
+ self.consume_file_mock.return_value = celery.result.AsyncResult(
+ id=str(uuid.uuid4()),
+ )
+
+ with open(
+ os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"),
+ "rb",
+ ) as f:
+ response = self.client.post(
+ "/api/documents/post_document/",
+ {"document": f, "storage_path": 34578},
+ )
+ self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+ self.consume_file_mock.assert_not_called()
+
def test_upload_with_tags(self):
self.consume_file_mock.return_value = celery.result.AsyncResult(
id=str(uuid.uuid4()),
doc_name, doc_data = serializer.validated_data.get("document")
correspondent_id = serializer.validated_data.get("correspondent")
document_type_id = serializer.validated_data.get("document_type")
+ storage_path_id = serializer.validated_data.get("storage_path")
tag_ids = serializer.validated_data.get("tags")
title = serializer.validated_data.get("title")
created = serializer.validated_data.get("created")
title=title,
correspondent_id=correspondent_id,
document_type_id=document_type_id,
+ storage_path_id=storage_path_id,
tag_ids=tag_ids,
created=created,
asn=archive_serial_number,