Bin
2025-12-17 05a69820e0c402b0b33c063d3b922f0a0571cbbb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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,
        )