把上一提交没覆盖到的模块也改完,至此仓库内不再有"只写编号、不写说明"的注释。 涉及 33 个文件(生产 24 + 测试 9),包括航班状态模型与合并引擎、事件与留痕模型、 运营日计算、投递器、历史归档作业、编解码与身份、重试与重放、健康指示器、 生命周期装配、以及各自的测试类。 改法与前面一致:先说这段代码做什么,再说为什么这么做,术语第一次出现就地解释 (FLID、OPERATION_DAY、航班版本号、删除通知、待发事件表等)。工单编号 (U07/N02/ACM2-10 之类)已全部移除;段落编号只剩 10 处,全部带文件名位于句尾, 用作延伸阅读,例如"见 docs/flight-state.md §5"。 保留了本来就自解释的行内注释、PgTestSupport 顶部的环境变量默认值表格, 以及 InboxController 里描述待补接口的 TODO。 校验:逐文件做"去注释后比对"(块注释 + 行注释清除、空白归一),33 个文件代码 零差异;另做逐行非注释代码比对,同样零差异。clean test 为 78 passed / 1 skipped。
49 lines
1.8 KiB
Kotlin
49 lines
1.8 KiB
Kotlin
package com.gzzn.omms.msgexchange.domain
|
|
|
|
import org.junit.jupiter.api.Assertions.assertEquals
|
|
import org.junit.jupiter.api.Assertions.assertFalse
|
|
import org.junit.jupiter.api.Assertions.assertNull
|
|
import org.junit.jupiter.api.Test
|
|
import java.time.LocalDate
|
|
import java.time.ZoneId
|
|
|
|
/**
|
|
* 守着运营日的算法:用计划运行时间 SODT(ddMMMyyHHmm)加机场时区算,本地时刻早于切日边界的
|
|
* 归到前一个运营日;越界的切日边界收敛到 23;SODT 缺失或格式不对就返回 null。
|
|
*/
|
|
class OperationDayTest {
|
|
|
|
private val zone: ZoneId = ZoneId.of("Asia/Shanghai")
|
|
|
|
@Test
|
|
fun `computes operation day from SODT with zero cutoff`() {
|
|
val calc = OperationDayCalculator(zone, cutoffHour = 0)
|
|
assertEquals(LocalDate.of(2026, 12, 15), calc.compute("15DEC261723"))
|
|
}
|
|
|
|
@Test
|
|
fun `time before cutoff rolls back to previous operation day`() {
|
|
val calc = OperationDayCalculator(zone, cutoffHour = 4)
|
|
// 04:00 之前 → 前一运营日
|
|
assertEquals(LocalDate.of(2026, 12, 14), calc.compute("15DEC260230"))
|
|
// 04:00 整点起归属当日
|
|
assertEquals(LocalDate.of(2026, 12, 15), calc.compute("15DEC260400"))
|
|
}
|
|
|
|
@Test
|
|
fun `invalid or missing SODT returns null`() {
|
|
val calc = OperationDayCalculator(zone, 0)
|
|
assertNull(calc.compute(null))
|
|
assertNull(calc.compute(""))
|
|
assertNull(calc.compute("garbage"))
|
|
assertNull(calc.compute("99XXC12345"))
|
|
}
|
|
|
|
@Test
|
|
fun `cutoff outside 0 to 23 is clamped to 23`() {
|
|
val calc = OperationDayCalculator(zone, cutoffHour = 99)
|
|
// 越界收敛为 23:当日 00:00 早于 23 点 → 归属前一运营日
|
|
assertEquals(LocalDate.of(2026, 12, 14), calc.compute("15DEC260000"))
|
|
}
|
|
}
|