From 5d62cde8c4bd00ad9074a44c59c3e8a4f8b5fca3 Mon Sep 17 00:00:00 2001 From: Pavan Kumar Sunkara Date: Thu, 1 Aug 2019 14:29:47 +0200 Subject: [PATCH] fix(core): allow error parse results to be serialized, fixes #315 --- packages/fury/lib/fury.js | 5 +++++ packages/fury/test/serialize-test.js | 23 ++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/fury/lib/fury.js b/packages/fury/lib/fury.js index 1f404fe63..e94e1a218 100644 --- a/packages/fury/lib/fury.js +++ b/packages/fury/lib/fury.js @@ -265,6 +265,11 @@ class Fury { return Promise.reject(error); } + if (!api) { + // eslint-disable-next-line no-param-reassign + api = new this.minim.elements.Category(); + } + const promise = adapter.serialize({ api, namespace: this.minim, mediaType }); if (done) { diff --git a/packages/fury/test/serialize-test.js b/packages/fury/test/serialize-test.js index a6f9a644f..4444e01aa 100644 --- a/packages/fury/test/serialize-test.js +++ b/packages/fury/test/serialize-test.js @@ -4,6 +4,12 @@ const assert = require('./assert'); describe('Serialize', () => { describe('using callback', () => { + const JSONSerializeAdapter = { + name: 'json', + mediaTypes: ['application/json'], + serialize: ({ api, namespace }) => Promise.resolve(JSON.stringify(namespace.serialiser.serialise(api))), + }; + it('errors with unknown mediaType', (done) => { const fury = new Fury(); const api = new fury.minim.elements.Category(); @@ -34,11 +40,7 @@ describe('Serialize', () => { it('can serialize with matching adapter', (done) => { const fury = new Fury(); - fury.use({ - name: 'json', - mediaTypes: ['application/json'], - serialize: ({ api, namespace }) => Promise.resolve(JSON.stringify(namespace.serialiser.serialise(api))), - }); + fury.use(JSONSerializeAdapter); const api = new fury.minim.elements.Category(); @@ -48,6 +50,17 @@ describe('Serialize', () => { done(); }); }); + + it('can serialize undefined `api` by creating default category', (done) => { + const fury = new Fury(); + fury.use(JSONSerializeAdapter); + + fury.serialize({ api: undefined, mediaType: 'application/json' }, (error, result) => { + expect(error).to.be.null; + expect(result).to.equal('{"element":"category"}'); + done(); + }); + }); }); describe('using async/await', () => {