Files
xiaoxia 63d4048354
CI/CD Pipeline / Check if frontend-only change (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / PR Build API Image (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
test(domain): wave196 小模块批量单测 +74 (#1160)
2026-07-30 00:25:01 +08:00

140 lines
4.9 KiB
Python
Executable File

"""bgm_utils 单元测试."""
from __future__ import annotations
from domain.bgm_utils import merge_bgm_config
class TestMergeBgmConfigEmptyInputs:
"""空输入测试."""
def test_both_empty(self):
result = merge_bgm_config({}, {})
assert result == {}
def test_user_empty_returns_template_copy(self):
template = {"enabled": True, "volume": 0.5}
result = merge_bgm_config(template, {})
assert result == {"enabled": True, "volume": 0.5}
# 返回的是副本不是同一个对象
assert result is not template
def test_template_empty_returns_user_copy(self):
user = {"enabled": False, "volume": 0.8}
result = merge_bgm_config({}, user)
assert result == {"enabled": False, "volume": 0.8}
assert result is not user
def test_user_none_returns_template(self):
template = {"enabled": True}
result = merge_bgm_config(template, None) # type: ignore[arg-type]
assert result == template
def test_template_none_returns_user(self):
user = {"enabled": True}
result = merge_bgm_config(None, user) # type: ignore[arg-type]
assert result == user
class TestMergeBgmConfigBasicMerge:
"""基础合并测试."""
def test_user_overrides_template_field(self):
template = {"volume": 0.5, "fade_in": 1.0}
user = {"volume": 0.8}
result = merge_bgm_config(template, user)
assert result["volume"] == 0.8
assert result["fade_in"] == 1.0
def test_user_adds_new_field(self):
template = {"volume": 0.5}
user = {"fade_out": 2.0}
result = merge_bgm_config(template, user)
assert result["volume"] == 0.5
assert result["fade_out"] == 2.0
def test_all_fields_overridden(self):
template = {"enabled": True, "volume": 0.5, "track_id": "t1"}
user = {"enabled": False, "volume": 1.0, "track_id": "t2"}
result = merge_bgm_config(template, user)
assert result == {"enabled": False, "volume": 1.0, "track_id": "t2"}
class TestMergeBgmConfigEnabledSpecial:
"""enabled 特殊处理测试."""
def test_user_no_enabled_keeps_template_enabled_true(self):
template = {"enabled": True, "volume": 0.5}
user = {"volume": 0.8}
result = merge_bgm_config(template, user)
assert result["enabled"] is True
assert result["volume"] == 0.8
def test_user_no_enabled_keeps_template_enabled_false(self):
template = {"enabled": False, "volume": 0.5}
user = {"volume": 0.8}
result = merge_bgm_config(template, user)
assert result["enabled"] is False
assert result["volume"] == 0.8
def test_user_explicit_enabled_true_overrides_template_false(self):
template = {"enabled": False, "volume": 0.5}
user = {"enabled": True, "volume": 0.8}
result = merge_bgm_config(template, user)
assert result["enabled"] is True
assert result["volume"] == 0.8
def test_user_explicit_enabled_false_overrides_template_true(self):
template = {"enabled": True, "volume": 0.5}
user = {"enabled": False}
result = merge_bgm_config(template, user)
assert result["enabled"] is False
def test_template_no_enabled_user_no_enabled(self):
template = {"volume": 0.5}
user = {"volume": 0.8}
result = merge_bgm_config(template, user)
assert "enabled" not in result
assert result["volume"] == 0.8
def test_template_no_enabled_user_has_enabled(self):
template = {"volume": 0.5}
user = {"enabled": True, "volume": 0.8}
result = merge_bgm_config(template, user)
assert result["enabled"] is True
class TestMergeBgmConfigDoesNotMutate:
"""不修改原字典测试."""
def test_template_not_mutated(self):
template = {"enabled": True, "volume": 0.5}
original = dict(template)
user = {"volume": 0.8, "fade": 1.0}
merge_bgm_config(template, user)
assert template == original
def test_user_not_mutated(self):
template = {"enabled": True, "volume": 0.5}
user = {"volume": 0.8}
original = dict(user)
merge_bgm_config(template, user)
assert user == original
class TestMergeBgmConfigNestedDict:
"""嵌套字典合并测试(简单合并,非深合并)."""
def test_nested_dict_user_overrides(self):
template = {"effects": {"fade_in": 1.0, "fade_out": 1.0}}
user = {"effects": {"fade_in": 2.0}}
result = merge_bgm_config(template, user)
# 简单合并,用户effects整个覆盖模板的
assert result["effects"] == {"fade_in": 2.0}
def test_nested_dict_preserved_when_no_user_override(self):
template = {"effects": {"fade_in": 1.0}}
user = {"volume": 0.8}
result = merge_bgm_config(template, user)
assert result["effects"] == {"fade_in": 1.0}