handle METHOD_NA/NO_MATCH/PARAMETER errors

This commit is contained in:
Jannis R 2022-05-06 21:51:02 +02:00
parent 9b263bb379
commit 1000e48dfd
No known key found for this signature in database
GPG key ID: 0FE83946296A88A5
4 changed files with 129 additions and 5 deletions

View file

@ -59,11 +59,6 @@ class HafasServerError extends HafasError {
}
}
// https://gist.github.com/derhuerst/79d49c0f04c1c192a5d15756e5af575f/edit
// todo:
// `code: 'METHOD_NA', message: 'HCI Service: service method disabled'`
// "err": "PARAMETER", "errTxt": "HCI Service: parameter invalid"
// "err": "PARAMETER", "errTxt": "HCI Service: parameter invalid","errTxtOut":"Während der Suche ist ein interner Fehler aufgetreten"
const byErrorCode = Object.assign(Object.create(null), {
H_UNKNOWN: {
Error: HafasError,
@ -78,6 +73,12 @@ const byErrorCode = Object.assign(Object.create(null), {
props: {
},
},
METHOD_NA: {
Error: HafasServerError,
message: 'method is not enabled',
props: {
},
},
R0001: {
Error: HafasInvalidRequestError,
message: 'unknown method',
@ -116,6 +117,18 @@ const byErrorCode = Object.assign(Object.create(null), {
props: {
},
},
NO_MATCH: {
Error: HafasNotFoundError,
message: 'no results found',
props: {
},
},
PARAMETER: {
Error: HafasInvalidRequestError,
message: 'invalid parameter',
props: {
},
},
H390: {
Error: HafasInvalidRequestError,
message: 'journeys search: departure/arrival station replaced',

27
test/fixtures/error-no-match.json vendored Normal file
View file

@ -0,0 +1,27 @@
{
"ver": "1.42",
"lang": "deu",
"id": "pz2cgmquimu5pm4k",
"err": "OK",
"graph": {
"id": "standard",
"index": 0
},
"subGraph": {
"id": "global",
"index": 0
},
"view": {
"id": "standard",
"index": 0,
"type": "WGS84"
},
"svcResL": [
{
"meth": "JourneyMatch",
"err": "NO_MATCH",
"errTxt": "Nothing found.",
"errTxtOut": "Während der Suche ist leider ein interner Fehler aufgetreten. Bitte wenden Sie sich an unsere Serviceauskunft unter Tel. 0421 596059."
}
]
}

28
test/fixtures/error-parameter.json vendored Normal file
View file

@ -0,0 +1,28 @@
{
"ver": "1.44",
"ext": "BVG.1",
"lang": "deu",
"id": "xmwk2kueimst964k",
"err": "OK",
"graph": {
"id": "standard",
"index": 0
},
"subGraph": {
"id": "global",
"index": 0
},
"view": {
"id": "standard",
"index": 0,
"type": "WGS84"
},
"svcResL": [
{
"meth": "JourneyDetails",
"err": "PARAMETER",
"errTxt": "HCI Service: parameter invalid",
"errTxtOut": "Während der Suche ist ein interner Fehler aufgetreten"
}
]
}

View file

@ -73,6 +73,62 @@ tap.test('checkIfResponseIsOk properly throws HAFAS "LOCATION" errors', (t) => {
}
})
tap.test('checkIfResponseIsOk properly throws HAFAS "NO_MATCH" errors', (t) => {
try {
checkIfResIsOk({
body: resNoMatch,
errProps: {secret},
})
} catch (err) {
t.ok(err)
t.ok(err instanceof HafasError)
t.equal(err.isHafasError, true)
t.equal(err.message.slice(0, 10), 'NO_MATCH: ')
t.ok(err.message.length > 10)
t.ok(err instanceof HafasNotFoundError)
t.equal(err.isCausedByServer, false)
t.equal(err.code, NOT_FOUND)
t.equal(err.hafasCode, 'NO_MATCH')
t.equal(err.hafasResponseId, resNoMatch.id)
t.equal(err.hafasMessage, 'Nothing found.')
t.equal(err.hafasDescription, 'Während der Suche ist leider ein interner Fehler aufgetreten. Bitte wenden Sie sich an unsere Serviceauskunft unter Tel. 0421 596059.')
t.equal(err.secret, secret)
t.end()
}
})
tap.test('checkIfResponseIsOk properly throws HAFAS "PARAMETER" errors', (t) => {
try {
checkIfResIsOk({
body: resParameter,
errProps: {secret},
})
} catch (err) {
t.ok(err)
t.ok(err instanceof HafasError)
t.equal(err.isHafasError, true)
t.equal(err.message.slice(0, 11), 'PARAMETER: ')
t.ok(err.message.length > 11)
t.ok(err instanceof HafasInvalidRequestError)
t.equal(err.isCausedByServer, false)
t.equal(err.code, INVALID_REQUEST)
t.equal(err.hafasCode, 'PARAMETER')
t.equal(err.hafasResponseId, resParameter.id)
t.equal(err.hafasMessage, 'HCI Service: parameter invalid')
t.equal(err.hafasDescription, 'Während der Suche ist ein interner Fehler aufgetreten')
t.equal(err.secret, secret)
t.end()
}
})
tap.test('checkIfResponseIsOk properly parses an unknown HAFAS errors', (t) => {
const body = {
ver: '1.42',