Skip to content

Commit 39ea129

Browse files
Merge pull request #96 from contentstack/bug/CS-42703-updating-entry-with-file
Bug/cs 42703 updating entry with file
2 parents 53d7458 + b17a988 commit 39ea129

File tree

4 files changed

+252
-2
lines changed

4 files changed

+252
-2
lines changed

lib/entity.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ export const update = (http, type, params = {}) => {
137137
delete json.updated_by
138138
delete json.updated_at
139139
if (type) {
140-
updateData[type] = json
140+
updateData[type] = json;
141+
if (type === "entry") updateData[type] = cleanAssets(updateData[type]);
141142
} else {
142143
updateData = json
143144
}
@@ -309,3 +310,24 @@ export const move = (http, type, force = false, params = {}) => {
309310
}
310311
}
311312
}
313+
314+
function isAsset (data) {
315+
const element = (Array.isArray(data) && data.length > 0) ? data[0] : data;
316+
return (!!element.file_size || !!element.content_type) && !!element.uid;
317+
}
318+
319+
export function cleanAssets (data) {
320+
if (typeof data === "object" && Object.keys(data).length > 0) {
321+
const keys = Object.keys(data);
322+
for (const key of keys) {
323+
if (typeof data[key] === "object" && Object.keys(data[key]).length > 0) {
324+
if (isAsset(data[key])) {
325+
data[key] = (Array.isArray(data[key])) ? data[key].map(element => element.uid) : data[key].uid;
326+
} else {
327+
cleanAssets(data[key]);
328+
}
329+
}
330+
}
331+
}
332+
return data;
333+
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentstack/management",
3-
"version": "1.13.0",
3+
"version": "1.13.1",
44
"description": "The Content Management API is used to manage the content of your Contentstack account",
55
"main": "./dist/node/contentstack-management.js",
66
"browser": "./dist/web/contentstack-management.js",

test/api/entry-test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,45 @@ describe('Entry api Test', () => {
190190
})
191191
.catch(done)
192192
})
193+
194+
it('Create and update an entry with asset', done => {
195+
// get asset
196+
let asset;
197+
makeAsset()
198+
.query()
199+
.find()
200+
.then((collection) => {
201+
asset = collection.items[0];
202+
// create entry
203+
let entry = {
204+
...entryFirst,
205+
title: "uniqueTitle45",
206+
modular_blocks: [
207+
{
208+
block1: {
209+
file: asset.uid
210+
}
211+
}
212+
]
213+
};
214+
makeEntry(multiPageCT.content_type.uid)
215+
.create({entry: entry})
216+
.then(entry => {
217+
const newTitle = "updated title";
218+
entry.title = newTitle;
219+
entry.update().then(updatedEntry => {
220+
expect(updatedEntry.title).to.be.equal(newTitle);
221+
done();
222+
})
223+
})
224+
})
225+
});
193226
})
194227

195228
function makeEntry (contentType, uid = null) {
196229
return client.stack({ api_key: stack.api_key }).contentType(contentType).entry(uid)
197230
}
231+
232+
function makeAsset (uid = null) {
233+
return client.stack({ api_key: stack.api_key }).asset(uid)
234+
}

test/unit/entry-test.js

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { expect } from 'chai'
44
import { describe, it } from 'mocha'
55
import MockAdapter from 'axios-mock-adapter'
66
import { Entry, EntryCollection, createFormData } from '../../lib/stack/contentType/entry'
7+
import { cleanAssets } from '../../lib/entity'
78
import { systemUidMock, stackHeadersMock, entryMock, noticeMock, checkSystemFields } from './mock/objects'
89

