diff --git a/src/__tests__/cat-home.entity.ts b/src/__tests__/cat-home.entity.ts index 45b52fc1..4e448498 100644 --- a/src/__tests__/cat-home.entity.ts +++ b/src/__tests__/cat-home.entity.ts @@ -10,6 +10,9 @@ export class CatHomeEntity { @Column() name: string + @Column({ nullable: true }) + street: string | null + @OneToOne(() => CatEntity, (cat) => cat.home) cat: CatEntity diff --git a/src/paginate.spec.ts b/src/paginate.spec.ts index ce6dc2b2..f4ef7d64 100644 --- a/src/paginate.spec.ts +++ b/src/paginate.spec.ts @@ -177,8 +177,8 @@ describe('paginate', () => { }) catHomes = await catHomeRepo.save([ - catHomeRepo.create({ name: 'Box', cat: cats[0] }), - catHomeRepo.create({ name: 'House', cat: cats[1] }), + catHomeRepo.create({ name: 'Box', cat: cats[0], street: null }), + catHomeRepo.create({ name: 'House', cat: cats[1], street: 'Mainstreet' }), ]) catHomePillows = await catHomePillowRepo.save([ catHomePillowRepo.create({ color: 'red', home: catHomes[0] }), @@ -2022,26 +2022,52 @@ describe('paginate', () => { const config: PaginateConfig = { sortableColumns: ['id'], filterableColumns: { - 'home.name': [FilterSuffix.NOT, FilterOperator.NULL], + 'home.street': [FilterSuffix.NOT, FilterOperator.NULL], }, relations: ['home'], } const query: PaginateQuery = { path: '', filter: { - 'home.name': '$not:$null', + 'home.street': '$not:$null', }, } const result = await paginate(query, catRepo, config) - const expectedResult = [0, 1].map((i) => { + const expectedResult = [1].map((i) => { const ret = Object.assign(clone(cats[i]), { home: Object.assign(clone(catHomes[i])) }) delete ret.home.cat return ret }) expect(result.data).toStrictEqual(expectedResult) - expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&filter.home.name=$not:$null') + expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&filter.home.street=$not:$null') + }) + + it('should return result based on null query on relation', async () => { + const config: PaginateConfig = { + sortableColumns: ['id'], + filterableColumns: { + 'home.street': [FilterOperator.NULL], + }, + relations: ['home'], + } + const query: PaginateQuery = { + path: '', + filter: { + 'home.street': '$null', + }, + } + + const result = await paginate(query, catRepo, config) + const expectedResult = [0].map((i) => { + const ret = Object.assign(clone(cats[i]), { home: Object.assign(clone(catHomes[i])) }) + delete ret.home.cat + return ret + }) + + expect(result.data).toStrictEqual(expectedResult) + expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&filter.home.name=$null') }) it('should ignore filterable column which is not configured', async () => {