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",
|
||||
"test": "jest"
|
||||
},
|
||||
"standard": {
|
||||
"ignore": [
|
||||
"**/*.spec.js"
|
||||
]
|
||||
},
|
||||
"author": "Luca Vandro <lucavandro@gmail.com>",
|
||||
"contributors": [
|
||||
"Walter Barbagallo <brb.walter@gmail.com>",
|
||||
|
31
src/index.js
31
src/index.js
@ -7,21 +7,12 @@ import {
|
||||
CODICI_CATASTALI
|
||||
} from './constants'
|
||||
|
||||
class CodiceFiscale {
|
||||
static compute ({
|
||||
name,
|
||||
surname,
|
||||
gender,
|
||||
day,
|
||||
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)
|
||||
export default class CodiceFiscale {
|
||||
static compute (codiceFiscaleObject) {
|
||||
let code = this.surnameCode(codiceFiscaleObject.surname)
|
||||
code += this.nameCode(codiceFiscaleObject.name)
|
||||
code += this.dateCode(codiceFiscaleObject.day, codiceFiscaleObject.month, codiceFiscaleObject.year, codiceFiscaleObject.gender)
|
||||
code += this.findComuneCode(codiceFiscaleObject.birthplace, codiceFiscaleObject.birthplaceProvincia)
|
||||
code += this.getCheckCode(code)
|
||||
|
||||
return code
|
||||
@ -95,7 +86,7 @@ class CodiceFiscale {
|
||||
var comune = CODICI_CATASTALI[birthplaceProvincia][i]
|
||||
if (comune[0] === birthplace.trim().toUpperCase()) return comune[1]
|
||||
}
|
||||
throw Error('Comune not found')
|
||||
throw new Error('Comune not found')
|
||||
}
|
||||
|
||||
static getOmocodie (code) {
|
||||
@ -120,8 +111,8 @@ class CodiceFiscale {
|
||||
if (isValid) {
|
||||
codiceFiscale = codiceFiscale.toUpperCase()
|
||||
} else {
|
||||
throw new TypeError(
|
||||
"'" + codiceFiscale + "' is not a valid Codice Fiscale"
|
||||
throw new Error(
|
||||
'Provided input is not a valid Codice Fiscale'
|
||||
)
|
||||
}
|
||||
|
||||
@ -139,7 +130,7 @@ class CodiceFiscale {
|
||||
}
|
||||
|
||||
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 day = parseInt(codiceFiscale.substr(9, 2))
|
||||
@ -173,5 +164,3 @@ class CodiceFiscale {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default CodiceFiscale
|
||||
|
@ -1,144 +1,197 @@
|
||||
describe("Codice Fiscale", function() {
|
||||
it("esiste un oggetto chiamato CodiceFiscale", function() {
|
||||
expect(CodiceFiscale).not.toBe(undefined);
|
||||
});
|
||||
});
|
||||
import CodiceFiscale from '../src/index'
|
||||
let { describe, test, expect } = global
|
||||
|
||||
describe("CodiceFiscale.compute", function() {
|
||||
it("è definito", function() {
|
||||
expect(CodiceFiscale.compute).not.toBe(undefined);
|
||||
});
|
||||
describe('Codice Fiscale', () => {
|
||||
test('esiste un oggetto chiamato CodiceFiscale', () => {
|
||||
expect(CodiceFiscale).not.toBe(undefined)
|
||||
})
|
||||
})
|
||||
|
||||
it("calcola il codice fiscale", function() {
|
||||
expect(CodiceFiscale.compute("Luca", "Moreno",'M', 1, 1, 2000, "Roma", "RM")).toBe("MRNLCU00A01H501J");
|
||||
});
|
||||
describe('CodiceFiscale.surnameCode', () => {
|
||||
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({
|
||||
name: "Luca",
|
||||
surname: "Moreno",
|
||||
gender: 'M',
|
||||
day: 1,
|
||||
month: 1,
|
||||
year: 2000,
|
||||
birthplace: "Roma",
|
||||
birthplace_provincia:"RM"
|
||||
})).toBe("MRNLCU00A01H501J");
|
||||
});
|
||||
name: 'Luca',
|
||||
surname: 'Moreno',
|
||||
gender: 'M',
|
||||
day: 1,
|
||||
month: 1,
|
||||
year: 2000,
|
||||
birthplace: 'Roma',
|
||||
birthplaceProvincia: 'RM'
|
||||
}))
|
||||
.toBe('MRNLCU00A01H501J')
|
||||
})
|
||||
|
||||
|
||||
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() {
|
||||
test("calcola il codice fiscale di persone nate all'estero", () => {
|
||||
expect(CodiceFiscale.compute({
|
||||
name: "Luca",
|
||||
surname: "Moreno",
|
||||
gender: 'M',
|
||||
day: 1,
|
||||
month: 1,
|
||||
year: 2000,
|
||||
birthplace: "Albania",
|
||||
birthplace_provincia:"EE"
|
||||
})).toBe("MRNLCU00A01Z100P");
|
||||
});
|
||||
name: 'Luca',
|
||||
surname: 'Moreno',
|
||||
gender: 'M',
|
||||
day: 1,
|
||||
month: 1,
|
||||
year: 2000,
|
||||
birthplace: 'Albania',
|
||||
birthplaceProvincia: 'EE'
|
||||
}))
|
||||
.toBe('MRNLCU00A01Z100P')
|
||||
})
|
||||
|
||||
it("se il comune non esiste lancia un eccezione", function() {
|
||||
var comuneInventato = function(){
|
||||
CodiceFiscale.compute("Luca", "Moreno",'M', 1, 1, 2000, "Pufflandia", "CE");
|
||||
test('se il comune non esiste lancia un eccezione', () => {
|
||||
var comuneInventato = function () {
|
||||
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() {
|
||||
it("è definito", function() {
|
||||
expect(CodiceFiscale.findComuneCode).not.toBe(undefined);
|
||||
});
|
||||
describe('CodiceFiscale.findComuneCode', () => {
|
||||
test('è definito', () => {
|
||||
expect(CodiceFiscale.findComuneCode).not.toBe(undefined)
|
||||
})
|
||||
|
||||
it("trova il codice del comune", function() {
|
||||
expect(CodiceFiscale.findComuneCode("Roma", "RM")).toBe("H501");
|
||||
});
|
||||
test('trova il codice del comune', () => {
|
||||
expect(CodiceFiscale.findComuneCode('Roma', 'RM')).toBe('H501')
|
||||
})
|
||||
|
||||
it("se il comune non esiste lancia un eccezione", function() {
|
||||
var comuneInventato = function(){
|
||||
CodiceFiscale.findComuneCode("Pufflandia", "RM");
|
||||
test('se il comune non esiste lancia un eccezione', () => {
|
||||
var comuneInventato = function () {
|
||||
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() {
|
||||
it("è definito", function() {
|
||||
expect(CodiceFiscale.check).not.toBe(undefined);
|
||||
});
|
||||
test('controlla che sia composto dal almeno 16 valori alfanumerici', () => {
|
||||
expect(CodiceFiscale.check('MRNLCU00A01H501J3')).toBe(false)
|
||||
})
|
||||
|
||||
it("controlla se il codice fiscale è valido", function() {
|
||||
expect(CodiceFiscale.check("MRNLCU00A01H501J")).toBe(true);
|
||||
});
|
||||
test('controlla che il carattere di controllo sia esatto', () => {
|
||||
expect(CodiceFiscale.check('VNDLDL87D07B963G')).toBe(false)
|
||||
})
|
||||
|
||||
it("controlla che sia composto dal non più 16 valori alfanumerici", function() {
|
||||
expect(CodiceFiscale.check("MRNLCU00A01H501JK")).toBe(false);
|
||||
});
|
||||
test('funziona anche in caso di omocodie', () => {
|
||||
expect(CodiceFiscale.check('BNZVCN32S10E57PV')).toBe(true)
|
||||
expect(CodiceFiscale.check('BNZVCNPNSMLERTPX')).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
it("controlla che sia composto dal almeno 16 valori alfanumerici", function() {
|
||||
expect(CodiceFiscale.check("MRNLCU00A01H501J3")).toBe(false);
|
||||
});
|
||||
describe('CodiceFiscale.getOmocodie', () => {
|
||||
test('è definito', () => {
|
||||
expect(CodiceFiscale.getOmocodie).not.toBe(undefined)
|
||||
})
|
||||
|
||||
it("controlla che il carattere di controllo sia esatto", function() {
|
||||
expect(CodiceFiscale.check("VNDLDL87D07B963G")).toBe(false);
|
||||
});
|
||||
test('calcola le omocodie dato un codice fiscale', () => {
|
||||
expect(CodiceFiscale.getOmocodie('BNZVCN32S10E573Z'))
|
||||
.toEqual(expect.arrayContaining(['BNZVCN32S10E57PV', 'BNZVCNPNSMLERTPX']))
|
||||
})
|
||||
})
|
||||
|
||||
it("funziona anche in caso di omocodie", function() {
|
||||
expect(CodiceFiscale.check("BNZVCN32S10E57PV")).toBe(true);
|
||||
expect(CodiceFiscale.check("BNZVCNPNSMLERTPX")).toBe(true);
|
||||
});
|
||||
});
|
||||
describe('Calcolo codice fiscale inverso -> metodo .computeInverse', () => {
|
||||
test('è definito', () => {
|
||||
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() {
|
||||
it("è definito", function() {
|
||||
expect(CodiceFiscale.getOmocodie).not.toBe(undefined);
|
||||
});
|
||||
test("restituisce falso se l'input è stringa formattata male", () => {
|
||||
var notValid = function () {
|
||||
CodiceFiscale.computeInverse('BNZVCN32SC0E573Z')
|
||||
}
|
||||
expect(notValid).toThrowError('Provided input is not a valid Codice Fiscale')
|
||||
})
|
||||
|
||||
it("calcola le omocodie dato un codice fiscale", function() {
|
||||
expect(CodiceFiscale.getOmocodie("BNZVCN32S10E573Z"))
|
||||
.toEqual(jasmine.arrayContaining(["BNZVCN32S10E57PV", "BNZVCNPNSMLERTPX"]));
|
||||
});
|
||||
test('restituisce il genere corretto', () => {
|
||||
expect(CodiceFiscale.computeInverse('MRNLCU00A01H501J').gender).toEqual('M')
|
||||
})
|
||||
|
||||
});
|
||||
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() {
|
||||
it("è definito", function() {
|
||||
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);
|
||||
});
|
||||
});
|
||||
test('restituisce il giorno di nascita come numero compreso tra 1 e 31', () => {
|
||||
expect(CodiceFiscale.computeInverse('MRNLCU00A01H501J').day >= 1 && CodiceFiscale.computeInverse('MRNLCU00A01H501J').day <= 31).toBe(true)
|
||||
})
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user