"""Test the high level SSG operations. SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org> SPDX-License-Identifier: GPL-3.0-only """ import os import tempfile import incorporealcms.ssg as ssg from incorporealcms import init_instance HERE = os.path.dirname(os.path.abspath(__file__)) instance_dir = os.path.join(HERE, 'instance') init_instance(instance_dir) def test_file_copy(): """Test the ability to sync a file to the output dir.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) os.chdir(os.path.join(instance_dir, 'pages')) generator.build_file_in_destination(os.path.join(instance_dir, 'pages'), '', 'no-title.md', tmpdir, True) assert os.path.exists(os.path.join(tmpdir, 'no-title.md')) assert os.path.exists(os.path.join(tmpdir, 'no-title.html')) def test_file_copy_no_markdown(): """Test the ability to sync a file to the output dir.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) os.chdir(os.path.join(instance_dir, 'pages')) generator.build_file_in_destination(os.path.join(instance_dir, 'pages'), '', 'no-title.md', tmpdir, False) assert os.path.exists(os.path.join(tmpdir, 'no-title.md')) assert not os.path.exists(os.path.join(tmpdir, 'no-title.html')) def test_file_copy_symlink(): """Test the ability to sync a file to the output dir.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) os.chdir(os.path.join(instance_dir, 'pages')) generator.build_file_in_destination(os.path.join(instance_dir, 'pages'), '', 'symlink-to-foo.txt', tmpdir) # need to copy the destination for os.path.exists to be happy with this generator.build_file_in_destination(os.path.join(instance_dir, 'pages'), '', 'foo.txt', tmpdir) assert os.path.exists(os.path.join(tmpdir, 'symlink-to-foo.txt')) assert os.path.islink(os.path.join(tmpdir, 'symlink-to-foo.txt')) def test_dir_copy(): """Test the ability to sync a directory to the output dir.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) os.chdir(os.path.join(instance_dir, 'pages')) generator.build_subdir_in_destination(os.path.join(instance_dir, 'pages'), '', 'media', tmpdir) assert os.path.exists(os.path.join(tmpdir, 'media')) assert os.path.isdir(os.path.join(tmpdir, 'media')) def test_dir_copy_symlink(): """Test the ability to sync a directory to the output dir.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) os.chdir(os.path.join(instance_dir, 'pages')) generator.build_subdir_in_destination(os.path.join(instance_dir, 'pages'), '', 'symlink-to-subdir', tmpdir) # need to copy the destination for os.path.exists to be happy with this generator.build_subdir_in_destination(os.path.join(instance_dir, 'pages'), '', 'subdir', tmpdir) assert os.path.exists(os.path.join(tmpdir, 'symlink-to-subdir')) assert os.path.isdir(os.path.join(tmpdir, 'symlink-to-subdir')) assert os.path.islink(os.path.join(tmpdir, 'symlink-to-subdir')) def test_build_in_destination(): """Test the ability to walk a source and populate the destination.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) generator.build_in_destination(os.path.join(src_dir, 'pages'), tmpdir) assert os.path.exists(os.path.join(tmpdir, 'index.md')) assert os.path.exists(os.path.join(tmpdir, 'index.html')) assert os.path.exists(os.path.join(tmpdir, 'subdir', 'index.md')) assert os.path.exists(os.path.join(tmpdir, 'subdir', 'index.html')) def test_build_in_destination_ignores_dot_files(): """Test the ability to walk a source and populate the destination.""" with tempfile.TemporaryDirectory() as tmpdir: src_dir = os.path.join(HERE, 'instance') generator = ssg.StaticSiteGenerator(src_dir, tmpdir) generator.build_in_destination(os.path.join(src_dir, 'pages'), tmpdir) assert not os.path.exists(os.path.join(tmpdir, '.ignored-file.md'))