mirror of
https://github.com/danog/CodiceFiscaleJS.git
synced 2024-11-26 20:14:55 +01:00
full es6 refactor
This commit is contained in:
parent
30c5c99414
commit
709e487fa7
2
dist/codice.fiscale.js
vendored
2
dist/codice.fiscale.js
vendored
File diff suppressed because one or more lines are too long
@ -1,70 +0,0 @@
|
|||||||
// Karma configuration
|
|
||||||
// Generated on Wed Mar 16 2016 15:24:23 GMT+0100 (CET)
|
|
||||||
|
|
||||||
module.exports = function(config) {
|
|
||||||
config.set({
|
|
||||||
|
|
||||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
|
||||||
basePath: '',
|
|
||||||
|
|
||||||
|
|
||||||
// frameworks to use
|
|
||||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
|
||||||
frameworks: ['jasmine'],
|
|
||||||
|
|
||||||
|
|
||||||
// list of files / patterns to load in the browser
|
|
||||||
files: [
|
|
||||||
'dist/codice.fiscale.js',
|
|
||||||
'tests/specs.js',
|
|
||||||
],
|
|
||||||
|
|
||||||
|
|
||||||
// list of files to exclude
|
|
||||||
exclude: [
|
|
||||||
],
|
|
||||||
|
|
||||||
|
|
||||||
// preprocess matching files before serving them to the browser
|
|
||||||
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
|
||||||
preprocessors: {
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
// test results reporter to use
|
|
||||||
// possible values: 'dots', 'progress'
|
|
||||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
|
||||||
reporters: ['progress'],
|
|
||||||
|
|
||||||
|
|
||||||
// web server port
|
|
||||||
port: 9876,
|
|
||||||
|
|
||||||
|
|
||||||
// enable / disable colors in the output (reporters and logs)
|
|
||||||
colors: true,
|
|
||||||
|
|
||||||
|
|
||||||
// level of logging
|
|
||||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
|
||||||
logLevel: config.LOG_INFO,
|
|
||||||
|
|
||||||
|
|
||||||
// enable / disable watching file and executing tests whenever any file changes
|
|
||||||
autoWatch: true,
|
|
||||||
|
|
||||||
|
|
||||||
// start these browsers
|
|
||||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
|
||||||
browsers: ['Chrome'],
|
|
||||||
|
|
||||||
|
|
||||||
// Continuous Integration mode
|
|
||||||
// if true, Karma captures browsers, runs the tests and exits
|
|
||||||
singleRun: false,
|
|
||||||
|
|
||||||
// Concurrency level
|
|
||||||
// how many browser should be started simultaneous
|
|
||||||
concurrency: Infinity
|
|
||||||
})
|
|
||||||
}
|
|
@ -27,11 +27,6 @@
|
|||||||
"pretest": "npm run build",
|
"pretest": "npm run build",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"standard": {
|
|
||||||
"ignore": [
|
|
||||||
"**/*.spec.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"author": "Luca Vandro <lucavandro@gmail.com>",
|
"author": "Luca Vandro <lucavandro@gmail.com>",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Walter Barbagallo <brb.walter@gmail.com>",
|
"Walter Barbagallo <brb.walter@gmail.com>",
|
||||||
|
31
src/index.js
31
src/index.js
@ -7,21 +7,12 @@ import {
|
|||||||
CODICI_CATASTALI
|
CODICI_CATASTALI
|
||||||
} from './constants'
|
} from './constants'
|
||||||
|
|
||||||
class CodiceFiscale {
|
export default class CodiceFiscale {
|
||||||
static compute ({
|
static compute (codiceFiscaleObject) {
|
||||||
name,
|
let code = this.surnameCode(codiceFiscaleObject.surname)
|
||||||
surname,
|
code += this.nameCode(codiceFiscaleObject.name)
|
||||||
gender,
|
code += this.dateCode(codiceFiscaleObject.day, codiceFiscaleObject.month, codiceFiscaleObject.year, codiceFiscaleObject.gender)
|
||||||
day,
|
code += this.findComuneCode(codiceFiscaleObject.birthplace, codiceFiscaleObject.birthplaceProvincia)
|
||||||
month,
|
|
||||||
year,
|
|
||||||
birthplace,
|
|
||||||
birthplaceProvincia
|
|
||||||
}) {
|
|
||||||
let code = this.surnameCode(surname)
|
|
||||||
code += this.nameCode(name)
|
|
||||||
code += this.dateCode(day, month, year, gender)
|
|
||||||
code += this.findComuneCode(birthplace, birthplaceProvincia)
|
|
||||||
code += this.getCheckCode(code)
|
code += this.getCheckCode(code)
|
||||||
|
|
||||||
return code
|
return code
|
||||||
@ -95,7 +86,7 @@ class CodiceFiscale {
|
|||||||
var comune = CODICI_CATASTALI[birthplaceProvincia][i]
|
var comune = CODICI_CATASTALI[birthplaceProvincia][i]
|
||||||
if (comune[0] === birthplace.trim().toUpperCase()) return comune[1]
|
if (comune[0] === birthplace.trim().toUpperCase()) return comune[1]
|
||||||
}
|
}
|
||||||
throw Error('Comune not found')
|
throw new Error('Comune not found')
|
||||||
}
|
}
|
||||||
|
|
||||||
static getOmocodie (code) {
|
static getOmocodie (code) {
|
||||||
@ -120,8 +111,8 @@ class CodiceFiscale {
|
|||||||
if (isValid) {
|
if (isValid) {
|
||||||
codiceFiscale = codiceFiscale.toUpperCase()
|
codiceFiscale = codiceFiscale.toUpperCase()
|
||||||
} else {
|
} else {
|
||||||
throw new TypeError(
|
throw new Error(
|
||||||
"'" + codiceFiscale + "' is not a valid Codice Fiscale"
|
'Provided input is not a valid Codice Fiscale'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +130,7 @@ class CodiceFiscale {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var monthChar = codiceFiscale.substr(8, 1)
|
var monthChar = codiceFiscale.substr(8, 1)
|
||||||
var month = this.MONTH_CODES.indexOf(monthChar) + 1
|
var month = MONTH_CODES.indexOf(monthChar) + 1
|
||||||
|
|
||||||
var gender = 'M'
|
var gender = 'M'
|
||||||
var day = parseInt(codiceFiscale.substr(9, 2))
|
var day = parseInt(codiceFiscale.substr(9, 2))
|
||||||
@ -173,5 +164,3 @@ class CodiceFiscale {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CodiceFiscale
|
|
||||||
|
@ -1,144 +1,197 @@
|
|||||||
describe("Codice Fiscale", function() {
|
import CodiceFiscale from '../src/index'
|
||||||
it("esiste un oggetto chiamato CodiceFiscale", function() {
|
let { describe, test, expect } = global
|
||||||
expect(CodiceFiscale).not.toBe(undefined);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("CodiceFiscale.compute", function() {
|
describe('Codice Fiscale', () => {
|
||||||
it("è definito", function() {
|
test('esiste un oggetto chiamato CodiceFiscale', () => {
|
||||||
expect(CodiceFiscale.compute).not.toBe(undefined);
|
expect(CodiceFiscale).not.toBe(undefined)
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it("calcola il codice fiscale", function() {
|
describe('CodiceFiscale.surnameCode', () => {
|
||||||
expect(CodiceFiscale.compute("Luca", "Moreno",'M', 1, 1, 2000, "Roma", "RM")).toBe("MRNLCU00A01H501J");
|
test('è definito', () => {
|
||||||
});
|
expect(CodiceFiscale.surnameCode).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
it("calcola il codice fiscale da un oggetto JSON", function() {
|
test('restituisce il corretto risultato in caso di sufficienti consonanti', () => {
|
||||||
|
expect(CodiceFiscale.surnameCode('Moreno')).toBe('MRN')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('restituisce il corretto risultato in caso di insufficienti consonanti', () => {
|
||||||
|
expect(CodiceFiscale.surnameCode('Julea')).toBe('JLU')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('CodiceFiscale.nameCode', () => {
|
||||||
|
test('è definito', () => {
|
||||||
|
expect(CodiceFiscale.nameCode).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('restituisce il corretto risultato in caso di sufficienti consonanti', () => {
|
||||||
|
expect(CodiceFiscale.nameCode('Marco')).toBe('MRC')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('restituisce il corretto risultato in caso di insufficienti consonanti', () => {
|
||||||
|
expect(CodiceFiscale.nameCode('Luca')).toBe('LCU')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('CodiceFiscale.dateCode', () => {
|
||||||
|
test('è definito', () => {
|
||||||
|
expect(CodiceFiscale.dateCode).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('restituisce il corretto risultato', () => {
|
||||||
|
expect(CodiceFiscale.dateCode(1, 1, 2000, 'M')).toBe('00A01')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('CodiceFiscale.getCheckCode', () => {
|
||||||
|
test('è definito', () => {
|
||||||
|
expect(CodiceFiscale.getCheckCode).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('restituisce il corretto risultato', () => {
|
||||||
|
expect(CodiceFiscale.getCheckCode('MRNLCU00A01H501')).toBe('J')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('CodiceFiscale.compute', () => {
|
||||||
|
test('è definito', () => {
|
||||||
|
expect(CodiceFiscale.compute).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('calcola il codice fiscale', () => {
|
||||||
expect(CodiceFiscale.compute({
|
expect(CodiceFiscale.compute({
|
||||||
name: "Luca",
|
name: 'Luca',
|
||||||
surname: "Moreno",
|
surname: 'Moreno',
|
||||||
gender: 'M',
|
gender: 'M',
|
||||||
day: 1,
|
day: 1,
|
||||||
month: 1,
|
month: 1,
|
||||||
year: 2000,
|
year: 2000,
|
||||||
birthplace: "Roma",
|
birthplace: 'Roma',
|
||||||
birthplace_provincia:"RM"
|
birthplaceProvincia: 'RM'
|
||||||
})).toBe("MRNLCU00A01H501J");
|
}))
|
||||||
});
|
.toBe('MRNLCU00A01H501J')
|
||||||
|
})
|
||||||
|
|
||||||
|
test("calcola il codice fiscale di persone nate all'estero", () => {
|
||||||
it("calcola il codice fiscale di persone nate all'estero", function() {
|
|
||||||
expect(CodiceFiscale.compute("Luca", "Moreno",'M', 1, 1, 2000, "Albania", "EE")).toBe("MRNLCU00A01Z100P");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("calcola il codice fiscale all'estero da un oggetto JSON", function() {
|
|
||||||
expect(CodiceFiscale.compute({
|
expect(CodiceFiscale.compute({
|
||||||
name: "Luca",
|
name: 'Luca',
|
||||||
surname: "Moreno",
|
surname: 'Moreno',
|
||||||
gender: 'M',
|
gender: 'M',
|
||||||
day: 1,
|
day: 1,
|
||||||
month: 1,
|
month: 1,
|
||||||
year: 2000,
|
year: 2000,
|
||||||
birthplace: "Albania",
|
birthplace: 'Albania',
|
||||||
birthplace_provincia:"EE"
|
birthplaceProvincia: 'EE'
|
||||||
})).toBe("MRNLCU00A01Z100P");
|
}))
|
||||||
});
|
.toBe('MRNLCU00A01Z100P')
|
||||||
|
})
|
||||||
|
|
||||||
it("se il comune non esiste lancia un eccezione", function() {
|
test('se il comune non esiste lancia un eccezione', () => {
|
||||||
var comuneInventato = function () {
|
var comuneInventato = function () {
|
||||||
CodiceFiscale.compute("Luca", "Moreno",'M', 1, 1, 2000, "Pufflandia", "CE");
|
CodiceFiscale.compute({
|
||||||
|
name: 'Luca',
|
||||||
|
surname: 'Moreno',
|
||||||
|
gender: 'M',
|
||||||
|
day: 1,
|
||||||
|
month: 1,
|
||||||
|
year: 2000,
|
||||||
|
birthplace: 'Foo',
|
||||||
|
birthplaceProvincia: 'EE'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
expect(comuneInventato).toThrowError("Comune not found");
|
expect(comuneInventato).toThrowError('Comune not found')
|
||||||
});
|
})
|
||||||
});
|
})
|
||||||
|
|
||||||
describe("CodiceFiscale.findComuneCode", function() {
|
describe('CodiceFiscale.findComuneCode', () => {
|
||||||
it("è definito", function() {
|
test('è definito', () => {
|
||||||
expect(CodiceFiscale.findComuneCode).not.toBe(undefined);
|
expect(CodiceFiscale.findComuneCode).not.toBe(undefined)
|
||||||
});
|
})
|
||||||
|
|
||||||
it("trova il codice del comune", function() {
|
test('trova il codice del comune', () => {
|
||||||
expect(CodiceFiscale.findComuneCode("Roma", "RM")).toBe("H501");
|
expect(CodiceFiscale.findComuneCode('Roma', 'RM')).toBe('H501')
|
||||||
});
|
})
|
||||||
|
|
||||||
it("se il comune non esiste lancia un eccezione", function() {
|
test('se il comune non esiste lancia un eccezione', () => {
|
||||||
var comuneInventato = function () {
|
var comuneInventato = function () {
|
||||||
CodiceFiscale.findComuneCode("Pufflandia", "RM");
|
CodiceFiscale.findComuneCode('Pufflandia', 'RM')
|
||||||
}
|
}
|
||||||
expect(comuneInventato).toThrowError("Comune not found");
|
expect(comuneInventato).toThrowError('Comune not found')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
});
|
describe('CodiceFiscale.check', () => {
|
||||||
|
test('è definito', () => {
|
||||||
|
expect(CodiceFiscale.check).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('controlla se il codice fiscale è valido', () => {
|
||||||
|
expect(CodiceFiscale.check('MRNLCU00A01H501J')).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('controlla che sia composto dal non più 16 valori alfanumerici', () => {
|
||||||
|
expect(CodiceFiscale.check('MRNLCU00A01H501JK')).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
describe("CodiceFiscale.check", function() {
|
test('controlla che sia composto dal almeno 16 valori alfanumerici', () => {
|
||||||
it("è definito", function() {
|
expect(CodiceFiscale.check('MRNLCU00A01H501J3')).toBe(false)
|
||||||
expect(CodiceFiscale.check).not.toBe(undefined);
|
})
|
||||||
});
|
|
||||||
|
|
||||||
it("controlla se il codice fiscale è valido", function() {
|
test('controlla che il carattere di controllo sia esatto', () => {
|
||||||
expect(CodiceFiscale.check("MRNLCU00A01H501J")).toBe(true);
|
expect(CodiceFiscale.check('VNDLDL87D07B963G')).toBe(false)
|
||||||
});
|
})
|
||||||
|
|
||||||
it("controlla che sia composto dal non più 16 valori alfanumerici", function() {
|
test('funziona anche in caso di omocodie', () => {
|
||||||
expect(CodiceFiscale.check("MRNLCU00A01H501JK")).toBe(false);
|
expect(CodiceFiscale.check('BNZVCN32S10E57PV')).toBe(true)
|
||||||
});
|
expect(CodiceFiscale.check('BNZVCNPNSMLERTPX')).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it("controlla che sia composto dal almeno 16 valori alfanumerici", function() {
|
describe('CodiceFiscale.getOmocodie', () => {
|
||||||
expect(CodiceFiscale.check("MRNLCU00A01H501J3")).toBe(false);
|
test('è definito', () => {
|
||||||
});
|
expect(CodiceFiscale.getOmocodie).not.toBe(undefined)
|
||||||
|
})
|
||||||
|
|
||||||
it("controlla che il carattere di controllo sia esatto", function() {
|
test('calcola le omocodie dato un codice fiscale', () => {
|
||||||
expect(CodiceFiscale.check("VNDLDL87D07B963G")).toBe(false);
|
expect(CodiceFiscale.getOmocodie('BNZVCN32S10E573Z'))
|
||||||
});
|
.toEqual(expect.arrayContaining(['BNZVCN32S10E57PV', 'BNZVCNPNSMLERTPX']))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it("funziona anche in caso di omocodie", function() {
|
describe('Calcolo codice fiscale inverso -> metodo .computeInverse', () => {
|
||||||
expect(CodiceFiscale.check("BNZVCN32S10E57PV")).toBe(true);
|
test('è definito', () => {
|
||||||
expect(CodiceFiscale.check("BNZVCNPNSMLERTPX")).toBe(true);
|
expect(CodiceFiscale.computeInverse).not.toBe(undefined)
|
||||||
});
|
})
|
||||||
});
|
|
||||||
|
|
||||||
|
test("se l'input non è una stringa lancia un eccezione", () => {
|
||||||
|
var notAString = function () {
|
||||||
|
CodiceFiscale.computeInverse(0)
|
||||||
|
}
|
||||||
|
expect(notAString).toThrowError('Provided input is not a valid Codice Fiscale')
|
||||||
|
})
|
||||||
|
|
||||||
describe("CodiceFiscale.getOmocodie", function() {
|
test("restituisce falso se l'input è stringa formattata male", () => {
|
||||||
it("è definito", function() {
|
var notValid = function () {
|
||||||
expect(CodiceFiscale.getOmocodie).not.toBe(undefined);
|
CodiceFiscale.computeInverse('BNZVCN32SC0E573Z')
|
||||||
});
|
}
|
||||||
|
expect(notValid).toThrowError('Provided input is not a valid Codice Fiscale')
|
||||||
|
})
|
||||||
|
|
||||||
it("calcola le omocodie dato un codice fiscale", function() {
|
test('restituisce il genere corretto', () => {
|
||||||
expect(CodiceFiscale.getOmocodie("BNZVCN32S10E573Z"))
|
expect(CodiceFiscale.computeInverse('MRNLCU00A01H501J').gender).toEqual('M')
|
||||||
.toEqual(jasmine.arrayContaining(["BNZVCN32S10E57PV", "BNZVCNPNSMLERTPX"]));
|
})
|
||||||
});
|
|
||||||
|
|
||||||
});
|
test('restituisce la città natale corretta', () => {
|
||||||
|
expect(CodiceFiscale.computeInverse('MRNLCU00A01H501J').birthplace).toEqual('ROMA')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('restituisce la provincia della città natale corretta', () => {
|
||||||
|
expect(CodiceFiscale.computeInverse('MRNLCU00A01H501J').birthplaceProvincia).toEqual('RM')
|
||||||
|
})
|
||||||
|
|
||||||
describe("Calcolo codice fiscale inverso -> metodo .computeInverse", function() {
|
test('restituisce il giorno di nascita come numero compreso tra 1 e 31', () => {
|
||||||
it("è definito", function() {
|
expect(CodiceFiscale.computeInverse('MRNLCU00A01H501J').day >= 1 && CodiceFiscale.computeInverse('MRNLCU00A01H501J').day <= 31).toBe(true)
|
||||||
expect(CodiceFiscale.computeInverse).not.toBe(undefined);
|
})
|
||||||
});
|
})
|
||||||
|
|
||||||
it("restituisce falso se l'input non è stringa", function() {
|
|
||||||
expect(CodiceFiscale.computeInverse(null)).toEqual(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("restituisce falso se l'input è stringa formattata male", function() {
|
|
||||||
expect(CodiceFiscale.computeInverse("BNZVCN32SC0E573Z")).toEqual(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("restituisce il genere corretto", function() {
|
|
||||||
expect(CodiceFiscale.computeInverse("MRNLCU00A01H501J").gender).toEqual(jasmine.arrayContaining(["M", "MASCHIO"]));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("restituisce la città natale corretta", function() {
|
|
||||||
expect(CodiceFiscale.computeInverse("MRNLCU00A01H501J").birthplace).toEqual('ROMA');
|
|
||||||
});
|
|
||||||
|
|
||||||
it("restituisce la provincia della città natale corretta", function() {
|
|
||||||
expect(CodiceFiscale.computeInverse("MRNLCU00A01H501J").birthplace_provincia).toEqual('RM');
|
|
||||||
});
|
|
||||||
|
|
||||||
it("restituisce il giorno di nascita come numero compreso tra 1 e 31", function() {
|
|
||||||
expect(CodiceFiscale.computeInverse("MRNLCU00A01H501J").day >= 1 && CodiceFiscale.computeInverse("MRNLCU00A01H501J").day <= 31).toBe(true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
Loading…
Reference in New Issue
Block a user