from unittest.mock import ANY, patch
|
|
from data_export.api import async_convert
|
from data_export.models import ConvertedFormat, Export
|
from projects.tests.factories import ProjectFactory
|
from rest_framework.test import APITestCase
|
|
|
@patch('data_export.api.start_job_async_or_sync')
|
class TestExportConvertAPI(APITestCase):
|
@classmethod
|
def setUpTestData(cls):
|
cls.project = ProjectFactory()
|
cls.user = cls.project.created_by
|
cls.export = Export.objects.create(project=cls.project)
|
|
def test_convert_export(self, mock_start_job_async_or_sync):
|
self.client.force_authenticate(user=self.user)
|
|
assert ConvertedFormat.objects.count() == 0
|
|
response = self.client.post(
|
f'/api/projects/{self.project.id}/exports/{self.export.id}/convert',
|
{'export_type': 'CSV'},
|
)
|
assert response.status_code == 200
|
cf = ConvertedFormat.objects.get(export=self.export, export_type='CSV', status=ConvertedFormat.Status.CREATED)
|
|
mock_start_job_async_or_sync.assert_called_once_with(
|
async_convert,
|
cf.id,
|
'CSV',
|
self.project,
|
ANY,
|
download_resources=False,
|
on_failure=ANY,
|
)
|
|
def test_convert_export_already_started(self, mock_start_job_async_or_sync):
|
self.client.force_authenticate(user=self.user)
|
|
ConvertedFormat.objects.create(export=self.export, export_type='CSV', status=ConvertedFormat.Status.CREATED)
|
|
response = self.client.post(
|
f'/api/projects/{self.project.id}/exports/{self.export.id}/convert',
|
{'export_type': 'CSV'},
|
)
|
assert response.status_code == 400
|
assert response.json()['validation_errors']['non_field_errors'] == ['Conversion to CSV already started']
|
mock_start_job_async_or_sync.assert_not_called()
|
|
def test_convert_export_previous_failed(self, mock_start_job_async_or_sync):
|
self.client.force_authenticate(user=self.user)
|
|
ConvertedFormat.objects.create(export=self.export, export_type='CSV', status=ConvertedFormat.Status.FAILED)
|
|
response = self.client.post(
|
f'/api/projects/{self.project.id}/exports/{self.export.id}/convert',
|
{'export_type': 'CSV'},
|
)
|
assert response.status_code == 200
|
mock_start_job_async_or_sync.assert_called_once_with(
|
async_convert,
|
ANY,
|
'CSV',
|
self.project,
|
ANY,
|
download_resources=False,
|
on_failure=ANY,
|
)
|