disko/tests/disko_lib/eval_config/test_eval_config.py
2024-11-27 23:18:54 +01:00

66 lines
2.8 KiB
Python

import json
from pathlib import Path
from typing import cast
from disko_lib.eval_config import eval_config_file_as_json, validate_config
from disko_lib.messages.msgs import err_missing_arguments, err_too_many_arguments
from disko_lib.result import DiskoError, DiskoSuccess
from disko_lib.json_types import JsonDict
CURRENT_DIR = Path(__file__).parent
ROOT_DIR = CURRENT_DIR.parent.parent.parent
assert (ROOT_DIR / "flake.nix").exists()
def test_eval_config_missing_arguments() -> None:
result = eval_config_file_as_json(disko_file=None, flake=None)
assert isinstance(result, DiskoError)
assert result.messages[0].is_message(err_missing_arguments)
assert result.context == "validate args"
def test_eval_config_too_many_arguments() -> None:
result = eval_config_file_as_json(disko_file="foo", flake="bar")
assert isinstance(result, DiskoError)
assert result.messages[0].is_message(err_too_many_arguments)
assert result.context == "validate args"
def test_eval_config_disko_file() -> None:
disko_file_path = ROOT_DIR / "example" / "simple-efi.nix"
result = eval_config_file_as_json(disko_file=str(disko_file_path), flake=None)
assert isinstance(result, DiskoSuccess)
with open(CURRENT_DIR / "file-simple-efi-eval-result.json") as f:
expected_result = cast(JsonDict, json.load(f))
assert result.value == expected_result
def test_eval_config_flake_testmachine() -> None:
result = eval_config_file_as_json(disko_file=None, flake=f"{ROOT_DIR}#testmachine")
assert isinstance(result, DiskoSuccess)
with open(CURRENT_DIR / "flake-testmachine-eval-result.json") as f:
expected_result = cast(JsonDict, json.load(f))
assert result.value == expected_result
def test_eval_and_validate_config_disko_file() -> None:
disko_file_path = ROOT_DIR / "example" / "simple-efi.nix"
eval_result = eval_config_file_as_json(disko_file=str(disko_file_path), flake=None)
assert isinstance(eval_result, DiskoSuccess)
validate_result = validate_config(eval_result.value)
assert isinstance(validate_result, DiskoSuccess)
with open(CURRENT_DIR / "file-simple-efi-validate-result.json") as f:
expected_result = f.read()
assert json.loads(validate_result.value.model_dump_json(by_alias=True)) == json.loads(expected_result) # type: ignore[misc]
def test_eval_and_validate_flake_testmachine() -> None:
eval_result = eval_config_file_as_json(
disko_file=None, flake=f"{ROOT_DIR}#testmachine"
)
assert isinstance(eval_result, DiskoSuccess)
validate_result = validate_config(eval_result.value)
assert isinstance(validate_result, DiskoSuccess)
with open(CURRENT_DIR / "flake-testmachine-validate-result.json") as f:
expected_result = f.read()
assert json.loads(validate_result.value.model_dump_json(by_alias=True)) == json.loads(expected_result) # type: ignore[misc]