Skip to content

Commit ebbaa88

Browse files
committed
fix(FallbackAlgorithm): If before cursor provided, limit should not exceed its offset
1 parent 0824ab8 commit ebbaa88

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/__tests__/connectionResolver-test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,5 +649,18 @@ describe('connectionResolver', () => {
649649
expect(next).deep.property('edges.0.node.id')
650650
.equals(result.edges[2].node.id);
651651
});
652+
653+
it('should reduce limit if reach cursor offset', async () => {
654+
const result = await connectionResolver.resolve({
655+
args: {
656+
sort: { name: 1 },
657+
before: dataToCursor(2),
658+
first: 5,
659+
},
660+
});
661+
expect(result).deep.property('edges').to.have.length(2);
662+
expect(result).deep.property('edges.0.node.id').equals(1);
663+
expect(result).deep.property('edges.1.node.id').equals(2);
664+
});
652665
});
653666
});

src/connectionResolver.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,10 @@ export function prepareLimitSkipFallback(
297297
newSkip = skip - beforeSkip;
298298
if (newSkip < 0) {
299299
newSkip = 0;
300-
newLimit = limit + newSkip;
301-
if (newLimit < 0) {
302-
newLimit = 0;
300+
newLimit = limit;
301+
// offset 0, so limit should not exceed offset in cursor, otherwise it returns again this record
302+
if (newLimit > beforeSkip) {
303+
newLimit = beforeSkip;
303304
}
304305
}
305306
} else if (afterSkip) {

0 commit comments

Comments
 (0)