910
describe('Contentstack Entry test', () => {
@@ -375,6 +376,196 @@ describe('Contentstack Entry test', () => {
375376
})
376377
.catch(done)
377378
})
379+
380+
it('Entry with asset object', done => {
381+
const entry = {
382+
empty_array: [],
383+
empty_object: {},
384+
single_file: {
385+
file_size: 69420,
386+
uid: 'single_file'
387+
},
388+
title: 'test entry',
389+
property: 'test property 3',
390+
array_file: [
391+
{ file_size: 69420, uid: 'array_file_1' },
392+
{ file_size: 69420, uid: 'array_file_2' },
393+
{ file_size: 69420, uid: 'array_file_3' },
394+
],
395+
wrapper1: {
396+
something: 'something',
397+
something_else: 'something_else',
398+
file_inside_wrapper : {
399+
file_size: 69420,
400+
uid: 'single_file'
401+
},
402+
file_array_wrapper : [
403+
{ file_size: 69420, uid: 'array_file_wrap_1' },
404+
{ file_size: 69420, uid: 'array_file_wrap_2' },
405+
{ file_size: 69420, uid: 'array_file_wrap_3' },
406+
],
407+
array_wrapper: [
408+
{
409+
something: 'something',
410+
single_file: {
411+
file_size: 69420,
412+
uid: 'single_file_1'
413+
},
414+
something_else: 'something_else'
415+
},
416+
{
417+
something: 'something',
418+
single_file: {
419+
file_size: 69420,
420+
uid: 'single_file_2'
421+
},
422+
something_else: 'something_else'
423+
},
424+
{
425+
something: 'something',
426+
single_file: {
427+
file_size: 69420,
428+
uid: 'single_file_3'
429+
},
430+
something_else: 'something_else'
431+
}
432+
],
433+
wrapper2: {
434+
array_of_array_wrapper: [
435+
{
436+
something: 'something',
437+
oneMoreWrapper : {
438+
file_array_wrapper : [
439+
{ file_size: 69420, uid: 'array_file_wrap_1' },
440+
{ file_size: 69420, uid: 'array_file_wrap_2' },
441+
{ file_size: 69420, uid: 'array_file_wrap_3' },
442+
],
443+
array_wrapper: [
444+
{
445+
something: 'something',
446+
single_file: {
447+
file_size: 69420,
448+
uid: 'single_file_1'
449+
},
450+
something_else: 'something_else'
451+
},
452+
{
453+
something: 'something',
454+
single_file: {
455+
file_size: 69420,
456+
uid: 'single_file_2'
457+
},
458+
something_else: 'something_else'
459+
},
460+
{
461+
something: 'something',
462+
single_file: {
463+
file_size: 69420,
464+
uid: 'single_file_3'
465+
},
466+
something_else: 'something_else'
467+
}
468+
],
469+
},
470+
something_else: 'something_else'
471+
},
472+
{
473+
something: 'something',
474+
file_array_wrapper : [
475+
{ file_size: 69420, uid: 'array_file_wrap_1' },
476+
{ file_size: 69420, uid: 'array_file_wrap_2' },
477+
{ file_size: 69420, uid: 'array_file_wrap_3' },
478+
],
479+
something_else: 'something_else'
480+
},
481+
{
482+
something: 'something',
483+
file_array_wrapper : [
484+
{ file_size: 69420, uid: 'array_file_wrap_1' },
485+
{ file_size: 69420, uid: 'array_file_wrap_2' },
486+
{ file_size: 69420, uid: 'array_file_wrap_3' },
487+
],
488+
something_else: 'something_else'
489+
}
490+
]
491+
}
492+
},
493+
...systemUidMock
494+
};
495+
const expectedResult = {
496+
empty_array: [],
497+
empty_object: {},
498+
single_file: 'single_file',
499+
title: 'test entry',
500+
property: 'test property 3',
501+
array_file: ['array_file_1', 'array_file_2', 'array_file_3'],
502+
wrapper1: {
503+
something: 'something',
504+
something_else: 'something_else',
505+
file_inside_wrapper : 'single_file',
506+
file_array_wrapper : ['array_file_wrap_1', 'array_file_wrap_2', 'array_file_wrap_3'],
507+
array_wrapper: [
508+
{
509+
something: 'something',
510+
single_file: 'single_file_1',
511+
something_else: 'something_else'
512+
},
513+
{
514+
something: 'something',
515+
single_file: 'single_file_2',
516+
something_else: 'something_else'
517+
},
518+
{
519+
something: 'something',
520+
single_file: 'single_file_3',
521+
something_else: 'something_else'
522+
}
523+
],
524+
wrapper2: {
525+
array_of_array_wrapper: [
526+
{
527+
something: 'something',
528+
oneMoreWrapper : {
529+
file_array_wrapper : ['array_file_wrap_1', 'array_file_wrap_2', 'array_file_wrap_3'],
530+
array_wrapper: [
531+
{
532+
something: 'something',
533+
single_file: 'single_file_1',
534+
something_else: 'something_else'
535+
},
536+
{
537+
something: 'something',
538+
single_file: 'single_file_2',
539+
something_else: 'something_else'
540+
},
541+
{
542+
something: 'something',
543+
single_file: 'single_file_3',
544+
something_else: 'something_else'
545+
}
546+
],
547+
},
548+
something_else: 'something_else'
549+
},
550+
{
551+
something: 'something',
552+
file_array_wrapper : ['array_file_wrap_1', 'array_file_wrap_2', 'array_file_wrap_3'],
553+
something_else: 'something_else'
554+
},
555+
{
556+
something: 'something',
557+
file_array_wrapper : ['array_file_wrap_1', 'array_file_wrap_2', 'array_file_wrap_3'],
558+
something_else: 'something_else'
559+
}
560+
]
561+
}
562+
},
563+
...systemUidMock
564+
};
565+
const result = cleanAssets(entry);
566+
expect(result).to.deep.equal(expectedResult);
567+
done();
568+
})
378569
})
379570

380571
function makeEntry (data) {

0 commit comments

Comments
 (0)