import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class IbanValidatorTest { static final String VALID = "TR330006100519786457841326"; @Test void validIban() { assertTrue(IbanValidator.isValid(VALID)); } @Test void validWithSpacesAndLowercase() { assertTrue(IbanValidator.isValid("tr33 0006 1005 1978 6457 8413 26")); } @Test void secondValidIban() { assertTrue(IbanValidator.isValid("TR650001000000000000123456")); } @Test void wrongCheckDigits() { assertFalse(IbanValidator.isValid("TR340006100519786457841326")); } @Test void wrongLength() { assertFalse(IbanValidator.isValid("TR33000610051978645784132")); } @Test void wrongCountry() { assertFalse(IbanValidator.isValid("DE330006100519786457841326")); } @Test void nonDigitCharacter() { assertFalse(IbanValidator.isValid("TR33000610051978645784132X")); } @Test void reservedDigitMustBeZero() { // mod-97 açısından geçerli ama ayrılmış hane 0 değil assertFalse(IbanValidator.isValid("TR080006110519786457841326")); } @Test void nullRejected() { assertThrows(IllegalArgumentException.class, () -> IbanValidator.isValid(null)); } @Test void bankCode() { assertEquals("00061", IbanValidator.bankCode(VALID)); } @Test void bankCodeOfInvalidThrows() { assertThrows(IllegalArgumentException.class, () -> IbanValidator.bankCode("TR340006100519786457841326")); } @Test void format() { assertEquals("TR33 0006 1005 1978 6457 8413 26", IbanValidator.format(VALID)); } @Test void mod97OfKnownValue() { assertEquals(1, IbanValidator.mod97("0006100519786457841326TR33")); } }