UNPKG

codicefiscalejs-node

Version:

A Node.js library to compute, validate and reverse Italian Tax Code (codice fiscale)

305 lines (257 loc) 15.8 kB
const CodiceFiscale = require('../src/cf'); describe('CodiceFiscale ', ()=>{ // Dati riccorrenti nei test const mockUserData = { nome: 'Marco', cognome: 'Rossi', sesso: 'M', comune: 'Milano', provincia: 'MI', giorno: 1, mese: 1, anno: 1980 } const cf = new CodiceFiscale(mockUserData); // RSSMRC80A01F205Z test('è definito', () => { expect(CodiceFiscale).toBeDefined() }); test('è una classe', () => { expect(typeof CodiceFiscale).toBe('function') }); describe('ha un costruttore', ()=>{ test(`accetta dati in questo formato ${JSON.stringify(mockUserData)}`,()=>{ expect(cf.nome).toBe(mockUserData.nome) expect(cf.cognome).toBe(mockUserData.cognome) expect(cf.sesso).toBe(mockUserData.sesso) expect(cf.comune).toBe(mockUserData.comune) expect(cf.provincia).toBe(mockUserData.provincia) expect(cf.giorno).toBe(mockUserData.giorno) expect(cf.mese).toBe(mockUserData.mese) expect(cf.anno).toBe(mockUserData.anno) }) test('rileva errori nelle date', ()=>{ const wrongDateUserDate1 = { ...mockUserData, giorno: 1, mese: 13, anno: 1980 } expect(()=>new CodiceFiscale(wrongDateUserDate1)).toThrow() }) test('lancia un errore quando uno dei campi richiesti è mancante', ()=>{ const fieldList = Object.keys(mockUserData) fieldList.forEach(field=>{ let tmpMissingUserData = {...mockUserData} delete tmpMissingUserData[field] expect(()=>new CodiceFiscale(tmpMissingUserData)).toThrow() }) }) }) test('calcola il codice del cognome', ()=>{ expect(cf.codiceCognome).toBe('RSS') }) test('calcola il codice del cognome anche quando non ci sono sufficienti consonanti', ()=>{ let cf = new CodiceFiscale({...mockUserData, cognome: 'Cicia'}) expect(cf.codiceCognome).toBe('CCI') }) test('calcola il codice del cognome anche di Patrick Swayze' , ()=>{ let cf = new CodiceFiscale({...mockUserData, cognome: 'Swayze'}) expect(cf.codiceCognome).toBe('SWY') }) test('calcola il codice del nome', ()=>{ expect(cf.codiceNome).toBe('MRC') // Proviamo con un po' di nomi differenti 😉 expect(new CodiceFiscale({...mockUserData, nome: 'Camillo'}).codiceNome).toBe('CLL') expect(new CodiceFiscale({...mockUserData, nome: 'Annalisa'}).codiceNome).toBe('NLS') expect(new CodiceFiscale({...mockUserData, nome: 'Valentina'}).codiceNome).toBe('VNT') expect(new CodiceFiscale({...mockUserData, nome: 'Caterina'}).codiceNome).toBe('CRN') }) test('calcola il codice del nome anche quando non ci sono sufficienti consonanti', ()=>{ expect(new CodiceFiscale({...mockUserData, nome: 'Luca'}).codiceNome).toBe('LCU') expect(new CodiceFiscale({...mockUserData, nome: 'Anna'}).codiceNome).toBe('NNA') }) test('calcola il codice del nome anche per quei disgraziati che hanno due o più nomi', ()=>{ expect(new CodiceFiscale({...mockUserData, nome: 'Luca Adalberto'}).codiceNome).toBe('LDL') expect(new CodiceFiscale({...mockUserData, nome: 'Angela Rita'}).codiceNome).toBe('NLR') }) test('calcola il codice del nome anche di Patrick Swayze' , ()=>{ let cf = new CodiceFiscale({...mockUserData, nome: 'Patrick'}) expect(cf.codiceNome).toBe('PRC') }) test("calcola il codice dell'anno quando questo viene fornito con 4 cifre", ()=>{ expect(new CodiceFiscale({...mockUserData, anno: 1987 }).codiceAnno).toBe('87') expect(new CodiceFiscale({...mockUserData, anno: 1991 }).codiceAnno).toBe('91') expect(new CodiceFiscale({...mockUserData, anno: 2021 }).codiceAnno).toBe('21') expect(new CodiceFiscale({...mockUserData, anno: 1866 }).codiceAnno).toBe('66') expect(new CodiceFiscale({...mockUserData, anno: 2000 }).codiceAnno).toBe('00') }) test("calcola il codice dell'anno quando questo viene fornito con 2 cifre", ()=>{ expect(new CodiceFiscale({...mockUserData, anno: 87 }).codiceAnno).toBe('87') expect(new CodiceFiscale({...mockUserData, anno: 91 }).codiceAnno).toBe('91') expect(new CodiceFiscale({...mockUserData, anno: 21 }).codiceAnno).toBe('21') expect(new CodiceFiscale({...mockUserData, anno: 66 }).codiceAnno).toBe('66') expect(new CodiceFiscale({...mockUserData, anno: "00" }).codiceAnno).toBe('00') }) test("calcola il codice del mese", ()=>{ expect(new CodiceFiscale({...mockUserData, mese: 1 }).codiceMese).toBe('A') expect(new CodiceFiscale({...mockUserData, mese: 2 }).codiceMese).toBe('B') expect(new CodiceFiscale({...mockUserData, mese: 3 }).codiceMese).toBe('C') expect(new CodiceFiscale({...mockUserData, mese: 4 }).codiceMese).toBe('D') expect(new CodiceFiscale({...mockUserData, mese: 5 }).codiceMese).toBe('E') expect(new CodiceFiscale({...mockUserData, mese: 6 }).codiceMese).toBe('H') expect(new CodiceFiscale({...mockUserData, mese: 7 }).codiceMese).toBe('L') expect(new CodiceFiscale({...mockUserData, mese: 8 }).codiceMese).toBe('M') expect(new CodiceFiscale({...mockUserData, mese: 9 }).codiceMese).toBe('P') expect(new CodiceFiscale({...mockUserData, mese: 10}).codiceMese).toBe('R') expect(new CodiceFiscale({...mockUserData, mese: 11}).codiceMese).toBe('S') expect(new CodiceFiscale({...mockUserData, mese: 12}).codiceMese).toBe('T') }) test("calcola il codice del giorno", ()=>{ expect(new CodiceFiscale({...mockUserData, giorno: 1 }).codiceGiorno).toBe('01') expect(new CodiceFiscale({...mockUserData, giorno: 2 }).codiceGiorno).toBe('02') expect(new CodiceFiscale({...mockUserData, giorno: 3 }).codiceGiorno).toBe('03') expect(new CodiceFiscale({...mockUserData, giorno: 4 }).codiceGiorno).toBe('04') expect(new CodiceFiscale({...mockUserData, giorno: 5 }).codiceGiorno).toBe('05') expect(new CodiceFiscale({...mockUserData, giorno: 6 }).codiceGiorno).toBe('06') expect(new CodiceFiscale({...mockUserData, giorno: 7 }).codiceGiorno).toBe('07') expect(new CodiceFiscale({...mockUserData, giorno: 8 }).codiceGiorno).toBe('08') expect(new CodiceFiscale({...mockUserData, giorno: 9 }).codiceGiorno).toBe('09') expect(new CodiceFiscale({...mockUserData, giorno: 10 }).codiceGiorno).toBe('10') expect(new CodiceFiscale({...mockUserData, giorno: 11 }).codiceGiorno).toBe('11') expect(new CodiceFiscale({...mockUserData, giorno: 12 }).codiceGiorno).toBe('12') expect(new CodiceFiscale({...mockUserData, giorno: 13 }).codiceGiorno).toBe('13') expect(new CodiceFiscale({...mockUserData, giorno: 14 }).codiceGiorno).toBe('14') expect(new CodiceFiscale({...mockUserData, giorno: 15 }).codiceGiorno).toBe('15') expect(new CodiceFiscale({...mockUserData, giorno: 16 }).codiceGiorno).toBe('16') expect(new CodiceFiscale({...mockUserData, giorno: 17 }).codiceGiorno).toBe('17') expect(new CodiceFiscale({...mockUserData, giorno: 18 }).codiceGiorno).toBe('18') expect(new CodiceFiscale({...mockUserData, giorno: 19 }).codiceGiorno).toBe('19') expect(new CodiceFiscale({...mockUserData, giorno: 20 }).codiceGiorno).toBe('20') expect(new CodiceFiscale({...mockUserData, giorno: 21 }).codiceGiorno).toBe('21') expect(new CodiceFiscale({...mockUserData, giorno: 22 }).codiceGiorno).toBe('22') expect(new CodiceFiscale({...mockUserData, giorno: 23 }).codiceGiorno).toBe('23') expect(new CodiceFiscale({...mockUserData, giorno: 24 }).codiceGiorno).toBe('24') expect(new CodiceFiscale({...mockUserData, giorno: 25 }).codiceGiorno).toBe('25') expect(new CodiceFiscale({...mockUserData, giorno: 26 }).codiceGiorno).toBe('26') expect(new CodiceFiscale({...mockUserData, giorno: 27 }).codiceGiorno).toBe('27') expect(new CodiceFiscale({...mockUserData, giorno: 28 }).codiceGiorno).toBe('28') expect(new CodiceFiscale({...mockUserData, giorno: 29 }).codiceGiorno).toBe('29') expect(new CodiceFiscale({...mockUserData, giorno: 30 }).codiceGiorno).toBe('30') expect(new CodiceFiscale({...mockUserData, giorno: 31 }).codiceGiorno).toBe('31') // E ora tocca al gentil sesso 👧 expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 1 }).codiceGiorno).toBe('41') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 2 }).codiceGiorno).toBe('42') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 3 }).codiceGiorno).toBe('43') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 4 }).codiceGiorno).toBe('44') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 5 }).codiceGiorno).toBe('45') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 6 }).codiceGiorno).toBe('46') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 7 }).codiceGiorno).toBe('47') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 8 }).codiceGiorno).toBe('48') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 9 }).codiceGiorno).toBe('49') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 10 }).codiceGiorno).toBe('50') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 11 }).codiceGiorno).toBe('51') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 12 }).codiceGiorno).toBe('52') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 13 }).codiceGiorno).toBe('53') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 14 }).codiceGiorno).toBe('54') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 15 }).codiceGiorno).toBe('55') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 16 }).codiceGiorno).toBe('56') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 17 }).codiceGiorno).toBe('57') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 18 }).codiceGiorno).toBe('58') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 19 }).codiceGiorno).toBe('59') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 20 }).codiceGiorno).toBe('60') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 21 }).codiceGiorno).toBe('61') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 22 }).codiceGiorno).toBe('62') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 23 }).codiceGiorno).toBe('63') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 24 }).codiceGiorno).toBe('64') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 25 }).codiceGiorno).toBe('65') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 26 }).codiceGiorno).toBe('66') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 27 }).codiceGiorno).toBe('67') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 28 }).codiceGiorno).toBe('68') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 29 }).codiceGiorno).toBe('69') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 30 }).codiceGiorno).toBe('70') expect(new CodiceFiscale({...mockUserData, sesso: 'F', giorno: 31 }).codiceGiorno).toBe('71') }) test("calcola il codice del comune", ()=>{ expect(new CodiceFiscale(mockUserData).codiceComune).toBe("F205") expect(new CodiceFiscale({...mockUserData, comune: 'Caserta', provincia: 'CE'}).codiceComune).toBe('B963') expect(new CodiceFiscale({...mockUserData, comune: 'bolzano', provincia: 'BZ'}).codiceComune).toBe('A952') expect(new CodiceFiscale({...mockUserData, comune: 'ROMA', provincia: 'RM'}).codiceComune).toBe('H501') expect(new CodiceFiscale({...mockUserData, comune: "Sant'Angelo Romano", provincia: 'RM'}).codiceComune).toBe('I284') expect(new CodiceFiscale({...mockUserData, comune: "Acquacanina", provincia: 'MC'}).codiceComune).toBe('A031') expect(new CodiceFiscale({...mockUserData, comune: "VIMERCATE", provincia: 'MI'}).codiceComune).toBe('M052') expect(new CodiceFiscale({...mockUserData, comune: "CALENDASCO", provincia: 'PC'}).codiceComune).toBe('B405') }) test("calcola il codice anche per stati esteri", ()=>{ expect(new CodiceFiscale({...mockUserData, comune: 'Albania', provincia: 'EE'}).codiceComune).toBe('Z100') }) test("se il comune o il binomio comune-provincia non esistono lancia un errore", ()=>{ expect(()=>new CodiceFiscale({...mockUserData, comune: 'Milano', provincia: 'RM'}).codiceComune).toThrow() expect(()=>new CodiceFiscale({...mockUserData, comune: 'Paperopoli', provincia: 'CE'}).codiceComune).toThrow() expect(()=>new CodiceFiscale({...mockUserData, comune: 'Gotham', provincia: 'EE'}).codiceComune).toThrow() }) test("calcola il codice di controllo", ()=>{ expect(cf.codiceControllo).toBe('Z') }) test("calcola correttamente il codice fiscale", ()=>{ expect(cf.toString()).toBe('RSSMRC80A01F205Z') expect(new CodiceFiscale({ nome: 'Luca', cognome: 'Moreno', sesso: 'M', giorno: 1, mese: 1, anno: 2000, comune: 'Roma', provincia: 'RM' }).toString()).toBe('MRNLCU00A01H501J') expect(new CodiceFiscale({ nome: 'Mario', cognome: 'Rossi', sesso: 'M', giorno: 1, mese: 1, anno: 1980, comune: 'Bolzano', provincia: 'BZ' }).toString()).toBe('RSSMRA80A01A952F') expect(new CodiceFiscale({ nome: 'Mario', cognome: 'Rossi', sesso: 'M', giorno: 23, mese: 6, anno: 1980, comune: 'Roma', provincia: 'RM' }).toString()).toBe('RSSMRA80H23H501T') expect(new CodiceFiscale({ nome: 'Maria', cognome: 'Rossi', sesso: 'F', giorno: 23, mese: 6, anno: 1980, comune: 'Roma', provincia: 'RM' }).toString()).toBe('RSSMRA80H63H501X') expect(new CodiceFiscale({ nome: 'Maria', cognome: 'Rossi', sesso: 'F', giorno: 23, mese: 6, anno: 1980, comune: 'Acquacanina', provincia: 'MC' }).toString()).toBe("RSSMRA80H63A031H") expect(new CodiceFiscale({ nome: 'Maria', cognome: 'Rossi', sesso: 'F', giorno: 23, mese: 6, anno: 1980, comune: 'Vimercate', provincia: 'MI' }).toString()).toBe("RSSMRA80H63M052A") }) })