test(backend): 补充改动代码单元测试覆盖率至 85%+

新增 48 个测试用例覆盖修复代码的各分支路径:
- subscription_maintenance_queue: nil receiver/task、Stop 幂等、零值参数 (+6)
- billing_service: CalculateCostWithConfig、错误传播、SoraImageCost 等 (+12)
- timing_wheel_service: Schedule/ScheduleRecurring after Stop (+3)
- sora_media_cleanup_service: nil guard、Start/Stop 各分支、timezone (+10)
- sora_gateway_service: normalizeSoraMediaURLs、buildSoraContent 等辅助函数 (+17)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
yangjianbo
2026-02-10 17:52:10 +08:00
parent 54fe363257
commit e489996713
5 changed files with 547 additions and 0 deletions

View File

@@ -119,6 +119,41 @@ func TestTimingWheelService_Cancel_PreventsExecution(t *testing.T) {
}
}
func TestTimingWheelService_Schedule_AfterStop_LogsError(t *testing.T) {
svc, err := NewTimingWheelService()
if err != nil {
t.Fatalf("期望 err 为 nil但得到: %v", err)
}
svc.Stop()
// Stop 后调用 Schedule 应走 error 日志路径,不应 panic
svc.Schedule("after-stop", 100*time.Millisecond, func() {
t.Fatal("不应被执行")
})
}
func TestTimingWheelService_ScheduleRecurring_AfterStop_LogsError(t *testing.T) {
svc, err := NewTimingWheelService()
if err != nil {
t.Fatalf("期望 err 为 nil但得到: %v", err)
}
svc.Stop()
// Stop 后调用 ScheduleRecurring 应走 error 日志路径,不应 panic
svc.ScheduleRecurring("after-stop-rec", 100*time.Millisecond, func() {
t.Fatal("不应被执行")
})
}
func TestTimingWheelService_Stop_Idempotent(t *testing.T) {
svc, err := NewTimingWheelService()
if err != nil {
t.Fatalf("期望 err 为 nil但得到: %v", err)
}
svc.Stop()
svc.Stop() // 第二次调用不应 panic
}
func TestTimingWheelService_ScheduleRecurring_ExecutesMultipleTimes(t *testing.T) {
original := newTimingWheel
t.Cleanup(func() { newTimingWheel = original })