zhongrj
2025-11-25 b89962006164a462404b79a738bee8cbb6d7fe7e
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
"""
This is not a real test file
 
It generates mock models for use in UI testing (via Jest)
and places them in <root>/build/tests/mocks
 
It will only run when called explicitly via:
    python manage.py test app.tests.test_generate_ui_mocks
"""
import os
import sys
 
from shutil import rmtree
 
import logging
 
from django.contrib.auth.models import User
from rest_framework.renderers import JSONRenderer
 
from app.api.projects import ProjectSerializer
from app.api.tasks import TaskSerializer
from app.models import Project
from app.models import Task
from webodm import settings
from .classes import BootTestCase
from app.models import Preset
from app.api.presets import PresetSerializer
 
 
logger = logging.getLogger('app.logger')
BUILD_MOCKS_PATH = os.path.join(settings.BASE_DIR, "build", "mocks")
 
 
def write_mock(dst_path, serializer):
    with open(os.path.join(BUILD_MOCKS_PATH, dst_path), "w") as f:
        f.write(JSONRenderer().render(serializer.data).decode("utf-8"))
    logger.info("Written {}".format(dst_path))
 
class TestGenerateUiMocks(BootTestCase):
    def setUp(self):
        if os.path.exists(BUILD_MOCKS_PATH):
            logger.info("Existing mocks path exists, removing it...")
            rmtree(BUILD_MOCKS_PATH)
 
        os.mkdir(BUILD_MOCKS_PATH)
        logger.info("Created {}".format(BUILD_MOCKS_PATH))
 
    def tearDown(self):
        pass
 
    def test_mocks(self):
        write_mock("preset.json", PresetSerializer(Preset.objects.first()))
 
        project = Project.objects.create(
            owner=User.objects.get(username="testsuperuser"),
            name="mock project"
        )
 
        write_mock("project.json", ProjectSerializer(project))
        write_mock("task.json", TaskSerializer(Task.objects.create(name="mock task", project=project)))
 
# Do not generate mocks during normal testing
GENERATE_MOCKS = len(sys.argv) >= 3 and \
            sys.argv[1:2] == ['test'] and\
            sys.argv[2:3] == ['app.tests.' + (os.path.splitext(os.path.basename(__file__))[0])]
 
if not GENERATE_MOCKS:
    del TestGenerateUiMocks