diff --git a/packages/lib/link/messages.js b/packages/lib/link/messages.js index 1eb28116..4e558ab6 100644 --- a/packages/lib/link/messages.js +++ b/packages/lib/link/messages.js @@ -207,12 +207,13 @@ class Request extends Message { response = {}; } - if (!this._responseValidator({ seq: 0, type: this.responseType, response })) { + let data = { ...response, seq: message.seq }; + if (!this._responseValidator({ seq: 0, type: this.responseType, data })) { logger.error(JSON.stringify(this._responseValidator.errors, null, 4)); throw new Error(`Validation failed responding to ${this.requestType}`); } - link.connector.send(this.responseType, { ...response, seq: message.seq }); + link.connector.send(this.responseType, data); }).catch(err => { if (!(err instanceof libErrors.RequestError)) { diff --git a/test/lib/link/messages.js b/test/lib/link/messages.js index 62342e94..97ad641e 100644 --- a/test/lib/link/messages.js +++ b/test/lib/link/messages.js @@ -20,6 +20,9 @@ describe("lib/link/messages", function() { requestProperties: { "test": { type: "string" }, }, + responseProperties: { + "test": { type: "string" }, + }, }); describe("constructor", function() { @@ -63,7 +66,24 @@ describe("lib/link/messages", function() { }); }); it("should implicitly send an empty object on empty return", async function() { - handlerResult = undefined; + let emptyRequest = new libLink.Request({ + type: "empty", + links: ["source-target"], + }); + emptyRequest.attach(testTargetLink, async(message) => {}); + testTargetLink._handlers.get("empty_request")({ seq: 2 }); + let result = await new Promise(resolve => { + testTargetLink.connector.send = (type, data) => resolve({ type, data }); + }); + assert.deepEqual(result, { + type: "empty_response", + data: { + seq: 2, + }, + }); + }); + it("should validate response from handler", async function() { + handlerResult = { test: 12 }; testTargetLink._handlers.get("test_request")({ seq: 2 }); let result = await new Promise(resolve => { testTargetLink.connector.send = (type, data) => resolve({ type, data }); @@ -71,6 +91,7 @@ describe("lib/link/messages", function() { assert.deepEqual(result, { type: "test_response", data: { + error: "Validation failed responding to test_request", seq: 2, }, });