Merge pull request #8 from marcopesani/dev/es6

Dev/es6
This commit is contained in:
Luca Adalberto Vandro 2017-12-19 15:43:24 +01:00 committed by GitHub
commit 63ba60765b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 13823 additions and 34483 deletions

3
.babelrc Normal file
View File

@ -0,0 +1,3 @@
{
"presets": ["env"]
}

1
dist/codice.fiscale.amd.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/codice.fiscale.commonjs2.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/codice.fiscale.umd.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/codice.fiscale.var.js vendored Normal file

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

5836
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,36 +1,45 @@
{
"name": "codice-fiscale-js",
"version": "1.1.1",
"description": "Calcolo del codice fiscale",
"main": "lib/codice.fiscale.js",
"version": "1.2.0",
"description": "ES6 implementation of codice-fiscale-js",
"main": "dist/codice.fiscale.umd.js",
"repository": {
"type": "git",
"url": "git://github.com/lucavandro/CodiceFiscaleJS.git"
"url": "git://github.com/marcopesani/CodiceFiscaleJS.git"
},
"directories": {
"test": "tests"
},
"dependencies": {},
"dependencies": {
"lodash.deburr": "^4.1.0"
},
"devDependencies": {
"jasmine-core": "^2.4.1",
"karma": "^0.13.22",
"karma-chrome-launcher": "^0.2.2",
"karma-jasmine": "^0.3.7",
"karma-phantomjs-launcher": "^1.0.0",
"phantomjs-prebuilt": "^2.1.5",
"typescript": "^2.5.2",
"uglify-js": "^2.8.11",
"uglifyjs-webpack-plugin": "^0.3.0",
"webpack": "^2.2.1"
"babel-core": "^6.26.0",
"babel-jest": "^22.0.1",
"babel-loader": "^7.1.2",
"babel-preset-env": "^1.6.1",
"eslint": "^3.0.0",
"jest": "^22.0.1",
"parallel-webpack": "^2.2.0",
"regenerator-runtime": "^0.11.1",
"request": "^2.83.0",
"standard": "^10.0.3",
"webpack": "^2.7.0"
},
"scripts": {
"build": "webpack",
"pretest": "npm run build",
"test": "npm run build && karma start"
"test": "standard && jest"
},
"author": "Luca Vandro <lucavandro@gmail.com>",
"contributors": [
"Walter Barbagallo <brb.walter@gmail.com>"
"Walter Barbagallo <brb.walter@gmail.com>",
"Marco Pesani <marco.pesani@gmail.com>"
],
"license": "MIT"
}
"license": "MIT",
"standard": {
"ignore": [
"dist/"
]
}
}

View File

