97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
"""当前 Client 本地身份服务测试。"""
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from src.current_client_service import (
|
|
CurrentClientService,
|
|
load_admin_base_url,
|
|
)
|
|
from src.http_admin_gateway import DEFAULT_ADMIN_BASE_URL
|
|
from src.settings_repository import SettingsRepository
|
|
|
|
|
|
class CurrentClientServiceTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.temp_directory = tempfile.TemporaryDirectory()
|
|
path = Path(self.temp_directory.name) / "client.db"
|
|
self.repository = SettingsRepository(path)
|
|
self.generated_count = 0
|
|
|
|
def generate_id():
|
|
self.generated_count += 1
|
|
return f"CLIENT-GENERATED-{self.generated_count}"
|
|
|
|
self.service = CurrentClientService(self.repository, generate_id)
|
|
|
|
def tearDown(self):
|
|
self.temp_directory.cleanup()
|
|
|
|
def test_first_save_generates_id_and_later_save_reuses_it(self):
|
|
first = self.service.save(" 办公室电脑 ")
|
|
second = self.service.save("仓库电脑")
|
|
|
|
self.assertEqual(first.client_id, "CLIENT-GENERATED-1")
|
|
self.assertEqual(second.client_id, first.client_id)
|
|
self.assertEqual(second.client_name, "仓库电脑")
|
|
self.assertEqual(self.generated_count, 1)
|
|
self.assertEqual(self.service.load(), second)
|
|
|
|
def test_empty_name_is_allowed_but_more_than_50_chars_is_rejected(self):
|
|
saved = self.service.save(" ")
|
|
self.assertEqual(saved.client_name, "")
|
|
|
|
with self.assertRaisesRegex(ValueError, "最多 50"):
|
|
self.service.save("测" * 51)
|
|
|
|
self.assertEqual(self.service.load(), saved)
|
|
|
|
def test_non_string_corrupted_values_are_treated_as_missing(self):
|
|
self.repository.set("admin.client_id", {"bad": "value"})
|
|
self.repository.set("admin.client_name", 123)
|
|
|
|
saved = self.service.save("新设备")
|
|
|
|
self.assertEqual(saved.client_id, "CLIENT-GENERATED-1")
|
|
self.assertEqual(saved.client_name, "新设备")
|
|
|
|
def test_missing_admin_base_url_is_saved_as_current_default(self):
|
|
self.assertEqual(
|
|
load_admin_base_url(self.repository),
|
|
DEFAULT_ADMIN_BASE_URL,
|
|
)
|
|
self.assertEqual(
|
|
self.repository.get("admin.base_url"),
|
|
DEFAULT_ADMIN_BASE_URL,
|
|
)
|
|
|
|
def test_legacy_admin_base_url_is_migrated(self):
|
|
self.repository.set("admin.base_url", "http://127.0.0.1:8080/")
|
|
|
|
self.assertEqual(
|
|
load_admin_base_url(self.repository),
|
|
DEFAULT_ADMIN_BASE_URL,
|
|
)
|
|
self.assertEqual(
|
|
self.repository.get("admin.base_url"),
|
|
DEFAULT_ADMIN_BASE_URL,
|
|
)
|
|
|
|
def test_custom_admin_base_url_is_preserved(self):
|
|
custom_url = "https://admin.example.com/service/"
|
|
self.repository.set("admin.base_url", custom_url)
|
|
|
|
self.assertEqual(
|
|
load_admin_base_url(self.repository),
|
|
"https://admin.example.com/service",
|
|
)
|
|
self.assertEqual(
|
|
self.repository.get("admin.base_url"),
|
|
custom_url,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|