From 1000e48dfde50f14c28d6292c089628644b94ad9 Mon Sep 17 00:00:00 2001 From: Jannis R Date: Fri, 6 May 2022 21:51:02 +0200 Subject: [PATCH] =?UTF-8?q?handle=20METHOD=5FNA/NO=5FMATCH/PARAMETER=20err?= =?UTF-8?q?ors=20=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/errors.js | 23 +++++++++--- test/fixtures/error-no-match.json | 27 ++++++++++++++ test/fixtures/error-parameter.json | 28 +++++++++++++++ test/lib/check-if-res-is-ok.js | 56 ++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/error-no-match.json create mode 100644 test/fixtures/error-parameter.json diff --git a/lib/errors.js b/lib/errors.js index 68ee7a92..942131a7 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -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', diff --git a/test/fixtures/error-no-match.json b/test/fixtures/error-no-match.json new file mode 100644 index 00000000..cbfdd1df --- /dev/null +++ b/test/fixtures/error-no-match.json @@ -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." + } + ] +} diff --git a/test/fixtures/error-parameter.json b/test/fixtures/error-parameter.json new file mode 100644 index 00000000..3558a27d --- /dev/null +++ b/test/fixtures/error-parameter.json @@ -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" + } + ] +} diff --git a/test/lib/check-if-res-is-ok.js b/test/lib/check-if-res-is-ok.js index 2e187297..ca0c0184 100644 --- a/test/lib/check-if-res-is-ok.js +++ b/test/lib/check-if-res-is-ok.js @@ -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',