#!/usr/bin/env python3 """Tests for scitex_writer._project._trees.""" import pytest from scitex_writer._dataclasses import ManuscriptTree, RevisionTree, SupplementaryTree from scitex_writer._dataclasses.tree import ScriptsTree from scitex_writer._project._trees import create_document_trees class TestCreateDocumentTreesReturnTypes: """Tests for create_document_trees return types.""" def test_returns_tuple_of_four(self, tmp_path): """Verify returns a tuple of four items.""" result = create_document_trees(tmp_path, None) assert isinstance(result, tuple) assert len(result) == 4 def test_returns_manuscript_tree(self, tmp_path): """Verify first element is ManuscriptTree.""" manuscript, _, _, _ = create_document_trees(tmp_path, None) assert isinstance(manuscript, ManuscriptTree) def test_returns_supplementary_tree(self, tmp_path): """Verify second element is SupplementaryTree.""" _, supplementary, _, _ = create_document_trees(tmp_path, None) assert isinstance(supplementary, SupplementaryTree) def test_returns_revision_tree(self, tmp_path): """Verify third element is RevisionTree.""" _, _, revision, _ = create_document_trees(tmp_path, None) assert isinstance(revision, RevisionTree) def test_returns_scripts_tree(self, tmp_path): """Verify fourth element is ScriptsTree.""" _, _, _, scripts = create_document_trees(tmp_path, None) assert isinstance(scripts, ScriptsTree) class TestCreateDocumentTreesPaths: """Tests for create_document_trees path initialization.""" def test_manuscript_path_correct(self, tmp_path): """Verify manuscript tree has correct root path.""" manuscript, _, _, _ = create_document_trees(tmp_path, None) assert manuscript.root == tmp_path / "01_manuscript" def test_supplementary_path_correct(self, tmp_path): """Verify supplementary tree has correct root path.""" _, supplementary, _, _ = create_document_trees(tmp_path, None) assert supplementary.root == tmp_path / "02_supplementary" def test_revision_path_correct(self, tmp_path): """Verify revision tree has correct root path.""" _, _, revision, _ = create_document_trees(tmp_path, None) assert revision.root == tmp_path / "03_revision" def test_scripts_path_correct(self, tmp_path): """Verify scripts tree has correct root path.""" _, _, _, scripts = create_document_trees(tmp_path, None) assert scripts.root == tmp_path / "scripts" class TestCreateDocumentTreesGitRoot: """Tests for create_document_trees git_root propagation.""" def test_git_root_none_propagated(self, tmp_path): """Verify git_root=None is propagated to all trees.""" manuscript, supplementary, revision, scripts = create_document_trees( tmp_path, None ) assert manuscript.git_root is None assert supplementary.git_root is None assert revision.git_root is None assert scripts.git_root is None def test_git_root_propagated_to_all(self, tmp_path): """Verify git_root is propagated to all trees.""" git_root = tmp_path / ".git" git_root.mkdir() manuscript, supplementary, revision, scripts = create_document_trees( tmp_path, git_root ) assert manuscript.git_root == git_root assert supplementary.git_root == git_root assert revision.git_root == git_root assert scripts.git_root == git_root class TestCreateDocumentTreesNestedProject: """Tests for create_document_trees with nested project directory.""" def test_nested_project_path(self, tmp_path): """Verify works with nested project directory.""" nested = tmp_path / "papers" / "2024" / "my_paper" manuscript, supplementary, revision, scripts = create_document_trees( nested, None ) assert manuscript.root == nested / "01_manuscript" assert supplementary.root == nested / "02_supplementary" assert revision.root == nested / "03_revision" assert scripts.root == nested / "scripts" if __name__ == "__main__": import os import pytest pytest.main([os.path.abspath(__file__)])