Skip to content

Commit d721805

Browse files
authored
Merge pull request #164 from contentful/fix/respect-load-all-entries-option
fix: fetch entries of all CTs when required by an intent
2 parents 270ee30 + 03458a4 commit d721805

File tree

3 files changed

+70
-7
lines changed

3 files changed

+70
-7
lines changed

src/lib/fetcher.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,16 @@ export default class Fetcher implements APIFetcher {
2727
}
2828

2929
const filter = {
30-
'sys.contentType.sys.id[in]': ids.join(','),
3130
'sys.archivedAt[exists]': 'false'
3231
}
3332

33+
// If we want to load all entries, we do not need to add the filter specification
34+
// that loads just the entries for related content types
35+
// If we do, then we specify the list of CTs that we want entries for
36+
if (!loadAllEntries) {
37+
filter['sys.contentType.sys.id[in]'] = ids.join(',')
38+
}
39+
3440
const entries = await this.fetchAllPaginatedItems<APIEntry>('/entries', filter)
3541

3642
return entries

test/unit/lib/fetcher.spec.ts

+61-4
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ describe('Fetcher', function () {
3030
request
3131
.withArgs({
3232
method: 'GET',
33-
url: '/entries?sys.contentType.sys.id[in]=newsArticle&sys.archivedAt[exists]=false&skip=0'
33+
url: '/entries?sys.archivedAt[exists]=false&sys.contentType.sys.id[in]=newsArticle&skip=0'
3434
})
3535
.resolves({
3636
skip: 0,
@@ -41,7 +41,7 @@ describe('Fetcher', function () {
4141
request
4242
.withArgs({
4343
method: 'GET',
44-
url: '/entries?sys.contentType.sys.id[in]=newsArticle&sys.archivedAt[exists]=false&skip=4'
44+
url: '/entries?sys.archivedAt[exists]=false&sys.contentType.sys.id[in]=newsArticle&skip=4'
4545
})
4646
.resolves({
4747
skip: 4,
@@ -57,11 +57,68 @@ describe('Fetcher', function () {
5757

5858
expect(request).to.have.been.calledWith({
5959
method: 'GET',
60-
url: '/entries?sys.contentType.sys.id[in]=newsArticle&sys.archivedAt[exists]=false&skip=0'
60+
url: '/entries?sys.archivedAt[exists]=false&sys.contentType.sys.id[in]=newsArticle&skip=0'
6161
})
6262
expect(request).to.have.been.calledWith({
6363
method: 'GET',
64-
url: '/entries?sys.contentType.sys.id[in]=newsArticle&sys.archivedAt[exists]=false&skip=4'
64+
url: '/entries?sys.archivedAt[exists]=false&sys.contentType.sys.id[in]=newsArticle&skip=4'
65+
})
66+
67+
const result = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6']
68+
expect(entries).to.eql(result)
69+
})
70+
71+
it('fetches all Entries of all CTs in the plan if an intent needs them all', async function () {
72+
const intents = await buildIntents(function up (migration) {
73+
migration.transformEntriesToType({
74+
sourceContentType: 'sourceContentType',
75+
targetContentType: 'targetContentType',
76+
updateReferences: true,
77+
removeOldEntries: false,
78+
from: ['author', 'authorCity'],
79+
identityKey: () => 'ID',
80+
transformEntryForLocale: function () {
81+
return {}
82+
}
83+
})
84+
}, null, null)
85+
86+
const request = sinon.stub()
87+
request
88+
.withArgs({
89+
method: 'GET',
90+
url: '/entries?sys.archivedAt[exists]=false&skip=0'
91+
})
92+
.resolves({
93+
skip: 0,
94+
limit: 4,
95+
total: 6,
96+
items: ['item1', 'item2', 'item3', 'item4']
97+
})
98+
request
99+
.withArgs({
100+
method: 'GET',
101+
url: '/entries?sys.archivedAt[exists]=false&skip=4'
102+
})
103+
.resolves({
104+
skip: 4,
105+
limit: 4,
106+
total: 6,
107+
items: ['item5', 'item6']
108+
})
109+
110+
const intentList = new IntentList(intents)
111+
112+
const fetcher = new Fetcher(request)
113+
const entries = await fetcher.getEntriesInIntents(intentList)
114+
115+
expect(request).to.have.been.calledWith({
116+
method: 'GET',
117+
url: '/entries?sys.archivedAt[exists]=false&skip=0'
118+
})
119+
expect(request).to.have.been.calledWith({
120+
method: 'GET',
121+
url: '/entries?sys.archivedAt[exists]=false&skip=4'
65122
})
66123

67124
const result = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6']

test/unit/lib/migration-parser.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('Migration parser', function () {
2525
}
2626
}
2727

28-
if (config.url.indexOf('/entries?sys.contentType.sys.id[in]=foo,cat&sys.archivedAt[exists]=false&skip=0') !== -1) {
28+
if (config.url.indexOf('/entries?sys.archivedAt[exists]=false&sys.contentType.sys.id[in]=foo,cat&skip=0') !== -1) {
2929
return {
3030
total: 2,
3131
skip: 0,
@@ -130,7 +130,7 @@ describe('Migration parser', function () {
130130
}
131131
}
132132

133-
if (config.url === '/entries?sys.contentType.sys.id[in]=foo&sys.archivedAt[exists]=false&skip=0') {
133+
if (config.url === '/entries?sys.archivedAt[exists]=false&sys.contentType.sys.id[in]=foo&skip=0') {
134134
return {
135135
total: 2,
136136
skip: 0,

0 commit comments

Comments
 (0)