improved location validation

This commit is contained in:
Marco Pesani 2017-12-19 13:48:26 +01:00
parent 278fff8d95
commit 90abd3505d
6 changed files with 27 additions and 25 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -14,7 +14,7 @@ class CodiceFiscale {
let code = this.surnameCode(codiceFiscaleObject.surname) let code = this.surnameCode(codiceFiscaleObject.surname)
code += this.nameCode(codiceFiscaleObject.name) code += this.nameCode(codiceFiscaleObject.name)
code += this.dateCode(codiceFiscaleObject.day, codiceFiscaleObject.month, codiceFiscaleObject.year, codiceFiscaleObject.gender) code += this.dateCode(codiceFiscaleObject.day, codiceFiscaleObject.month, codiceFiscaleObject.year, codiceFiscaleObject.gender)
code += this.findComuneCode(codiceFiscaleObject.birthplace, codiceFiscaleObject.birthplaceProvincia) code += this.findLocationCode(codiceFiscaleObject.birthplace, codiceFiscaleObject.birthplaceProvincia)
code += this.getCheckCode(code) code += this.getCheckCode(code)
return code return code
@ -83,18 +83,20 @@ class CodiceFiscale {
return String(year + month + day) return String(year + month + day)
} }
static findComuneCode (birthplace, birthplaceProvincia) { static findLocationCode (location, areaCode) {
if (!this.CODICI_CATASTALI[birthplaceProvincia]) { if (!this.CODICI_CATASTALI[this.normalizeString(areaCode)]) {
throw new Error('Provincia not found') throw new Error('Area code not found')
} }
const comune = this.CODICI_CATASTALI[birthplaceProvincia] const locationCode = this.CODICI_CATASTALI[this.normalizeString(areaCode)]
.find(comune => { .reduce((code, locationTuple) => {
return this.normalizeString(comune[0]) === this.normalizeString(birthplace) return this.normalizeString(locationTuple[0]) === this.normalizeString(location)
}) ? locationTuple[1]
if (comune === undefined) { : code
throw new Error('Comune not found') }, undefined)
if (locationCode == null) {
throw new Error('Location not found')
} }
return comune[1] return locationCode
} }
static normalizeString (str) { static normalizeString (str) {

View File

@ -101,39 +101,39 @@ describe('CodiceFiscale.compute', () => {
birthplaceProvincia: 'EE' birthplaceProvincia: 'EE'
}) })
} }
expect(comuneInventato).toThrowError('Comune not found') expect(comuneInventato).toThrowError('Location not found')
}) })
}) })
describe('CodiceFiscale.findComuneCode', () => { describe('CodiceFiscale.findLocationCode', () => {
test('è definito', () => { test('è definito', () => {
expect(CodiceFiscale.findComuneCode).not.toBe(undefined) expect(CodiceFiscale.findLocationCode).not.toBe(undefined)
}) })
test('trova il codice del comune', () => { test('trova il codice del comune', () => {
expect(CodiceFiscale.findComuneCode('Roma', 'RM')).toBe('H501') expect(CodiceFiscale.findLocationCode('Roma', 'RM')).toBe('H501')
}) })
test('trova il codice di un comune che contiene apostrofi', () => { test('trova il codice di un comune che contiene apostrofi', () => {
expect(CodiceFiscale.findComuneCode("Sant'Angelo Romano", 'RM')).toBe('I284') expect(CodiceFiscale.findLocationCode("Sant'Angelo Romano", 'RM')).toBe('I284')
}) })
test('trova il codice di un comune che contiene lettere accentate', () => { test('trova il codice di un comune che contiene lettere accentate', () => {
expect(CodiceFiscale.findComuneCode('Riccò del Golfo di Spezia', 'SP')).toBe('H275') expect(CodiceFiscale.findLocationCode('Riccò del Golfo di Spezia', 'SP')).toBe('H275')
}) })
test('se la provincia non esiste lancia un eccezione', () => { test('se la provincia non esiste lancia un eccezione', () => {
var comuneInventato = function () { var comuneInventato = function () {
CodiceFiscale.findComuneCode('Pufflandia', 'XX') CodiceFiscale.findLocationCode('Foo', 'Bar')
} }
expect(comuneInventato).toThrowError('Provincia not found') expect(comuneInventato).toThrowError('Area code not found')
}) })
test('se il comune non esiste lancia un eccezione', () => { test('se il comune non esiste lancia un eccezione', () => {
var comuneInventato = function () { var comuneInventato = function () {
CodiceFiscale.findComuneCode('Pufflandia', 'RM') CodiceFiscale.findLocationCode('Foo', 'RM')
} }
expect(comuneInventato).toThrowError('Comune not found') expect(comuneInventato).toThrowError('Location not found')
}) })
}) })