From ade21e5043efa8ea04c230dcbad28cf4329c73b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Tue, 27 Nov 2018 17:38:42 +0000 Subject: [PATCH 1/2] fix: make Media field compose legacy values --- dadi/lib/fields/media.js | 14 ++-- test/acceptance/fields/media.js | 83 +++++++++++++++++++ .../vtest/testdb/collection.test-schema.json | 6 ++ 3 files changed, 98 insertions(+), 5 deletions(-) diff --git a/dadi/lib/fields/media.js b/dadi/lib/fields/media.js index 81660b36..04a3cfca 100644 --- a/dadi/lib/fields/media.js +++ b/dadi/lib/fields/media.js @@ -43,21 +43,25 @@ module.exports.beforeOutput = function ({ return mediaObjects }, {}) }).then(mediaObjects => { - return normalisedValue.map(value => { - if (mediaObjects[value._id]) { - let mergedValue = Object.assign({}, mediaObjects[value._id], value) + return mediaObjectIDs.map((id, index) => { + let value = typeof normalisedValue[index] === 'object' + ? normalisedValue[index] + : {} + + if (mediaObjects[id]) { + let mergedValue = Object.assign({}, mediaObjects[id], value) let sortedValue = Object.keys(mergedValue).sort().reduce((sortedValue, field) => { sortedValue[field] = mergedValue[field] return sortedValue }, {}) - composedIDs.push(value._id) + composedIDs.push(id.toString()) return sortedValue } - return value._id + return id }) }).then(composedValue => { let output = Object.assign(input, { diff --git a/test/acceptance/fields/media.js b/test/acceptance/fields/media.js index 2be86678..2944c5d3 100644 --- a/test/acceptance/fields/media.js +++ b/test/acceptance/fields/media.js @@ -659,6 +659,89 @@ describe('Media field', () => { }) }) }) + + it.only('should resolve a legacy value created by a Reference field', done => { + client + .post('/media/upload') + .set('content-type', 'application/json') + .set('Authorization', `Bearer ${bearerToken}`) + .attach('avatar', 'test/acceptance/temp-workspace/media/1f525.png') + .end((err, res) => { + let mediaObject = res.body.results[0] + let payload = { + title: 'Media support in DADI API', + legacyImage: mediaObject._id + } + + client + .post('/vtest/testdb/test-schema') + .set('content-type', 'application/json') + .set('Authorization', `Bearer ${bearerToken}`) + .send(payload) + .end((err, res) => { + let {results} = res.body + + results.should.be.instanceOf(Array) + results.length.should.eql(1) + results[0].title.should.eql(payload.title) + results[0].legacyImage._id.should.eql(mediaObject._id) + results[0].legacyImage.fileName.should.eql('1f525.png') + results[0]._composed.legacyImage.should.eql(mediaObject._id) + + client + .get(`/vtest/testdb/test-schema/${results[0]._id}?compose=true`) + .set('content-type', 'application/json') + .set('Authorization', `Bearer ${bearerToken}`) + .end((err, res) => { + let {results} = res.body + + results.should.be.instanceOf(Array) + results.length.should.eql(1) + results[0].title.should.eql(payload.title) + results[0].legacyImage._id.should.eql(mediaObject._id) + results[0].legacyImage.fileName.should.eql('1f525.png') + results[0]._composed.legacyImage.should.eql(mediaObject._id) + + let collectionSchemaPath = path.join( + __dirname, + '/../temp-workspace/collections/vtest/testdb/collection.test-schema.json' + ) + let collectionSchema = require(collectionSchemaPath) + + // Convert the field to use the Media type. + collectionSchema.fields.legacyImage.type = 'Media' + delete collectionSchema.fields.legacyImage.settings + + help.writeTempFile( + collectionSchemaPath, + JSON.stringify(collectionSchema, null, 2), + restoreCollection => { + setTimeout(() => { + client + .get(`/vtest/testdb/test-schema/${results[0]._id}?cache=false`) + .set('content-type', 'application/json') + .set('Authorization', `Bearer ${bearerToken}`) + .end((err, res) => { + let {results} = res.body + + results.should.be.instanceOf(Array) + results.length.should.eql(1) + results[0].title.should.eql(payload.title) + results[0].legacyImage._id.should.eql(mediaObject._id) + results[0].legacyImage.fileName.should.eql('1f525.png') + results[0]._composed.legacyImage.should.eql(mediaObject._id) + + restoreCollection() + + done(err) + }) + }, 1000) + } + ) + }) + }) + }) + }) }) describe('PUT', () => { diff --git a/test/acceptance/workspace/collections/vtest/testdb/collection.test-schema.json b/test/acceptance/workspace/collections/vtest/testdb/collection.test-schema.json index 01360028..28443821 100755 --- a/test/acceptance/workspace/collections/vtest/testdb/collection.test-schema.json +++ b/test/acceptance/workspace/collections/vtest/testdb/collection.test-schema.json @@ -25,6 +25,12 @@ "validation": { "mimeTypes": ["image/jpeg"] } + }, + "legacyImage": { + "type": "Reference", + "settings": { + "collection": "mediaStore" + } } }, "settings": { From f70cf8d4f34809a8ebd447e0bf25e349e542575e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Tue, 27 Nov 2018 17:39:52 +0000 Subject: [PATCH 2/2] test: remove .only from test --- test/acceptance/fields/media.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/acceptance/fields/media.js b/test/acceptance/fields/media.js index 2944c5d3..10137d6b 100644 --- a/test/acceptance/fields/media.js +++ b/test/acceptance/fields/media.js @@ -660,7 +660,7 @@ describe('Media field', () => { }) }) - it.only('should resolve a legacy value created by a Reference field', done => { + it('should resolve a legacy value created by a Reference field', done => { client .post('/media/upload') .set('content-type', 'application/json')