View Javadoc
1   /*
2    * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved!
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   * IBAN tests.
24   *
25   * TODO Human formatted output
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     * Test iban.
32     */
33    private static final String IBAN_DE07123412341234123412 = "DE07123412341234123412"; //$NON-NLS-1$
34  
35    /**
36     * Test iban.
37     */
38    private static final String IBAN_DE68210501700012345678 = "DE68210501700012345678"; //$NON-NLS-1$
39  
40    /**
41     * IBAN not as expected constant.
42     */
43    private static final String IBAN_NOT_AS_EXPECTED = "IBAN not as expected"; //$NON-NLS-1$
44  
45    /**
46     * Illegal argument exception expected constant.
47     */
48    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
49  
50  
51    /**
52     * Default constructor.
53     */
54    /* default */ IBANTests()
55     {
56      super();
57     }
58  
59  
60    /**
61     * Test correct IBAN.
62     *
63     * @param iban IBAN
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      // "XK525678901234567890", // Not an ISO3166 alpha 2 code
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    /* default */ 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     * Test IBAN with wrong lengths.
80     *
81     * @param iban IBAN
82     */
83    @ParameterizedTest
84    @ValueSource(strings = {"DE345678901234", "DE345678901234567890123456789012345"})
85    /* default */ void testIbanLength(final String iban)
86     {
87      assertThrows(IllegalArgumentException.class, () ->
88       {
89        /* final IBAN cleanIban = */ IBAN.of(iban);
90       }, IBANTests.ILLEGAL_ARGUMENT
91      );
92     }
93  
94  
95    /**
96     * Test wrong IBAN.
97     *
98     * @param iban IBAN
99     */
100   @ParameterizedTest
101   @ValueSource(strings = {"ZZ0056789012345", "DE0156789012345", "DE9956789012345", "DE025678A012345", "DE67210501700012345678", "DE7321050170001234567X", "DE0021050170001234567Ä"})
102   /* default */ void testIbanWrong(final String iban)
103    {
104     assertThrows(IllegalArgumentException.class, () ->
105      {
106       /* final IBAN cleanIban = */ IBAN.of(iban);
107      }, IBANTests.ILLEGAL_ARGUMENT
108     );
109    }
110 
111 
112   /**
113    * Test get iban.
114    */
115   @Test
116   /* default */ 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    * Test hash code.
125    */
126   @Test
127   /* default */ 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", //$NON-NLS-1$
133       () -> assertEquals(iban1.hashCode(), iban2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
134       () -> assertNotEquals(iban1.hashCode(), iban3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
135     );
136    }
137 
138 
139   /**
140    * Test equals.
141    */
142   @Test
143   @SuppressWarnings("java:S5785")
144   /* default */ 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", //$NON-NLS-1$
151       () -> assertTrue(iban1.equals(iban1), "iban11 is not equal"), //$NON-NLS-1$
152       () -> assertTrue(iban1.equals(iban2), "iban12 are not equal"), //$NON-NLS-1$
153       () -> assertTrue(iban2.equals(iban1), "iban21 are not equal"), //$NON-NLS-1$
154       () -> assertTrue(iban2.equals(iban4), "iban24 are not equal"), //$NON-NLS-1$
155       () -> assertTrue(iban1.equals(iban4), "iban14 are not equal"), //$NON-NLS-1$
156       () -> assertFalse(iban1.equals(iban3), "iban13 are equal"), //$NON-NLS-1$
157       () -> assertFalse(iban3.equals(iban1), "iban31 are equal"), //$NON-NLS-1$
158       () -> assertFalse(iban1.equals(null), "iban10 is equal") //$NON-NLS-1$
159     );
160    }
161 
162 
163   /**
164    * Test toString.
165    */
166   @Test
167   /* default */ void testToString()
168    {
169     final IBAN iban = IBAN.of(IBANTests.IBAN_DE68210501700012345678);
170     assertEquals("IBAN[iban=DE68210501700012345678]", iban.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
171    }
172 
173 
174   /**
175    * Test compareTo.
176    */
177   @Test
178   @SuppressWarnings("java:S5785")
179   /* default */ 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"); //$NON-NLS-1$
185     final IBAN iban5 = IBAN.of(IBANTests.IBAN_DE07123412341234123412);
186     assertAll("testCompareTo", //$NON-NLS-1$
187       () -> assertTrue(iban1.compareTo(iban2) == -iban2.compareTo(iban1), "reflexive1"), //$NON-NLS-1$
188       () -> assertTrue(iban1.compareTo(iban3) == -iban3.compareTo(iban1), "reflexive2"), //$NON-NLS-1$
189       () -> assertTrue((iban4.compareTo(iban3) > 0) && (iban3.compareTo(iban1) > 0) && (iban4.compareTo(iban1) > 0), "transitive1"), //$NON-NLS-1$
190       () -> assertTrue((iban1.compareTo(iban2) == 0) && (Math.abs(iban1.compareTo(iban5)) == Math.abs(iban2.compareTo(iban5))), "sgn1"), //$NON-NLS-1$
191       () -> assertTrue((iban1.compareTo(iban2) == 0) && iban1.equals(iban2), "equals") //$NON-NLS-1$
192     );
193    }
194 
195  }