diff --git a/CHANGELOG.md b/CHANGELOG.md index e1255a90..e2e021af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Minim Changelog +## Master + +### Bug Fixes + +- Fixes a JSON 0.6 serialisation bug where httpRequest and similar array-based + elements with undefined content would be serialised with undefined content + instead of an empty array as content. + ## 0.23.5 (2019-07-02) This release brings some performance improvements, namely to serialising with diff --git a/lib/serialisers/JSON06Serialiser.js b/lib/serialisers/JSON06Serialiser.js index 89cc8fa0..986a79b5 100644 --- a/lib/serialisers/JSON06Serialiser.js +++ b/lib/serialisers/JSON06Serialiser.js @@ -65,22 +65,24 @@ module.exports = class JSON06Serialiser extends JSONSerialiser { if (this.shouldSerialiseContent(element, content)) { payload.content = content; } + } else if (this.shouldSerialiseContent(element, element.content) && element instanceof this.namespace.elements.Array) { + payload.content = []; } return payload; } shouldSerialiseContent(element, content) { - if (content === undefined) { - return false; - } - if (element.element === 'parseResult' || element.element === 'httpRequest' || element.element === 'httpResponse' || element.element === 'category' || element.element === 'link') { return true; } + if (content === undefined) { + return false; + } + if (Array.isArray(content) && content.length === 0) { return false; } diff --git a/test/serialisers/JSON06Serialiser-test.js b/test/serialisers/JSON06Serialiser-test.js index addf58c8..1b59761a 100644 --- a/test/serialisers/JSON06Serialiser-test.js +++ b/test/serialisers/JSON06Serialiser-test.js @@ -928,6 +928,18 @@ describe('JSON 0.6 Serialiser', () => { }); }); + it('serialises undefined httpRequest content', () => { + const element = new minim.elements.Array(); + element.element = 'httpRequest'; + element.content = undefined; + const serialised = serialiser.serialise(element); + + expect(serialised).to.deep.equal({ + element: 'httpRequest', + content: [], + }); + }); + it('serialises empty httpResponse content', () => { const element = new minim.elements.Element([]); element.element = 'httpResponse';