@@ -180,50 +180,86 @@ describe('se', () => {
180180 expect ( se . validateObosMembershipNumber ( input , options ) ) . toBe ( expected ) ;
181181 } ) ;
182182
183- test ( 'test with leap years' , ( ) => {
184- expect (
185- se . validateOrganizationNumber ( '000229-3017' , { allowFormatting : true } ) ,
186- ) . toBe ( true ) ;
187-
188- expect (
189- se . validateOrganizationNumber ( '000229-5855' , { allowFormatting : true } ) ,
190- ) . toBe ( true ) ;
191- } ) ;
192-
193- test ( 'validateNationalIdentityNumber() - validates short format personnummer' , ( ) => {
183+ test ( 'validateNationalIdentityNumber() - validates short format (YYMMDDXXXX) personnummer' , ( ) => {
194184 for ( let i = 0 ; i < 1000 ; ++ i ) {
195- const pnr = swedishPersonNummer ( { format : 'short' } ) ;
185+ const pnrWithSeparator = swedishPersonNummer ( { format : 'short' } ) ;
186+ const pnrWithoutSeparator = pnrWithSeparator . replace ( / [ - + ] / , '' ) ;
187+
196188 expect (
197- se . validateNationalIdentityNumber ( pnr , {
189+ se . validateNationalIdentityNumber ( pnrWithSeparator , {
198190 allowFormatting : true ,
199191 format : 'short' ,
200192 } ) ,
201- `${ pnr } is valid` ,
193+ `${ pnrWithSeparator } is valid with separator ` ,
202194 ) . toBe ( true ) ;
203- }
204- } ) ;
205195
206- test ( 'validateNationalIdentityNumber() - validates long format personnummer' , ( ) => {
207- for ( let i = 0 ; i < 1000 ; ++ i ) {
208- const pnr = swedishPersonNummer ( { format : 'long' } ) ;
209196 expect (
210- se . validateNationalIdentityNumber ( pnr , { format : 'long' } ) ,
211- `${ pnr } is valid` ,
197+ se . validateNationalIdentityNumber ( pnrWithoutSeparator , {
198+ format : 'short' ,
199+ } ) ,
200+ `${ pnrWithSeparator } is valid without separator` ,
212201 ) . toBe ( true ) ;
213202 }
214203 } ) ;
215204
216- test ( 'validateNationalIdentityNumber() - validates long format personnummer' , ( ) => {
205+ test ( 'validateNationalIdentityNumber() - validates long format (YYYYMMDDXXXX) personnummer' , ( ) => {
217206 for ( let i = 0 ; i < 1000 ; ++ i ) {
218207 const pnr = swedishPersonNummer ( { format : 'long' } ) ;
208+
219209 expect (
220210 se . validateNationalIdentityNumber ( pnr , { format : 'long' } ) ,
221211 `${ pnr } is valid` ,
222212 ) . toBe ( true ) ;
223213 }
224214 } ) ;
225215
226- test . only ( 'validateNationalIdentityNumber() - handles leap years' , ( ) => {
216+ test ( 'validateNationalIdentityNumber() - handles separator/leap years' , ( ) => {
217+ // 29th of February is the best way to test whether the separator and long/short handling works correctly.
218+ // The 29th of February year 2000 is valid a valid date, while the 29th of February year 1900 is not.
219+ // That means we get different results based on the separator.
227220 expect ( se . validateNationalIdentityNumber ( '0002297422' ) ) . toBe ( true ) ;
221+ expect (
222+ se . validateNationalIdentityNumber ( '000229-7422' , {
223+ allowFormatting : true ,
224+ } ) ,
225+ ) . toBe ( true ) ;
226+
227+ expect (
228+ se . validateNationalIdentityNumber ( '000229+7422' , {
229+ allowFormatting : true ,
230+ } ) ,
231+ ) . toBe ( false ) ;
232+
233+ expect ( se . validateNationalIdentityNumber ( '190002297422' ) ) . toBe ( false ) ;
234+ } ) ;
235+
236+ test ( 'validateNationalIdentityNumber() - validates samordningsnummer' , ( ) => {
237+ expect (
238+ se . validateNationalIdentityNumber ( '701063-2391' , {
239+ allowFormatting : true ,
240+ } ) ,
241+ ) . toBe ( true ) ;
242+ } ) ;
243+
244+ test ( 'validateNationalIdentityNumber() - respects format modifier' , ( ) => {
245+ expect (
246+ se . validateNationalIdentityNumber (
247+ swedishPersonNummer ( { format : 'short' } ) ,
248+ {
249+ allowFormatting : true ,
250+ format : 'long' ,
251+ } ,
252+ ) ,
253+ ) . toBe ( false ) ;
254+
255+ expect (
256+ se . validateNationalIdentityNumber (
257+ swedishPersonNummer ( { format : 'long' } ) ,
258+ {
259+ allowFormatting : true ,
260+ format : 'short' ,
261+ } ,
262+ ) ,
263+ ) . toBe ( false ) ;
228264 } ) ;
229265} ) ;
0 commit comments