package com.battery.business.runtime; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.InputStream; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; /** Ticket25 迁移契约:一次行为审计、覆盖状态和物理删除所需的持久化结构。 */ class Ticket25MigrationContractTest { @Test void storesSingleActionAndStableIdentityOverrides() { String sql; try (InputStream stream = getClass().getClassLoader().getResourceAsStream( "db/migration/V24__console_data_revision_actions.sql")) { if (stream == null) throw new AssertionError("缺少 Ticket25 迁移"); sql = new String(stream.readAllBytes(), StandardCharsets.UTF_8); } catch (Exception exception) { throw new AssertionError(exception); } assertTrue(sql.contains("t_test_data_revision_action")); assertTrue(sql.contains("t_test_data_override")); assertTrue(sql.contains("identity_summary JSON")); assertTrue(sql.contains("operation_type")); assertTrue(sql.contains("uk_data_override_identity")); assertFalse(sql.matches("(?s).*\\bDROP\\s+(TABLE|COLUMN)\\b.*")); } }