From 8431493b1de912196ea66b9f27c89e4c68658d56 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 28 Oct 2026 10:23:34 +0100 Subject: Add package base and config loading Co-Authored-By: Claude Haiku 5.5 --- tests/__init__.py | 0 tests/test_config.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/test_config.py (limited to 'tests') diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..d1ad0d2 --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,81 @@ +# generat3D - evaluate Daz DSON scenes and write .dbz files +# Copyright (C) 2026 Danilo M. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os +import tempfile +import unittest +from pathlib import Path + +from generat3d import Error +from generat3d.config import config_path, library_roots + + +class ConfigTest(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory() + self.dir = Path(self.tmp.name) + self.lib = self.dir / "lib" + self.lib.mkdir() + self.cfg = self.dir / "config.toml" + + def tearDown(self): + self.tmp.cleanup() + + def write(self, text): + self.cfg.write_text(text) + + def test_cli_roots_win_over_config(self): + self.write('library_roots = ["/nonexistent"]\n') + self.assertEqual(library_roots([str(self.lib)], self.cfg), [self.lib]) + + def test_roots_from_config(self): + self.write(f'library_roots = ["{self.lib}"]\n') + self.assertEqual(library_roots([], self.cfg), [self.lib]) + + def test_no_roots_anywhere(self): + with self.assertRaisesRegex(Error, "no library roots"): + library_roots([], self.cfg) + + def test_missing_root_is_fatal(self): + with self.assertRaisesRegex(Error, "library root not found"): + library_roots([str(self.dir / "nope")], self.cfg) + + def test_unknown_key_is_fatal(self): + self.write(f'library_roots = ["{self.lib}"]\nlibary = 1\n') + with self.assertRaisesRegex(Error, "unknown keys: libary"): + library_roots([], self.cfg) + + def test_bad_type_is_fatal(self): + self.write('library_roots = "/x"\n') + with self.assertRaisesRegex(Error, "list of strings"): + library_roots([], self.cfg) + + def test_bad_toml_is_fatal(self): + self.write("library_roots = [\n") + with self.assertRaisesRegex(Error, "config.toml"): + library_roots([], self.cfg) + + def test_xdg_config_home(self): + old = os.environ.get("XDG_CONFIG_HOME") + os.environ["XDG_CONFIG_HOME"] = "/tmp/xdg" + try: + self.assertEqual(config_path(), Path("/tmp/xdg/generat3d/config.toml")) + finally: + if old is None: + del os.environ["XDG_CONFIG_HOME"] + else: + os.environ["XDG_CONFIG_HOME"] = old -- cgit v1.2.3