Merge pull request 'test(auth): align SQL contracts with clean initialization' (#2) from test into main

Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
2026-09-17 14:00:50 +08:00
2 changed files with 15 additions and 4 deletions
@@ -11,10 +11,21 @@ import static org.assertj.core.api.Assertions.assertThat;
class AuthLoginIdentifiersSqlContractTest { class AuthLoginIdentifiersSqlContractTest {
@Test @Test
void backfillsOnlyUniquelyOwnedPhonesAndKeepsDuplicateLegacyPhonesUnbound() throws Exception { void legacyMigrationBackfillsOnlyUniquelyOwnedPhonesAndKeepsDuplicatesUnbound() throws Exception {
assertSafeBackfill(new ClassPathResource("db/auth-login-identifiers.sql") assertSafeBackfill(new ClassPathResource("db/auth-login-identifiers.sql")
.getContentAsString(StandardCharsets.UTF_8)); .getContentAsString(StandardCharsets.UTF_8));
assertSafeBackfill(Files.readString(unifiedSql(), StandardCharsets.UTF_8)); }
@Test
void emptyDatabaseInitializationDeclaresPhoneUniquenessWithoutLegacyBackfill() throws Exception {
String sql = Files.readString(unifiedSql(), StandardCharsets.UTF_8);
assertThat(sql)
.contains("phone varchar(32) DEFAULT NULL")
.contains("UNIQUE KEY uk_auth_account_phone (phone)")
.doesNotContain("phone NOT REGEXP '^1[3-9][0-9]{9}$'")
.doesNotContain("HAVING COUNT(DISTINCT auth_user_id) = 1")
.doesNotContain("ALTER TABLE auth_account");
} }
private static void assertSafeBackfill(String sql) { private static void assertSafeBackfill(String sql) {
@@ -19,8 +19,8 @@ class InitialAccountSeedSqlContractTest {
private static void assertAccountSeed(String sql) { private static void assertAccountSeed(String sql) {
assertThat(sql) assertThat(sql)
.contains("(1000001, 'platform_admin'") .containsPattern("\\(1000001\\s*,\\s*'platform_admin'")
.contains("'平台系统管理员', 'ACTIVE'") .containsPattern("'平台系统管理员'\\s*,\\s*'ACTIVE'")
.contains("password_change_required") .contains("password_change_required")
.doesNotContain("merchant_admin") .doesNotContain("merchant_admin")
.doesNotContain("IT_TEST") .doesNotContain("IT_TEST")