|
1 | 1 | import os
|
2 |
| -from django.conf import settings |
3 | 2 | import re
|
4 | 3 | import textwrap
|
5 | 4 | from collections import OrderedDict
|
6 | 5 | from unittest.mock import DEFAULT, patch
|
7 | 6 |
|
8 | 7 | import pytest
|
| 8 | +from django.conf import settings |
9 | 9 | from pytest import raises
|
10 | 10 |
|
11 | 11 | from readthedocs.config import (
|
|
33 | 33 | )
|
34 | 34 | from readthedocs.config.models import (
|
35 | 35 | Build,
|
| 36 | + BuildJobs, |
36 | 37 | BuildWithTools,
|
37 | 38 | Conda,
|
38 | 39 | PythonInstall,
|
@@ -1012,6 +1013,87 @@ def test_new_build_config_conflict_with_build_python_version(self):
|
1012 | 1013 | build.validate()
|
1013 | 1014 | assert excinfo.value.key == 'python.version'
|
1014 | 1015 |
|
| 1016 | + @pytest.mark.parametrize("value", ["", None, "pre_invalid"]) |
| 1017 | + def test_jobs_build_config_invalid_jobs(self, value): |
| 1018 | + build = self.get_build_config( |
| 1019 | + { |
| 1020 | + "build": { |
| 1021 | + "os": "ubuntu-20.04", |
| 1022 | + "tools": {"python": "3.8"}, |
| 1023 | + "jobs": {value: ["echo 1234", "git fetch --unshallow"]}, |
| 1024 | + }, |
| 1025 | + }, |
| 1026 | + ) |
| 1027 | + with raises(InvalidConfig) as excinfo: |
| 1028 | + build.validate() |
| 1029 | + assert excinfo.value.key == "build.jobs" |
| 1030 | + |
| 1031 | + @pytest.mark.parametrize("value", ["", None, "echo 123", 42]) |
| 1032 | + def test_jobs_build_config_invalid_job_commands(self, value): |
| 1033 | + build = self.get_build_config( |
| 1034 | + { |
| 1035 | + "build": { |
| 1036 | + "os": "ubuntu-20.04", |
| 1037 | + "tools": {"python": "3.8"}, |
| 1038 | + "jobs": { |
| 1039 | + "pre_install": value, |
| 1040 | + }, |
| 1041 | + }, |
| 1042 | + }, |
| 1043 | + ) |
| 1044 | + with raises(InvalidConfig) as excinfo: |
| 1045 | + build.validate() |
| 1046 | + assert excinfo.value.key == "build.jobs.pre_install" |
| 1047 | + |
| 1048 | + def test_jobs_build_config(self): |
| 1049 | + build = self.get_build_config( |
| 1050 | + { |
| 1051 | + "build": { |
| 1052 | + "os": "ubuntu-20.04", |
| 1053 | + "tools": {"python": "3.8"}, |
| 1054 | + "jobs": { |
| 1055 | + "pre_checkout": ["echo pre_checkout"], |
| 1056 | + "post_checkout": ["echo post_checkout"], |
| 1057 | + "pre_system_dependencies": ["echo pre_system_dependencies"], |
| 1058 | + "post_system_dependencies": ["echo post_system_dependencies"], |
| 1059 | + "pre_create_environment": ["echo pre_create_environment"], |
| 1060 | + "post_create_environment": ["echo post_create_environment"], |
| 1061 | + "pre_install": ["echo pre_install", "echo `date`"], |
| 1062 | + "post_install": ["echo post_install"], |
| 1063 | + "pre_build": [ |
| 1064 | + "echo pre_build", |
| 1065 | + 'sed -i -e "s|{VERSION}|${READTHEDOCS_VERSION_NAME}|g"', |
| 1066 | + ], |
| 1067 | + "post_build": ["echo post_build"], |
| 1068 | + }, |
| 1069 | + }, |
| 1070 | + }, |
| 1071 | + ) |
| 1072 | + build.validate() |
| 1073 | + assert isinstance(build.build, BuildWithTools) |
| 1074 | + assert isinstance(build.build.jobs, BuildJobs) |
| 1075 | + assert build.build.jobs.pre_checkout == ["echo pre_checkout"] |
| 1076 | + assert build.build.jobs.post_checkout == ["echo post_checkout"] |
| 1077 | + assert build.build.jobs.pre_system_dependencies == [ |
| 1078 | + "echo pre_system_dependencies" |
| 1079 | + ] |
| 1080 | + assert build.build.jobs.post_system_dependencies == [ |
| 1081 | + "echo post_system_dependencies" |
| 1082 | + ] |
| 1083 | + assert build.build.jobs.pre_create_environment == [ |
| 1084 | + "echo pre_create_environment" |
| 1085 | + ] |
| 1086 | + assert build.build.jobs.post_create_environment == [ |
| 1087 | + "echo post_create_environment" |
| 1088 | + ] |
| 1089 | + assert build.build.jobs.pre_install == ["echo pre_install", "echo `date`"] |
| 1090 | + assert build.build.jobs.post_install == ["echo post_install"] |
| 1091 | + assert build.build.jobs.pre_build == [ |
| 1092 | + "echo pre_build", |
| 1093 | + 'sed -i -e "s|{VERSION}|${READTHEDOCS_VERSION_NAME}|g"', |
| 1094 | + ] |
| 1095 | + assert build.build.jobs.post_build == ["echo post_build"] |
| 1096 | + |
1015 | 1097 | @pytest.mark.parametrize(
|
1016 | 1098 | 'value',
|
1017 | 1099 | [
|
@@ -2297,6 +2379,18 @@ def test_as_dict_new_build_config(self, tmpdir):
|
2297 | 2379 | 'full_version': settings.RTD_DOCKER_BUILD_SETTINGS['tools']['nodejs']['16'],
|
2298 | 2380 | },
|
2299 | 2381 | },
|
| 2382 | + "jobs": { |
| 2383 | + "pre_checkout": [], |
| 2384 | + "post_checkout": [], |
| 2385 | + "pre_system_dependencies": [], |
| 2386 | + "post_system_dependencies": [], |
| 2387 | + "pre_create_environment": [], |
| 2388 | + "post_create_environment": [], |
| 2389 | + "pre_install": [], |
| 2390 | + "post_install": [], |
| 2391 | + "pre_build": [], |
| 2392 | + "post_build": [], |
| 2393 | + }, |
2300 | 2394 | 'apt_packages': [],
|
2301 | 2395 | },
|
2302 | 2396 | 'conda': None,
|
|
0 commit comments