2021-11-23 08:25:09 +00:00
|
|
|
import unittest
|
|
|
|
|
2022-02-07 17:11:43 +00:00
|
|
|
from tests.helpers import temporary_root
|
2023-04-28 15:11:14 +00:00
|
|
|
from tutor import config as tutor_config
|
2022-02-07 17:11:43 +00:00
|
|
|
|
|
|
|
from .base import TestCommandMixin
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
|
2022-02-07 17:11:43 +00:00
|
|
|
class ConfigTests(unittest.TestCase, TestCommandMixin):
|
2021-11-23 08:25:09 +00:00
|
|
|
def test_config_help(self) -> None:
|
2022-02-07 17:11:43 +00:00
|
|
|
result = self.invoke(["config", "--help"])
|
2021-11-23 08:25:09 +00:00
|
|
|
self.assertEqual(0, result.exit_code)
|
|
|
|
self.assertFalse(result.exception)
|
|
|
|
|
|
|
|
def test_config_save(self) -> None:
|
2022-02-07 17:11:43 +00:00
|
|
|
result = self.invoke(["config", "save"])
|
|
|
|
self.assertFalse(result.exception)
|
|
|
|
self.assertEqual(0, result.exit_code)
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
def test_config_save_interactive(self) -> None:
|
2022-02-07 17:11:43 +00:00
|
|
|
result = self.invoke(["config", "save", "-i"])
|
|
|
|
self.assertFalse(result.exception)
|
|
|
|
self.assertEqual(0, result.exit_code)
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
def test_config_save_skip_update(self) -> None:
|
2022-02-07 17:11:43 +00:00
|
|
|
result = self.invoke(["config", "save", "-e"])
|
|
|
|
self.assertFalse(result.exception)
|
|
|
|
self.assertEqual(0, result.exit_code)
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
def test_config_save_set_value(self) -> None:
|
|
|
|
with temporary_root() as root:
|
2022-02-07 17:11:43 +00:00
|
|
|
result1 = self.invoke_in_root(root, ["config", "save", "-s", "key=value"])
|
|
|
|
result2 = self.invoke_in_root(root, ["config", "printvalue", "key"])
|
|
|
|
self.assertFalse(result1.exception)
|
|
|
|
self.assertEqual(0, result1.exit_code)
|
|
|
|
self.assertIn("value", result2.output)
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
def test_config_save_unset_value(self) -> None:
|
|
|
|
with temporary_root() as root:
|
2022-02-07 17:11:43 +00:00
|
|
|
result1 = self.invoke_in_root(root, ["config", "save", "-U", "key"])
|
|
|
|
result2 = self.invoke_in_root(root, ["config", "printvalue", "key"])
|
|
|
|
self.assertFalse(result1.exception)
|
|
|
|
self.assertEqual(0, result1.exit_code)
|
|
|
|
self.assertEqual(1, result2.exit_code)
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
def test_config_printroot(self) -> None:
|
|
|
|
with temporary_root() as root:
|
2022-02-07 17:11:43 +00:00
|
|
|
result = self.invoke_in_root(root, ["config", "printroot"])
|
|
|
|
self.assertFalse(result.exception)
|
|
|
|
self.assertEqual(0, result.exit_code)
|
|
|
|
self.assertIn(root, result.output)
|
2021-11-23 08:25:09 +00:00
|
|
|
|
|
|
|
def test_config_printvalue(self) -> None:
|
|
|
|
with temporary_root() as root:
|
2022-02-07 17:11:43 +00:00
|
|
|
self.invoke_in_root(root, ["config", "save"])
|
|
|
|
result = self.invoke_in_root(
|
|
|
|
root, ["config", "printvalue", "MYSQL_ROOT_PASSWORD"]
|
2021-11-23 08:25:09 +00:00
|
|
|
)
|
2022-02-07 17:11:43 +00:00
|
|
|
self.assertFalse(result.exception)
|
|
|
|
self.assertEqual(0, result.exit_code)
|
|
|
|
self.assertTrue(result.output)
|
2023-02-08 04:35:25 +00:00
|
|
|
|
2023-04-27 10:20:50 +00:00
|
|
|
def test_config_append(self) -> None:
|
|
|
|
with temporary_root() as root:
|
|
|
|
self.invoke_in_root(
|
|
|
|
root, ["config", "save", "--append=TEST=value"], catch_exceptions=False
|
|
|
|
)
|
|
|
|
config1 = tutor_config.load(root)
|
|
|
|
self.invoke_in_root(
|
|
|
|
root, ["config", "save", "--append=TEST=value"], catch_exceptions=False
|
|
|
|
)
|
|
|
|
config2 = tutor_config.load(root)
|
|
|
|
self.invoke_in_root(
|
|
|
|
root, ["config", "save", "--remove=TEST=value"], catch_exceptions=False
|
|
|
|
)
|
|
|
|
config3 = tutor_config.load(root)
|
|
|
|
# Value is appended
|
|
|
|
self.assertEqual(["value"], config1["TEST"])
|
|
|
|
# Value is not appended a second time
|
|
|
|
self.assertEqual(["value"], config2["TEST"])
|
|
|
|
# Value is removed
|
|
|
|
self.assertEqual([], config3["TEST"])
|
|
|
|
|
|
|
|
def test_config_append_with_existing_default(self) -> None:
|
|
|
|
with temporary_root() as root:
|
|
|
|
self.invoke_in_root(
|
|
|
|
root,
|
|
|
|
[
|
|
|
|
"config",
|
|
|
|
"save",
|
|
|
|
"--append=OPENEDX_EXTRA_PIP_REQUIREMENTS=my-package==1.0.0",
|
|
|
|
],
|
|
|
|
catch_exceptions=False,
|
|
|
|
)
|
|
|
|
config = tutor_config.load(root)
|
|
|
|
assert isinstance(config["OPENEDX_EXTRA_PIP_REQUIREMENTS"], list)
|
|
|
|
self.assertEqual(2, len(config["OPENEDX_EXTRA_PIP_REQUIREMENTS"]))
|
|
|
|
self.assertEqual(
|
|
|
|
"my-package==1.0.0", config["OPENEDX_EXTRA_PIP_REQUIREMENTS"][1]
|
|
|
|
)
|
|
|
|
|
2023-02-08 04:35:25 +00:00
|
|
|
|
|
|
|
class PatchesTests(unittest.TestCase, TestCommandMixin):
|
|
|
|
def test_config_patches_list(self) -> None:
|
|
|
|
with temporary_root() as root:
|
|
|
|
self.invoke_in_root(root, ["config", "save"])
|
|
|
|
result = self.invoke_in_root(root, ["config", "patches", "list"])
|
|
|
|
self.assertFalse(result.exception)
|
|
|
|
self.assertEqual(0, result.exit_code)
|