1
2
3
4 package de.powerstat.validation.values.test;
5
6
7 import static org.junit.jupiter.api.Assertions.assertAll;
8 import static org.junit.jupiter.api.Assertions.assertEquals;
9 import static org.junit.jupiter.api.Assertions.assertFalse;
10 import static org.junit.jupiter.api.Assertions.assertNotEquals;
11 import static org.junit.jupiter.api.Assertions.assertThrows;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import org.junit.jupiter.api.Test;
15 import org.junit.jupiter.params.ParameterizedTest;
16 import org.junit.jupiter.params.provider.ValueSource;
17
18 import de.powerstat.validation.values.IBAN;
19 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20
21
22
23
24
25
26
27 @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"})
28 final class IBANTests
29 {
30
31
32
33 private static final String IBAN_DE07123412341234123412 = "DE07123412341234123412";
34
35
36
37
38 private static final String IBAN_DE68210501700012345678 = "DE68210501700012345678";
39
40
41
42
43 private static final String IBAN_NOT_AS_EXPECTED = "IBAN not as expected";
44
45
46
47
48 private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected";
49
50
51
52
53
54 IBANTests()
55 {
56 super();
57 }
58
59
60
61
62
63
64
65 @ParameterizedTest
66 @ValueSource(strings = {IBANTests.IBAN_DE68210501700012345678, IBANTests.IBAN_DE07123412341234123412, "NO2156789012345", "LC965678901234567890123456789012", "TT83567890123456789012345678901234",
67 "EG5156789012345678901234567", "AL185678901A3456789012345678", "DZ79567890123456789012AB", "AD0556789012345678901234", "AO455678901234567890123AB", "AZ84567890123456789012345678", "BH72567890123456789012", "BE365678901234AB", "BJ705678901234567890123456AB", "BA0456789012345678AB", "BR305678901234567890123456789", "VG9856789012345678901234", "BG75567890123456789012", "BF96567890123456789012345AB", "BI57567890123456", "CR82056789012345678901", "CI645678901234567890123456AB", "DK195678901234567A", "DO90567890123456789012345678", "SV31567890123456789012345678", "EE54567890123456789A", "FO865678901234567A", "FI075678901234567A", "FR24567890123456789012345AB", "GA66567890123456789012345AB", "GE36567890123456789012", "GI895678901234567890123", "GR9756789012345678901234567", "GL865678901234567A", "GT48567890123456789012345678", "IQ475678901234567890123", "IR035678901234567890123456", "IE18567890123456789012", "IS08567890123456XXXXXXXXXX", "IL625678901234567890123", "IT37A5678901234567890123456", "JO0556789012345678901234567890", "CM66567890123456789012345AB", "CV065678901234567890123AB", "KZ275678901234567890", "QA435678901234567890123456789", "CG84567890123456789012345AB",
68
69 "HR3756789012345678901", "KW6956789012345678901234567890", "LV8656789012345678901", "LB57567890123456789012345678", "LI2856789012345678901", "LT365678901234567890", "LU335678901234567890", "MG91567890123456789012345AB", "ML625678901234567890123456AB", "MT25567890123456789012345678901", "MR58567890123456789012345AB", "MU7956789012345678901234567ABC", "MD9156789012345678901234", "MC06567890123456789012345AB", "ME955678901234567890AB", "MZ985678901234567890123AB", "NL9556789012345678", "MK315678901234567AB", "AT385678901234567890", "TL3056789012345678901AB", "PK4356789012345678901234", "PS955678901234567890123456789", "PL775678901A3456789012345678", "PT895678901234567890123AB", "RO1356789012345678901234", "SM24A6789012345678901234567", "ST625678901234567890123AB", "SA4656789012345678901234", "CH1556789012345678901", "SN025678901234567890123456AB", "RS085678901234567890AB", "SC98567890123456789012345678XXX", "SK1656789012345678901234", "SI805678901234567AB", "ES4456789012AB5678901234", "CZ1856789012345678901234", "TN68567890123456789012AB", "TR985678901234567890123456", "UA075678901234567890123456789", "HU505678901A345678901234567A", "VA345678901234567890123456", "AE585678901234567890123", "GB45567890123456789012", "BY78567890123456789012345678", "CY69567890123456789012345678", "CF87567890123456789012345AB"
70 })
71 void testIbanCorrect(final String iban)
72 {
73 final IBAN cleanIban = IBAN.of(iban);
74 assertEquals(iban, cleanIban.stringValue(), IBANTests.IBAN_NOT_AS_EXPECTED);
75 }
76
77
78
79
80
81
82
83 @ParameterizedTest
84 @ValueSource(strings = {"DE345678901234", "DE345678901234567890123456789012345"})
85 void testIbanLength(final String iban)
86 {
87 assertThrows(IllegalArgumentException.class, () ->
88 {
89 IBAN.of(iban);
90 }, IBANTests.ILLEGAL_ARGUMENT
91 );
92 }
93
94
95
96
97
98
99
100 @ParameterizedTest
101 @ValueSource(strings = {"ZZ0056789012345", "DE0156789012345", "DE9956789012345", "DE025678A012345", "DE67210501700012345678", "DE7321050170001234567X", "DE0021050170001234567Ä"})
102 void testIbanWrong(final String iban)
103 {
104 assertThrows(IllegalArgumentException.class, () ->
105 {
106 IBAN.of(iban);
107 }, IBANTests.ILLEGAL_ARGUMENT
108 );
109 }
110
111
112
113
114
115 @Test
116 void testStringValue()
117 {
118 final IBAN iban = IBAN.of(IBANTests.IBAN_DE68210501700012345678);
119 assertEquals(IBANTests.IBAN_DE68210501700012345678, iban.stringValue(), IBANTests.IBAN_NOT_AS_EXPECTED);
120 }
121
122
123
124
125
126 @Test
127 void testHashCode()
128 {
129 final IBAN iban1 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
130 final IBAN iban2 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
131 final IBAN iban3 = IBAN.of(IBANTests.IBAN_DE68210501700012345678);
132 assertAll("testHashCode",
133 () -> assertEquals(iban1.hashCode(), iban2.hashCode(), "hashCodes are not equal"),
134 () -> assertNotEquals(iban1.hashCode(), iban3.hashCode(), "hashCodes are equal")
135 );
136 }
137
138
139
140
141
142 @Test
143 @SuppressWarnings("java:S5785")
144 void testEquals()
145 {
146 final IBAN iban1 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
147 final IBAN iban2 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
148 final IBAN iban3 = IBAN.of(IBANTests.IBAN_DE68210501700012345678);
149 final IBAN iban4 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
150 assertAll("testEquals",
151 () -> assertTrue(iban1.equals(iban1), "iban11 is not equal"),
152 () -> assertTrue(iban1.equals(iban2), "iban12 are not equal"),
153 () -> assertTrue(iban2.equals(iban1), "iban21 are not equal"),
154 () -> assertTrue(iban2.equals(iban4), "iban24 are not equal"),
155 () -> assertTrue(iban1.equals(iban4), "iban14 are not equal"),
156 () -> assertFalse(iban1.equals(iban3), "iban13 are equal"),
157 () -> assertFalse(iban3.equals(iban1), "iban31 are equal"),
158 () -> assertFalse(iban1.equals(null), "iban10 is equal")
159 );
160 }
161
162
163
164
165
166 @Test
167 void testToString()
168 {
169 final IBAN iban = IBAN.of(IBANTests.IBAN_DE68210501700012345678);
170 assertEquals("IBAN[iban=DE68210501700012345678]", iban.toString(), "toString not equal");
171 }
172
173
174
175
176
177 @Test
178 @SuppressWarnings("java:S5785")
179 void testCompareTo()
180 {
181 final IBAN iban1 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
182 final IBAN iban2 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
183 final IBAN iban3 = IBAN.of(IBANTests.IBAN_DE68210501700012345678);
184 final IBAN iban4 = IBAN.of("SE3550000000054910000003");
185 final IBAN iban5 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
186 assertAll("testCompareTo",
187 () -> assertTrue(iban1.compareTo(iban2) == -iban2.compareTo(iban1), "reflexive1"),
188 () -> assertTrue(iban1.compareTo(iban3) == -iban3.compareTo(iban1), "reflexive2"),
189 () -> assertTrue((iban4.compareTo(iban3) > 0) && (iban3.compareTo(iban1) > 0) && (iban4.compareTo(iban1) > 0), "transitive1"),
190 () -> assertTrue((iban1.compareTo(iban2) == 0) && (Math.abs(iban1.compareTo(iban5)) == Math.abs(iban2.compareTo(iban5))), "sgn1"),
191 () -> assertTrue((iban1.compareTo(iban2) == 0) && iban1.equals(iban2), "equals")
192 );
193 }
194
195 }