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)
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.findLocationCode(codiceFiscaleObject.birthplace, codiceFiscaleObject.birthplaceProvincia)
code += this.getCheckCode(code)
return code
@ -83,18 +83,20 @@ class CodiceFiscale {
return String(year + month + day)
}
static findComuneCode (birthplace, birthplaceProvincia) {
if (!this.CODICI_CATASTALI[birthplaceProvincia]) {
throw new Error('Provincia not found')
static findLocationCode (location, areaCode) {
if (!this.CODICI_CATASTALI[this.normalizeString(areaCode)]) {
throw new Error('Area code not found')
}
const comune = this.CODICI_CATASTALI[birthplaceProvincia]
.find(comune => {
return this.normalizeString(comune[0]) === this.normalizeString(birthplace)
})
if (comune === undefined) {
throw new Error('Comune 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 comune[1]
return locationCode
}
static normalizeString (str) {

View File

@ -101,39 +101,39 @@ describe('CodiceFiscale.compute', () => {
birthplaceProvincia: 'EE'
})
}
expect(comuneInventato).toThrowError('Comune not found')
expect(comuneInventato).toThrowError('Location not found')
})
})
describe('CodiceFiscale.findComuneCode', () => {
describe('CodiceFiscale.findLocationCode', () => {
test('è definito', () => {
expect(CodiceFiscale.findComuneCode).not.toBe(undefined)
expect(CodiceFiscale.findLocationCode).not.toBe(undefined)
})
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', () => {
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', () => {
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', () => {
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', () => {
var comuneInventato = function () {
CodiceFiscale.findComuneCode('Pufflandia', 'RM')
CodiceFiscale.findLocationCode('Foo', 'RM')
}
expect(comuneInventato).toThrowError('Comune not found')
expect(comuneInventato).toThrowError('Location not found')
})
})