@ -23,11 +23,6 @@ Compute a codice fiscale given:
- Place of birth (String)
- Province of birth (String)
```js
var cf = CodiceFiscale.compute("Enzo","Righi","M",24,7,1957,"Napoli", "NA");
```
or
```js
var cf = CodiceFiscale.compute({
name: "Enzo",
@ -43,11 +38,6 @@ var cf = CodiceFiscale.compute({
===
Use the italian name of the foreign country (e.g. Francia, for France) as birthplace
and "EE" as birthplace_provincia
```js
var cf = CodiceFiscale.compute("Enzo","Righi","M",24,7,1957,"Francia", "EE");
```
or
```js
var cf = CodiceFiscale.compute({
name: "Enzo",
@ -112,4 +102,4 @@ var omocodie = CodiceFiscale.getOmocodie("VNDLDL10A01G410Z");
## Available npm scripts:
- `npm run build`: build the bundle into `dist` directory.
- `npm run test`: launch the karma tests.
- `npm run test`: launch the jest tests.

File diff suppressed because it is too large Load Diff

View File

@ -1,201 +0,0 @@
const catastalCodes = require('./catastal-codes.json')
var CodiceFiscale={}
CodiceFiscale.compute=function(name,surname,gender,day,month,year,birthplace, birthplace_provincia){
// Pass an object as parameter
if(
typeof name == 'object'
){
var params = name;
name = params['name'],
surname = params['surname'],
gender = params['gender'],
day = params['day'],
month = params['month'],
year = params['year'],
birthplace = params['birthplace'],
birthplace_provincia = params['birthplace_provincia'];
}
var code=
this.surnameCode(surname)+
this.nameCode(name)+
this.dateCode(day,month,year,gender)+
this.findComuneCode(birthplace, birthplace_provincia);
code+=this.getCheckCode(code);
return code;
}
CodiceFiscale.check = function(codiceFiscale){
if(typeof codiceFiscale !== 'string') return false;
codiceFiscale = codiceFiscale.toUpperCase();
if(codiceFiscale.length !== 16) return false;
var expectedCheckCode = codiceFiscale.charAt(15);
var cf = codiceFiscale.slice(0,15);
return CodiceFiscale.getCheckCode(cf) == expectedCheckCode;
}
CodiceFiscale.getCheckCode=function(codiceFiscale){
var val=0;
for(var i=0; i<15 ;i++){
var c=codiceFiscale[i];
val+= i%2 ? this.CHECK_CODE_EVEN[c] : this.CHECK_CODE_ODD[c];
}
val=val%26;
return this.CHECK_CODE_CHARS.charAt(val);
}
CodiceFiscale.estraiConsonanti=function(str){
return str.replace(/[^BCDFGHJKLMNPQRSTVWXYZ]/gi,'');
}
CodiceFiscale.estraiVocali=function(str){
return str.replace(/[^AEIOU]/gi,'');
}
CodiceFiscale.surnameCode=function(surname){
var code_surname = this.estraiConsonanti(surname) + this.estraiVocali(surname) + 'XXX';
return code_surname.substr(0,3).toUpperCase();
}
CodiceFiscale.nameCode=function(name){
var codNome = this.estraiConsonanti(name);
if(codNome.length>=4){
codNome= codNome.charAt(0) + codNome.charAt(2) + codNome.charAt(3);
}else{
codNome+= this.estraiVocali(name) + 'XXX';
codNome=codNome.substr(0,3);
}
return codNome.toUpperCase();
}
CodiceFiscale.dateCode=function(gg,mm,aa,gender){
var date=new Date();
date.setYear(aa);
date.setMonth(mm-1);
date.setDate(gg);
// Padding year
var year="0"+date.getFullYear();
year=year.substr(year.length-2,2);
var month=this.MONTH_CODES[date.getMonth()];
var day=date.getDate();
if(gender.toUpperCase()=='F') day+=40;
// Padding day
day="0"+day;
day=day.substr(day.length-2,2);
return String(year+month+day);
}
CodiceFiscale.findComuneCode=function(birthplace, birthplace_provincia){
for (var i = this.CODICI_CATASTALI[birthplace_provincia].length - 1; i >= 0; i--) {
var comune = this.CODICI_CATASTALI[birthplace_provincia][i];
if(comune[0] == birthplace.trim().toUpperCase()) return comune[1];
}
throw Error("Comune not found");
}
CodiceFiscale.getOmocodie = function(code){
var results = [];
var lastOmocode = code = code.slice(0,15);
for (var i = code.length - 1; i >= 0; i--) {
var char = code[i];
if(char.match(/\d/)){
lastOmocode = lastOmocode.substr(0,i) + this.OMOCODIA_TABLE[char] + lastOmocode.substr(i+1);
results.push(lastOmocode + this.getCheckCode(lastOmocode));
}
}
return results;
}
CodiceFiscale.computeInverse = function(codiceFiscale) {
var isValid = this.check(codiceFiscale);
if (isValid) {
codiceFiscale = codiceFiscale.toUpperCase();
} else {
throw new TypeError('\'' + codiceFiscale + '\' is not a valid Codice Fiscale');
}
var name = codiceFiscale.substr(3, 3);
var surname = codiceFiscale.substr(0, 3);
var year = codiceFiscale.substr(6, 2);
var yearList = [];
var year19XX = parseInt('19' + year);
var year20XX = parseInt('20' + year);
var currentYear20XX = (new Date()).getFullYear();
yearList.push(year19XX);
if (currentYear20XX - year20XX >= 0) {
yearList.push(year20XX);
}
var monthChar = codiceFiscale.substr(8, 1);
var month = this.MONTH_CODES.indexOf(monthChar) + 1;
var gender = 'M';
var day = parseInt(codiceFiscale.substr(9, 2));
if (day > 31) {
gender = 'F';
day = day - 40;
}
var birthplace = '';
var birthplace_provincia = '';
for (var province in this.CODICI_CATASTALI) {
birthplace = this.CODICI_CATASTALI[province].find(function(code) {
return code[1] === codiceFiscale.substr(11, 4);
})
if (!!birthplace) {
birthplace = birthplace[0];
birthplace_provincia = province;
break
}
}
return {
name: name,
surname: surname,
gender: gender,
day: day,
month: month,
year: yearList,
birthplace: birthplace,
birthplace_provincia: birthplace_provincia
}
}
CodiceFiscale.MONTH_CODES = ['A','B','C','D','E','H','L','M','P','R','S','T'];
CodiceFiscale.CHECK_CODE_ODD = {
0:1, 1:0, 2:5, 3:7, 4:9, 5:13, 6:15, 7:17, 8:19,
9:21, A:1, B:0, C:5, D:7, E:9, F:13, G:15, H:17,
I:19, J:21, K:2, L:4, M:18, N:20, O:11, P:3, Q:6,
R:8, S:12, T:14, U:16, V:10, W:22, X:25, Y:24, Z:23
};
CodiceFiscale.CHECK_CODE_EVEN = {
0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8,
9:9, A:0, B:1, C:2, D:3, E:4, F:5, G:6, H:7,
I:8, J:9, K:10, L:11, M:12, N:13, O:14, P:15, Q:16,
R:17, S:18, T:19, U:20, V:21, W:22, X:23, Y:24, Z:25
};
CodiceFiscale.OMOCODIA_TABLE = {
"0":"L", "1":"M", "2":"N", "3":"P", "4":"Q",
"5":"R", "6":"S", "7":"T", "8":"U", "9":"V"}
CodiceFiscale.CHECK_CODE_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
CodiceFiscale.CODICI_CATASTALI = catastalCodes
module.exports = CodiceFiscale;

8664
src/constants.js Normal file

File diff suppressed because it is too large Load Diff

192
src/index.js Normal file
View File

@ -0,0 +1,192 @@
import {
MONTH_CODES,
CHECK_CODE_ODD,
CHECK_CODE_EVEN,
OMOCODIA_TABLE,
CHECK_CODE_CHARS,
CODICI_CATASTALI
} from './constants'
import deburr from 'lodash.deburr'
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.findLocationCode(codiceFiscaleObject.birthplace, codiceFiscaleObject.birthplaceProvincia)
code += this.getCheckCode(code)
return code
}
static check (codiceFiscale) {
if (typeof codiceFiscale !== 'string') return false
codiceFiscale = codiceFiscale.toUpperCase()
if (codiceFiscale.length !== 16) return false
var expectedCheckCode = codiceFiscale.charAt(15)
var cf = codiceFiscale.slice(0, 15)
return CodiceFiscale.getCheckCode(cf) === expectedCheckCode
}
static estraiConsonanti (str) {
return str.replace(/[^BCDFGHJKLMNPQRSTVWXYZ]/gi, '')
}
static getCheckCode (codiceFiscale) {
let val = 0
for (let i = 0; i < 15; i++) {
const c = codiceFiscale[i]
val += i % 2 ? this.CHECK_CODE_EVEN[c] : this.CHECK_CODE_ODD[c]
}
val = val % 26
return this.CHECK_CODE_CHARS.charAt(val)
}
static estraiVocali (str) {
return str.replace(/[^AEIOU]/gi, '')
}
static surnameCode (surname) {
let codeSurname = this.estraiConsonanti(surname) + this.estraiVocali(surname) + 'XXX'
return codeSurname.substr(0, 3).toUpperCase()
}
static nameCode (name) {
let codNome = this.estraiConsonanti(name)
if (codNome.length >= 4) {
codNome = codNome.charAt(0) + codNome.charAt(2) + codNome.charAt(3)
} else {
codNome += this.estraiVocali(name) + 'XXX'
codNome = codNome.substr(0, 3)
}
return codNome.toUpperCase()
}
static dateCode (gg, mm, aa, gender) {
const date = new Date()
date.setYear(aa)
date.setMonth(mm - 1)
date.setDate(gg)
// Padding year
let year = '0' + date.getFullYear()
year = year.substr(year.length - 2, 2)
let month = this.MONTH_CODES[date.getMonth()]
let day = date.getDate()
if (gender.toUpperCase() === 'F') day += 40
// Padding day
day = '0' + day
day = day.substr(day.length - 2, 2)
return String(year + month + day)
}
static findLocationCode (location, areaCode) {
if (!this.CODICI_CATASTALI[this.normalizeString(areaCode)]) {
throw new Error('Area code not found')
}
const locationCode = this.CODICI_CATASTALI[this.normalizeString(areaCode)]
.reduce((code, locationTuple) => {
return this.normalizeString(locationTuple[0]) === this.normalizeString(location)
? locationTuple[1]
: code
}, undefined)
if (locationCode == null) {
throw new Error('Location not found')
}
return locationCode
}
static normalizeString (str) {
return deburr(str)
.trim()
.toUpperCase()
.replace(/('|\s)/ig, '')
}
static getOmocodie (code) {
var results = []
var lastOmocode = (code = code.slice(0, 15))
for (var i = code.length - 1; i >= 0; i--) {
var char = code[i]
if (char.match(/\d/)) {
lastOmocode =
lastOmocode.substr(0, i) +
this.OMOCODIA_TABLE[char] +
lastOmocode.substr(i + 1)
results.push(lastOmocode + this.getCheckCode(lastOmocode))
}
}
return results
}
static computeInverse (codiceFiscale) {
var isValid = this.check(codiceFiscale)
if (isValid) {
codiceFiscale = codiceFiscale.toUpperCase()
} else {
throw new Error(
'Provided input is not a valid Codice Fiscale'
)
}
var name = codiceFiscale.substr(3, 3)
var surname = codiceFiscale.substr(0, 3)
var year = codiceFiscale.substr(6, 2)
var yearList = []
var year19XX = parseInt('19' + year)
var year20XX = parseInt('20' + year)
var currentYear20XX = new Date().getFullYear()
yearList.push(year19XX)
if (currentYear20XX - year20XX >= 0) {
yearList.push(year20XX)
}
var monthChar = codiceFiscale.substr(8, 1)
var month = MONTH_CODES.indexOf(monthChar) + 1
var gender = 'M'
var day = parseInt(codiceFiscale.substr(9, 2))
if (day > 31) {
gender = 'F'
day = day - 40
}
var birthplace = ''
var birthplaceProvincia = ''
for (var province in this.CODICI_CATASTALI) {
birthplace = this.CODICI_CATASTALI[province].find(function (code) {
return code[1] === codiceFiscale.substr(11, 4)
})
if (birthplace) {
birthplace = birthplace[0]
birthplaceProvincia = province
break
}
}
return {
name,
surname,
gender,
day,
month,
year,
birthplace,
birthplaceProvincia
}
}
}
CodiceFiscale.MONTH_CODES = MONTH_CODES
CodiceFiscale.CHECK_CODE_ODD = CHECK_CODE_ODD
CodiceFiscale.CHECK_CODE_EVEN = CHECK_CODE_EVEN
CodiceFiscale.OMOCODIA_TABLE = OMOCODIA_TABLE
CodiceFiscale.CHECK_CODE_CHARS = CHECK_CODE_CHARS
CodiceFiscale.CODICI_CATASTALI = CODICI_CATASTALI
module.exports = CodiceFiscale

212
tests/index.spec.js Normal file
View File

@ -0,0 +1,212 @@
import CodiceFiscale from '../src/index'
let { describe, test, expect } = global
describe('Codice Fiscale', () => {
test('esiste un oggetto chiamato CodiceFiscale', () => {
expect(CodiceFiscale).not.toBe(undefined)
})
})
describe('CodiceFiscale.surnameCode', () => {
test('è definito', () => {
expect(CodiceFiscale.surnameCode).not.toBe(undefined)
})
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',
birthplaceProvincia: 'RM'
}))
.toBe('MRNLCU00A01H501J')
})
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',
birthplaceProvincia: 'EE'
}))
.toBe('MRNLCU00A01Z100P')
})
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('Location not found')
})
})
describe('CodiceFiscale.findLocationCode', () => {
test('è definito', () => {
expect(CodiceFiscale.findLocationCode).not.toBe(undefined)
})
test('trova il codice del comune', () => {
expect(CodiceFiscale.findLocationCode('Roma', 'RM')).toBe('H501')
})
test('trova il codice di un comune che contiene apostrofi', () => {
expect(CodiceFiscale.findLocationCode("Sant'Angelo Romano", 'RM')).toBe('I284')
})
test('trova il codice di un comune che contiene lettere accentate', () => {
expect(CodiceFiscale.findLocationCode('Riccò del Golfo di Spezia', 'SP')).toBe('H275')
})
test('se la provincia non esiste lancia un eccezione', () => {
var comuneInventato = function () {
CodiceFiscale.findLocationCode('Foo', 'Bar')
}
expect(comuneInventato).toThrowError('Area code not found')
})
test('se il comune non esiste lancia un eccezione', () => {
var comuneInventato = function () {
CodiceFiscale.findLocationCode('Foo', 'RM')
}
expect(comuneInventato).toThrowError('Location 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)
})
test('controlla che sia composto dal almeno 16 valori alfanumerici', () => {
expect(CodiceFiscale.check('MRNLCU00A01H501J3')).toBe(false)
})
test('controlla che il carattere di controllo sia esatto', () => {
expect(CodiceFiscale.check('VNDLDL87D07B963G')).toBe(false)
})
test('funziona anche in caso di omocodie', () => {
expect(CodiceFiscale.check('BNZVCN32S10E57PV')).toBe(true)
expect(CodiceFiscale.check('BNZVCNPNSMLERTPX')).toBe(true)
})
})
describe('CodiceFiscale.getOmocodie', () => {
test('è definito', () => {
expect(CodiceFiscale.getOmocodie).not.toBe(undefined)
})
test('calcola le omocodie dato un codice fiscale', () => {
expect(CodiceFiscale.getOmocodie('BNZVCN32S10E573Z'))
.toEqual(expect.arrayContaining(['BNZVCN32S10E57PV', 'BNZVCNPNSMLERTPX']))
})
})
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')
})
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')
})
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')
})
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)
})
})

