import os import sys import unittest sys.path.insert(0, os.path.dirname(__file__)) from _helpers import TempDirMixin from app import config class ConfigPathTests(TempDirMixin, unittest.TestCase): def test_make_slug_is_stable_and_safe(self): self.assertEqual("alias_cdb6fdbe", config.make_slug("alias")) self.assertEqual("my_shop_01_b92aea49", config.make_slug("My Shop 01")) chinese_slug = config.make_slug("台湾店铺") self.assertTrue(chinese_slug.startswith("account_")) self.assertRegex(chinese_slug, r"^account_[0-9a-f]{8}$") with self.assertRaises(config.ConfigPathError): config.make_slug("") def test_ensure_user_data_dir_creates_absolute_path(self): with self.make_temp_dir() as temp_dir: slug = config.make_slug("alias") path = config.ensure_user_data_dir(slug, root=temp_dir) same_path = config.ensure_user_data_dir(slug, root=temp_dir) self.assertEqual(path, same_path) self.assertTrue(os.path.isabs(path)) self.assertTrue(os.path.isdir(path)) self.assertEqual(slug, os.path.basename(path)) self.assert_removed(temp_dir) def test_ensure_user_data_dir_rejects_unsafe_slug(self): with self.make_temp_dir() as temp_dir: for slug in ("../alias", "Alias", "a-b", ""): with self.subTest(slug=slug): with self.assertRaises(config.ConfigPathError): config.ensure_user_data_dir(slug, root=temp_dir) self.assert_removed(temp_dir) if __name__ == "__main__": unittest.main()