diff --git a/packages/lib/models/utils/paginatedFeed.ts b/packages/lib/models/utils/paginatedFeed.ts index 731276ff12..5c08f0b793 100755 --- a/packages/lib/models/utils/paginatedFeed.ts +++ b/packages/lib/models/utils/paginatedFeed.ts @@ -20,7 +20,7 @@ export interface WhereQuery { export default async function(db: any, tableName: string, pagination: Pagination, whereQuery: WhereQuery = null, fields: string[] = null): Promise { fields = fields ? fields.slice() : ['id']; - const where = whereQuery ? [whereQuery.sql] : []; + const where = whereQuery && whereQuery.sql ? [whereQuery.sql] : []; const sqlParams = whereQuery && whereQuery.params ? whereQuery.params.slice() : []; if (!pagination.order.length) throw new Error('Pagination order must be provided'); diff --git a/packages/lib/services/rest/Api.test.ts b/packages/lib/services/rest/Api.test.ts index 75ca6adf12..8fc6386f26 100644 --- a/packages/lib/services/rest/Api.test.ts +++ b/packages/lib/services/rest/Api.test.ts @@ -11,7 +11,7 @@ import NoteTag from '../../models/NoteTag'; import ResourceService from '../../services/ResourceService'; import SearchEngine from '../search/SearchEngine'; const { MarkupToHtml } = require('@joplin/renderer'); -import { ResourceEntity } from '../database/types'; +import { NoteEntity, ResourceEntity } from '../database/types'; const createFolderForPagination = async (num: number, time: number) => { await Folder.save({ @@ -961,4 +961,25 @@ describe('services/rest/Api', () => { await SearchEngine.instance().destroy(); })); + + it('should not fail when both deleted and conflict notes are included', (async () => { + const folder = await Folder.save({}); + const note1 = await Note.save({ parent_id: folder.id }); + await msleep(1); + const note2 = await Note.save({ parent_id: folder.id, deleted_time: 1 }); + await msleep(1); + const note3 = await Note.save({ parent_id: folder.id, is_conflict: 1 }); + + const r1 = await api.route(RequestMethod.GET, 'notes', { + limit: 3, + include_conflicts: '1', + include_deleted: '1', + }); + + expect(r1.items.map((item: NoteEntity) => item.id)).toEqual([ + note1.id, + note2.id, + note3.id, + ]); + })); });