pyLyricFlow/tests/test_explorer_safety.py
2026-02-24 13:22:10 -06:00

28 lines
1002 B
Python

import unittest
import os
from src.gui.components.explorer import _is_valid_entry_name, _is_within_root
class TestExplorerSafety(unittest.TestCase):
def test_is_valid_entry_name_rejects_path_segments(self):
self.assertFalse(_is_valid_entry_name("../outside.txt"))
self.assertFalse(_is_valid_entry_name("nested/file.txt"))
self.assertFalse(_is_valid_entry_name(r"nested\file.txt"))
self.assertFalse(_is_valid_entry_name(".."))
def test_is_valid_entry_name_accepts_simple_name(self):
self.assertTrue(_is_valid_entry_name("song.lmd"))
self.assertTrue(_is_valid_entry_name("verse_01"))
def test_is_within_root(self):
root = os.path.join("tmp", "project")
inside = os.path.join(root, "lyrics", "song.lmd")
outside = os.path.join("tmp", "other", "song.lmd")
self.assertTrue(_is_within_root(root, inside))
self.assertFalse(_is_within_root(root, outside))
if __name__ == "__main__":
unittest.main()