# 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 def test_unreadable_config_is_fatal(self): self.cfg.mkdir() with self.assertRaisesRegex(Error, "config.toml"): library_roots([], self.cfg) def test_empty_library_root_is_fatal(self): with self.assertRaisesRegex(Error, "empty library root"): library_roots([""], self.cfg) def test_unexpandable_home_is_fatal(self): with self.assertRaisesRegex(Error, "cannot expand library root"): library_roots(["~nosuchuser_generat3d/lib"], self.cfg)