fix(db-postgres): relationship query pagination (#5802)
This commit is contained in:
@@ -1191,40 +1191,182 @@ describe('collections-rest', () => {
|
||||
expect(result.docs).toEqual([post1])
|
||||
})
|
||||
|
||||
describe('limit', () => {
|
||||
describe('pagination', () => {
|
||||
let relatedDoc
|
||||
|
||||
beforeEach(async () => {
|
||||
await mapAsync([...Array(50)], async (_, i) =>
|
||||
createPost({ number: i, title: 'limit-test' }),
|
||||
)
|
||||
relatedDoc = await payload.create({
|
||||
collection: relationSlug,
|
||||
data: {
|
||||
name: 'test',
|
||||
},
|
||||
})
|
||||
await mapAsync([...Array(10)], async (_, i) => {
|
||||
await createPost({
|
||||
number: i,
|
||||
relationField: relatedDoc.id as string,
|
||||
title: 'paginate-test',
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('should query a limited set of docs', async () => {
|
||||
const { result, status } = await client.find<Post>({
|
||||
limit: 15,
|
||||
it('should paginate with where query', async () => {
|
||||
const { result: page1 } = await client.find({
|
||||
limit: 4,
|
||||
query: {
|
||||
title: {
|
||||
equals: 'limit-test',
|
||||
equals: 'paginate-test',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(status).toEqual(200)
|
||||
expect(result.docs).toHaveLength(15)
|
||||
})
|
||||
|
||||
it('should query all docs when limit=0', async () => {
|
||||
const { result, status } = await client.find<Post>({
|
||||
limit: 0,
|
||||
const { result: page2 } = await client.find({
|
||||
limit: 4,
|
||||
page: 2,
|
||||
query: {
|
||||
title: {
|
||||
equals: 'limit-test',
|
||||
equals: 'paginate-test',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(status).toEqual(200)
|
||||
expect(result.docs).toHaveLength(50)
|
||||
expect(result.totalPages).toEqual(1)
|
||||
const { result: page3 } = await client.find({
|
||||
limit: 4,
|
||||
page: 3,
|
||||
query: {
|
||||
title: {
|
||||
equals: 'paginate-test',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(page1.hasNextPage).toStrictEqual(true)
|
||||
expect(page1.hasPrevPage).toStrictEqual(false)
|
||||
expect(page1.limit).toStrictEqual(4)
|
||||
expect(page1.nextPage).toStrictEqual(2)
|
||||
expect(page1.page).toStrictEqual(1)
|
||||
expect(page1.pagingCounter).toStrictEqual(1)
|
||||
expect(page1.prevPage).toStrictEqual(null)
|
||||
expect(page1.totalDocs).toStrictEqual(10)
|
||||
expect(page1.totalPages).toStrictEqual(3)
|
||||
|
||||
expect(page2.hasNextPage).toStrictEqual(true)
|
||||
expect(page2.hasPrevPage).toStrictEqual(true)
|
||||
expect(page2.limit).toStrictEqual(4)
|
||||
expect(page2.nextPage).toStrictEqual(3)
|
||||
expect(page2.page).toStrictEqual(2)
|
||||
expect(page2.pagingCounter).toStrictEqual(5)
|
||||
expect(page2.prevPage).toStrictEqual(1)
|
||||
expect(page2.totalDocs).toStrictEqual(10)
|
||||
expect(page2.totalPages).toStrictEqual(3)
|
||||
|
||||
expect(page3.hasNextPage).toStrictEqual(false)
|
||||
expect(page3.hasPrevPage).toStrictEqual(true)
|
||||
expect(page3.limit).toStrictEqual(4)
|
||||
expect(page3.nextPage).toStrictEqual(null)
|
||||
expect(page3.page).toStrictEqual(3)
|
||||
expect(page3.pagingCounter).toStrictEqual(9)
|
||||
expect(page3.prevPage).toStrictEqual(2)
|
||||
expect(page3.totalDocs).toStrictEqual(10)
|
||||
expect(page3.totalPages).toStrictEqual(3)
|
||||
})
|
||||
|
||||
it('should paginate with where query on relationships', async () => {
|
||||
const { result: page1 } = await client.find({
|
||||
limit: 4,
|
||||
query: {
|
||||
relationField: {
|
||||
equals: relatedDoc.id,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const { result: page2 } = await client.find({
|
||||
limit: 4,
|
||||
page: 2,
|
||||
query: {
|
||||
relationField: {
|
||||
equals: relatedDoc.id,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const { result: page3 } = await client.find({
|
||||
limit: 4,
|
||||
page: 3,
|
||||
query: {
|
||||
relationField: {
|
||||
equals: relatedDoc.id,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(page1.hasNextPage).toStrictEqual(true)
|
||||
expect(page1.hasPrevPage).toStrictEqual(false)
|
||||
expect(page1.limit).toStrictEqual(4)
|
||||
expect(page1.nextPage).toStrictEqual(2)
|
||||
expect(page1.page).toStrictEqual(1)
|
||||
expect(page1.pagingCounter).toStrictEqual(1)
|
||||
expect(page1.prevPage).toStrictEqual(null)
|
||||
expect(page1.totalDocs).toStrictEqual(10)
|
||||
expect(page1.totalPages).toStrictEqual(3)
|
||||
|
||||
expect(page2.hasNextPage).toStrictEqual(true)
|
||||
expect(page2.hasPrevPage).toStrictEqual(true)
|
||||
expect(page2.limit).toStrictEqual(4)
|
||||
expect(page2.nextPage).toStrictEqual(3)
|
||||
expect(page2.page).toStrictEqual(2)
|
||||
expect(page2.pagingCounter).toStrictEqual(5)
|
||||
expect(page2.prevPage).toStrictEqual(1)
|
||||
expect(page2.totalDocs).toStrictEqual(10)
|
||||
expect(page2.totalPages).toStrictEqual(3)
|
||||
|
||||
expect(page3.hasNextPage).toStrictEqual(false)
|
||||
expect(page3.hasPrevPage).toStrictEqual(true)
|
||||
expect(page3.limit).toStrictEqual(4)
|
||||
expect(page3.nextPage).toStrictEqual(null)
|
||||
expect(page3.page).toStrictEqual(3)
|
||||
expect(page3.pagingCounter).toStrictEqual(9)
|
||||
expect(page3.prevPage).toStrictEqual(2)
|
||||
expect(page3.totalDocs).toStrictEqual(10)
|
||||
expect(page3.totalPages).toStrictEqual(3)
|
||||
})
|
||||
|
||||
describe('limit', () => {
|
||||
beforeEach(async () => {
|
||||
await mapAsync([...Array(50)], async (_, i) =>
|
||||
createPost({ number: i, title: 'limit-test' }),
|
||||
)
|
||||
})
|
||||
|
||||
it('should query a limited set of docs', async () => {
|
||||
const { result, status } = await client.find<Post>({
|
||||
limit: 15,
|
||||
query: {
|
||||
title: {
|
||||
equals: 'limit-test',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(status).toStrictEqual(200)
|
||||
expect(result.docs).toHaveLength(15)
|
||||
})
|
||||
|
||||
it('should query all docs when limit=0', async () => {
|
||||
const { result, status } = await client.find<Post>({
|
||||
limit: 0,
|
||||
query: {
|
||||
title: {
|
||||
equals: 'limit-test',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(status).toStrictEqual(200)
|
||||
expect(result.docs).toHaveLength(50)
|
||||
expect(result.totalPages).toStrictEqual(1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user