View File

@ -1,144 +0,0 @@
describe("Codice Fiscale", function() {
it("esiste un oggetto chiamato CodiceFiscale", function() {
expect(CodiceFiscale).not.toBe(undefined);
});
});
describe("CodiceFiscale.compute", function() {
it("è definito", function() {
expect(CodiceFiscale.compute).not.toBe(undefined);
});
it("calcola il codice fiscale", function() {
expect(CodiceFiscale.compute("Luca", "Moreno",'M', 1, 1, 2000, "Roma", "RM")).toBe("MRNLCU00A01H501J");
});
it("calcola il codice fiscale da un oggetto JSON", function() {
expect(CodiceFiscale.compute({
name: "Luca",
surname: "Moreno",
gender: 'M',
day: 1,
month: 1,
year: 2000,
birthplace: "Roma",
birthplace_provincia:"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() {
expect(CodiceFiscale.compute({
name: "Luca",
surname: "Moreno",
gender: 'M',
day: 1,
month: 1,
year: 2000,
birthplace: "Albania",
birthplace_provincia:"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");
}
expect(comuneInventato).toThrowError("Comune not found");
});
});
describe("CodiceFiscale.findComuneCode", function() {
it("è definito", function() {
expect(CodiceFiscale.findComuneCode).not.toBe(undefined);
});
it("trova il codice del comune", function() {
expect(CodiceFiscale.findComuneCode("Roma", "RM")).toBe("H501");
});
it("se il comune non esiste lancia un eccezione", function() {
var comuneInventato = function(){
CodiceFiscale.findComuneCode("Pufflandia", "RM");
}
expect(comuneInventato).toThrowError("Comune not found");
});
});
describe("CodiceFiscale.check", function() {
it("è definito", function() {
expect(CodiceFiscale.check).not.toBe(undefined);
});
it("controlla se il codice fiscale è valido", function() {
expect(CodiceFiscale.check("MRNLCU00A01H501J")).toBe(true);
});
it("controlla che sia composto dal non più 16 valori alfanumerici", function() {
expect(CodiceFiscale.check("MRNLCU00A01H501JK")).toBe(false);
});
it("controlla che sia composto dal almeno 16 valori alfanumerici", function() {
expect(CodiceFiscale.check("MRNLCU00A01H501J3")).toBe(false);
});
it("controlla che il carattere di controllo sia esatto", function() {
expect(CodiceFiscale.check("VNDLDL87D07B963G")).toBe(false);
});
it("funziona anche in caso di omocodie", function() {
expect(CodiceFiscale.check("BNZVCN32S10E57PV")).toBe(true);
expect(CodiceFiscale.check("BNZVCNPNSMLERTPX")).toBe(true);
});
});
describe("CodiceFiscale.getOmocodie", function() {
it("è definito", function() {
expect(CodiceFiscale.getOmocodie).not.toBe(undefined);
});
it("calcola le omocodie dato un codice fiscale", function() {
expect(CodiceFiscale.getOmocodie("BNZVCN32S10E573Z"))
.toEqual(jasmine.arrayContaining(["BNZVCN32S10E57PV", "BNZVCNPNSMLERTPX"]));
});
});
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);
});
});

View File

@ -1,19 +1,48 @@
const path = require('path'),
UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const path = require('path')
const webpack = require('webpack')
const createVariants = require('parallel-webpack').createVariants
function createConfig (options) {
return {
entry: {
'codice.fiscale': './src/index.js'
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'codice.fiscale.' + options.target + '.js',
library: 'CodiceFiscale',
libraryTarget: options.target
},
module: {
rules: [
{
test: /\.json$/,
loader: 'json-loader'
}, {
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['babel-preset-env']
}
}
}
]
},
plugins: [
new webpack
.optimize
.UglifyJsPlugin()
]
}
}
module.exports = {
entry: {
'codice.fiscale': './src/codice.fiscale.js'
},
output: {
// this will publish the module on the window object in order to support the karma tests
library: 'CodiceFiscale',
libraryTarget: 'window',
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
},
plugins: [
new UglifyJSPlugin()
module.exports = createVariants({
target: [
'var',
'commonjs2',
'umd',
'amd'
]
};
}, createConfig)