0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-24 23:48:13 -05:00

Handle empty array of slack setting objects

no issue
- ensure at least one SlackIntegration object exists in the slack setting when deserialising
- remove blank SlackIntegration objects when serialising
This commit is contained in:
Kevin Ansfield 2018-07-02 14:57:33 +01:00
parent 2d2712ed89
commit 7b599ceacd
2 changed files with 34 additions and 6 deletions

View file

@ -1,19 +1,25 @@
/* eslint-disable camelcase */ /* eslint-disable camelcase */
import SlackObject from 'ghost-admin/models/slack-integration'; import SlackObject from 'ghost-admin/models/slack-integration';
import Transform from 'ember-data/transform'; import Transform from 'ember-data/transform';
import {A as emberA, isArray as isEmberArray} from '@ember/array'; import {isArray as isEmberArray} from '@ember/array';
import {isEmpty} from '@ember/utils';
export default Transform.extend({ export default Transform.extend({
deserialize(serialized) { deserialize(serialized) {
let slackObj, settingsArray; let settingsArray;
try { try {
settingsArray = JSON.parse(serialized) || []; settingsArray = JSON.parse(serialized) || [];
} catch (e) { } catch (e) {
settingsArray = []; settingsArray = [];
} }
slackObj = settingsArray.map(itemDetails => SlackObject.create(itemDetails)); if (isEmpty(settingsArray)) {
return emberA(slackObj); settingsArray.push({url: ''});
}
let slackObjs = settingsArray.map(itemDetails => SlackObject.create(itemDetails));
return slackObjs;
}, },
serialize(deserialized) { serialize(deserialized) {
@ -21,8 +27,9 @@ export default Transform.extend({
if (isEmberArray(deserialized)) { if (isEmberArray(deserialized)) {
settingsArray = deserialized.map((item) => { settingsArray = deserialized.map((item) => {
let url = (item.get('url') || '').trim(); let url = (item.get('url') || '').trim();
if (url) {
return {url}; return {url};
}
}).compact(); }).compact();
} else { } else {
settingsArray = []; settingsArray = [];

View file

@ -6,6 +6,7 @@ import {setupTest} from 'ember-mocha';
describe('Unit: Transform: slack-settings', function () { describe('Unit: Transform: slack-settings', function () {
setupTest('transform:slack-settings', {}); setupTest('transform:slack-settings', {});
it('deserializes settings json', function () { it('deserializes settings json', function () {
let transform = this.subject(); let transform = this.subject();
let serialized = '[{"url":"http://myblog.com/blogpost1"}]'; let serialized = '[{"url":"http://myblog.com/blogpost1"}]';
@ -16,6 +17,16 @@ describe('Unit: Transform: slack-settings', function () {
expect(result[0].get('url')).to.equal('http://myblog.com/blogpost1'); expect(result[0].get('url')).to.equal('http://myblog.com/blogpost1');
}); });
it('deserializes empty array', function () {
let transform = this.subject();
let serialized = '[]';
let result = transform.deserialize(serialized);
expect(result.length).to.equal(1);
expect(result[0]).to.be.instanceof(SlackIntegration);
expect(result[0].get('url')).to.equal('');
});
it('serializes array of Slack settings', function () { it('serializes array of Slack settings', function () {
let transform = this.subject(); let transform = this.subject();
let deserialized = emberA([ let deserialized = emberA([
@ -25,4 +36,14 @@ describe('Unit: Transform: slack-settings', function () {
expect(result).to.equal('[{"url":"http://myblog.com/blogpost1"}]'); expect(result).to.equal('[{"url":"http://myblog.com/blogpost1"}]');
}); });
it('serializes empty SlackIntegration objects', function () {
let transform = this.subject();
let deserialized = emberA([
SlackIntegration.create({url: ''})
]);
let result = transform.serialize(deserialized);
expect(result).to.equal('[]');
});
}); });