package com.talentcard.server.request; import com.talentcard.server.business.portal.FamilyCardApplicationRequest; import jakarta.validation.Validation; import jakarta.validation.Validator; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; class FamilyCardIdCardValidationTests { private static jakarta.validation.ValidatorFactory validatorFactory; private static Validator validator; @BeforeAll static void setUpValidator() { validatorFactory = Validation.buildDefaultValidatorFactory(); validator = validatorFactory.getValidator(); } @AfterAll static void closeValidator() { validatorFactory.close(); } @Test void acceptsEighteenDigitsOrUppercaseXAsCheckCode() { assertThat(violationsForDependentRequest("510105199001011234")).isZero(); assertThat(violationsForDependentRequest("51010519900101123X")).isZero(); assertThat(violationsForPortalRequest("510105199001011234")).isZero(); assertThat(violationsForPortalRequest("51010519900101123X")).isZero(); } @Test void rejectsLegacyAndInvalidIdCardFormats() { for (String idCard : new String[] { "510105900101123", "51010519900101123x", "51010519900101123A" }) { assertThat(violationsForDependentRequest(idCard)).isPositive(); assertThat(violationsForPortalRequest(idCard)).isPositive(); } } private int violationsForDependentRequest(String idCard) { return validator.validate(new DependentCardApplyRequest(1L, "家属", idCard, "13800138000", "配偶")).size(); } private int violationsForPortalRequest(String idCard) { return validator.validate(new FamilyCardApplicationRequest(1L, "家属", idCard, "13800138000", "配偶")).size(); } }