From 64114925a1798b1df89b750afad0a94dc6298ccb Mon Sep 17 00:00:00 2001 From: Renaud Dahl Date: Wed, 6 Sep 2017 13:52:00 +0200 Subject: [PATCH] Fix siren bug --- test/interceptors/express/index.test.js | 5 +---- translators/siren_translator.js | 11 ++++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/test/interceptors/express/index.test.js b/test/interceptors/express/index.test.js index 90c7d7f..47b0024 100644 --- a/test/interceptors/express/index.test.js +++ b/test/interceptors/express/index.test.js @@ -232,10 +232,7 @@ describe('Intercepting the response', () => { }) it('Should return an empty Siren object', () => { - expect(resultStorage.sentJson).to.deep.equal({ - class: ["undefined"], - properties: {} - }) + expect(resultStorage.sentJson).to.deep.equal({}) }) }) diff --git a/translators/siren_translator.js b/translators/siren_translator.js index 825dca4..dc230e7 100644 --- a/translators/siren_translator.js +++ b/translators/siren_translator.js @@ -1,18 +1,18 @@ const transitions = require('../state_transitions') +const _ = require('lodash') /* * Generates a Siren "entity". Useful for both resources, * sub-resources and collection members. */ function generateSirenEntity (resource, name, host, state, isAuth, subEntityRel) { - let entity = { - class: [name] - } + let entity = {} + if (name !== 'undefined') entity.class = [name] if (subEntityRel) { entity.rel = [subEntityRel] } - entity.properties = resource + if (!_.isEmpty(resource)) entity.properties = resource let possibleTransitions = transitions.getAvailableTransitions(state, isAuth) let controls = getActionsAndLinks(possibleTransitions, resource, state, host, subEntityRel, isAuth) @@ -50,7 +50,7 @@ function getActionsAndLinks (possibleTr, data, state, host, isSubEntity, isAuth) let actions = [] let links = [] for (let tr of possibleTr) { - if (transitions.isForEachItem(tr, state) || !isSubEntity) { + if ((transitions.isForEachItem(tr, state) && isSubEntity) || (!transitions.isForEachItem(tr, state) && !isSubEntity)) { let action = {} action.href = host + transitions.getUrl(tr, state, data).href @@ -76,6 +76,7 @@ function translate (data, state, host, isAuth) { let sirenResponse = {} if (data instanceof Array) { + sirenResponse = generateSirenEntity({}, resourceName, host, state, isAuth) sirenResponse.entities = [] for (let elem of data) { sirenResponse.entities.push(generateSirenEntity(elem, resourceName, host, state, isAuth, resourceName))