Initial Release:
https://chatgpt.com/share/6941a2a4-7974-800f-8911-9ab0bf1e3873
This commit is contained in:
57
tests/unit/test_config.py
Normal file
57
tests/unit/test_config.py
Normal file
@@ -0,0 +1,57 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user