"""Tests for flow.core.config.""" from pathlib import Path from flow.core.config import AppConfig, FlowContext, load_config, load_manifest def test_load_config_missing_file(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 [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) assert cfg.dotfiles_url == "git@github.com:user/dots.git" assert cfg.dotfiles_branch == "dev" assert cfg.projects_dir == "~/code" assert cfg.container_registry == "my.registry.com" assert cfg.container_tag == "v1" 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") 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 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 == {}