full es6 refactor

This commit is contained in:
Marco Pesani 2017-12-19 10:59:00 +01:00
parent 30c5c99414
commit 709e487fa7
5 changed files with 181 additions and 214 deletions

File diff suppressed because one or more lines are too long

View File

@ -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
})
}

View File

@ -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>",

View File

@ -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

View File

@ -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);
});
});