aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_config.py
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-28 10:23:34 +0100
committerDanilo M. <danix@danix.xyz>2026-10-28 10:23:34 +0100
commit8431493b1de912196ea66b9f27c89e4c68658d56 (patch)
tree37bab84bd69aa40d824f42b14ed2bc164c0e2b9c /tests/test_config.py
parentdecd09d78505572634a7681e3c1c6b859d2d2f06 (diff)
downloadgenerat3D-8431493b1de912196ea66b9f27c89e4c68658d56.tar.gz
generat3D-8431493b1de912196ea66b9f27c89e4c68658d56.zip
Add package base and config loading
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests/test_config.py')
-rw-r--r--tests/test_config.py81
1 files changed, 81 insertions, 0 deletions
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. <danix@danix.xyz>
+#
+# 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