60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
import os
|
|
import tempfile
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from common_util.common_util_storage import (
|
|
get_project_stage_path,
|
|
resolve_stored_project_path,
|
|
)
|
|
from config.config_system import get_project_storage_path
|
|
|
|
|
|
class ProjectStoragePathTest(unittest.TestCase):
|
|
def test_get_project_storage_path(self) -> None:
|
|
with tempfile.TemporaryDirectory() as storage_root:
|
|
with patch("config.config_system.STORAGE_BASE_DIR", storage_root):
|
|
result = get_project_storage_path("회사", "사용자", "project-id")
|
|
|
|
self.assertEqual(
|
|
result,
|
|
os.path.join(storage_root, "회사", "사용자", "project-id"),
|
|
)
|
|
self.assertTrue(os.path.isdir(result))
|
|
self.assertNotIn(f"{os.sep}projects{os.sep}", result)
|
|
|
|
for invalid_segment in ("", ".", "..", "../escape", "nested/path", "nested\\path"):
|
|
with self.subTest(invalid_segment=invalid_segment):
|
|
with self.assertRaises(ValueError):
|
|
get_project_storage_path(invalid_segment, "사용자", "project-id")
|
|
|
|
def test_get_project_stage_path(self) -> None:
|
|
with tempfile.TemporaryDirectory() as project_root:
|
|
result = get_project_stage_path(project_root, "B03_FileInput")
|
|
|
|
self.assertEqual(result, os.path.join(project_root, "B03_FileInput"))
|
|
self.assertTrue(os.path.isdir(result))
|
|
|
|
for invalid_stage in ("", "B02_ProjRegister", "../escape"):
|
|
with self.subTest(invalid_stage=invalid_stage):
|
|
with self.assertRaises(ValueError):
|
|
get_project_stage_path(project_root, invalid_stage)
|
|
|
|
def test_resolve_stored_project_path(self) -> None:
|
|
with tempfile.TemporaryDirectory() as storage_root:
|
|
with patch("common_util.common_util_storage.STORAGE_BASE_DIR", storage_root):
|
|
result = resolve_stored_project_path("storage/company/user/project-id")
|
|
expected = os.path.join(storage_root, "company", "user", "project-id")
|
|
|
|
self.assertEqual(result, expected)
|
|
self.assertTrue(os.path.isdir(result))
|
|
|
|
for invalid_path in ("company/user/project", "../outside", "storage"):
|
|
with self.subTest(invalid_path=invalid_path):
|
|
with self.assertRaises(ValueError):
|
|
resolve_stored_project_path(invalid_path)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|