Files
dotlinker/tests/unit/test_config.py
Kevin Veen-Birkenbach 8fd45cb87b
Some checks failed
CI + Mark Stable / Test & Lint (push) Has been cancelled
CI + Mark Stable / Mark stable tag (push) Has been cancelled
Initial Release:
https://chatgpt.com/share/6941a2a4-7974-800f-8911-9ab0bf1e3873
2025-12-16 19:19:05 +01:00

58 lines
2.1 KiB
Python

from __future__ import annotations
import os
import tempfile
import unittest
from pathlib import Path
from dotlinker.config import default_config_path, load_config, save_config, upsert_mapping
from dotlinker.model import Mapping
class TestConfig(unittest.TestCase):
def test_default_config_path_respects_xdg(self) -> None:
with tempfile.TemporaryDirectory() as td:
xdg = Path(td) / "xdg"
os.environ["XDG_CONFIG_HOME"] = str(xdg)
p = default_config_path()
self.assertEqual(p, xdg / "dotlinker" / "config.yaml")
def test_load_config_missing_returns_empty(self) -> None:
with tempfile.TemporaryDirectory() as td:
cfg = Path(td) / "missing.yaml"
self.assertEqual(load_config(cfg), [])
def test_save_and_load_roundtrip(self) -> None:
with tempfile.TemporaryDirectory() as td:
cfg = Path(td) / "cfg.yaml"
mappings = [
Mapping(name="zshrc", backend="chezmoi", src="~/.zshrc", dest=None),
Mapping(
name="nvim",
backend="cloud",
src="~/.config/nvim",
dest="~/Nextcloud/dotfiles/.config/nvim",
),
]
save_config(cfg, mappings)
loaded = load_config(cfg)
self.assertEqual(loaded, mappings)
def test_upsert_adds_when_missing(self) -> None:
out = upsert_mapping([], Mapping("a", "chezmoi", "~/.a", None), replace=False)
self.assertEqual(len(out), 1)
self.assertEqual(out[0].name, "a")
def test_upsert_rejects_duplicate_without_replace(self) -> None:
items = [Mapping("a", "chezmoi", "~/.a", None)]
with self.assertRaises(ValueError):
upsert_mapping(items, Mapping("a", "cloud", "~/.a", "~/x"), replace=False)
def test_upsert_replaces_with_replace(self) -> None:
items = [Mapping("a", "chezmoi", "~/.a", None)]
out = upsert_mapping(items, Mapping("a", "cloud", "~/.a", "~/x"), replace=True)
self.assertEqual(out[0].backend, "cloud")
self.assertEqual(out[0].dest, "~/x")