working version
This commit is contained in:
@@ -1,37 +1,34 @@
|
||||
"""Tests for flow.core.config."""
|
||||
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
|
||||
from flow.core.config import AppConfig, FlowContext, load_config, load_manifest
|
||||
from flow.core.config import AppConfig, load_config, load_manifest
|
||||
|
||||
|
||||
def test_load_config_missing_file(tmp_path):
|
||||
def test_load_config_missing_path(tmp_path):
|
||||
cfg = load_config(tmp_path / "nonexistent")
|
||||
assert isinstance(cfg, AppConfig)
|
||||
assert cfg.dotfiles_url == ""
|
||||
assert cfg.container_registry == "registry.tomastm.com"
|
||||
|
||||
|
||||
def test_load_config_ini(tmp_path):
|
||||
config_file = tmp_path / "config"
|
||||
config_file.write_text("""
|
||||
[repository]
|
||||
dotfiles_url=git@github.com:user/dots.git
|
||||
dotfiles_branch=dev
|
||||
def test_load_config_merged_yaml(tmp_path):
|
||||
(tmp_path / "10-config.yaml").write_text(
|
||||
"repository:\n"
|
||||
" dotfiles-url: git@github.com:user/dots.git\n"
|
||||
" dotfiles-branch: dev\n"
|
||||
"paths:\n"
|
||||
" projects-dir: ~/code\n"
|
||||
"defaults:\n"
|
||||
" container-registry: my.registry.com\n"
|
||||
" container-tag: v1\n"
|
||||
" tmux-session: main\n"
|
||||
"targets:\n"
|
||||
" personal: orb personal@orb\n"
|
||||
" work@ec2: work.ec2.internal ~/.ssh/id_work\n"
|
||||
)
|
||||
|
||||
[paths]
|
||||
projects_dir=~/code
|
||||
|
||||
[defaults]
|
||||
container_registry=my.registry.com
|
||||
container_tag=v1
|
||||
tmux_session=main
|
||||
|
||||
[targets]
|
||||
personal=orb personal@orb
|
||||
work=ec2 work.ec2.internal ~/.ssh/id_work
|
||||
""")
|
||||
cfg = load_config(config_file)
|
||||
cfg = load_config(tmp_path)
|
||||
assert cfg.dotfiles_url == "git@github.com:user/dots.git"
|
||||
assert cfg.dotfiles_branch == "dev"
|
||||
assert cfg.projects_dir == "~/code"
|
||||
@@ -40,31 +37,28 @@ work=ec2 work.ec2.internal ~/.ssh/id_work
|
||||
assert cfg.tmux_session == "main"
|
||||
assert len(cfg.targets) == 2
|
||||
assert cfg.targets[0].namespace == "personal"
|
||||
assert cfg.targets[0].platform == "orb"
|
||||
assert cfg.targets[0].ssh_host == "personal@orb"
|
||||
assert cfg.targets[1].ssh_identity == "~/.ssh/id_work"
|
||||
|
||||
|
||||
def test_load_manifest_missing_file(tmp_path):
|
||||
result = load_manifest(tmp_path / "nonexistent.yaml")
|
||||
def test_load_manifest_missing_path(tmp_path):
|
||||
result = load_manifest(tmp_path / "nonexistent")
|
||||
assert result == {}
|
||||
|
||||
|
||||
def test_load_manifest_valid(tmp_path):
|
||||
manifest = tmp_path / "manifest.yaml"
|
||||
manifest.write_text("""
|
||||
profiles:
|
||||
linux-vm:
|
||||
os: linux
|
||||
hostname: test
|
||||
""")
|
||||
result = load_manifest(manifest)
|
||||
assert "profiles" in result
|
||||
def test_load_manifest_valid_directory(tmp_path):
|
||||
(tmp_path / "manifest.yaml").write_text(
|
||||
"profiles:\n"
|
||||
" linux-vm:\n"
|
||||
" os: linux\n"
|
||||
" hostname: devbox\n"
|
||||
)
|
||||
result = load_manifest(tmp_path)
|
||||
assert result["profiles"]["linux-vm"]["os"] == "linux"
|
||||
|
||||
|
||||
def test_load_manifest_non_dict(tmp_path):
|
||||
manifest = tmp_path / "manifest.yaml"
|
||||
manifest.write_text("- a\n- b\n")
|
||||
result = load_manifest(manifest)
|
||||
assert result == {}
|
||||
def test_load_manifest_non_dict_raises(tmp_path):
|
||||
bad = tmp_path / "bad.yaml"
|
||||
bad.write_text("- a\n- b\n")
|
||||
|
||||
with pytest.raises(RuntimeError, match="must contain a mapping"):
|
||||
load_manifest(bad)
|
||||
|
||||
Reference in New Issue
Block a user