diff --git a/src/index.js b/src/index.js index a31fc0c..a6a0b8c 100644 --- a/src/index.js +++ b/src/index.js @@ -235,6 +235,9 @@ function paginate(query, options, callback) { if (page > 1) { meta[labelHasPrevPage] = true; meta[labelPrevPage] = page - 1; + } else if (page == 1 && typeof offset !== 'undefined' && offset !== 0) { + meta[labelHasPrevPage] = true; + meta[labelPrevPage] = 1; } // Set next page diff --git a/tests/index.js b/tests/index.js index 8c5b619..fa11123 100644 --- a/tests/index.js +++ b/tests/index.js @@ -143,6 +143,34 @@ describe('mongoose-paginate', function () { }); }); + it('first page with page and limit, limit > doc.length, offset by one', function () { + var query = { + title: { + $in: [/Book/i], + }, + }; + + var options = { + offset: 1, + limit: 200, + page: 1, + lean: true, + }; + + return Book.paginate(query, options).then((result) => { + expect(result.docs).to.have.length(99); + expect(result.totalDocs).to.equal(100); + expect(result.limit).to.equal(200); + expect(result.page).to.equal(1); + expect(result.pagingCounter).to.equal(1); + expect(result.hasPrevPage).to.equal(true); + expect(result.hasNextPage).to.equal(false); + expect(result.prevPage).to.equal(1); + expect(result.nextPage).to.equal(null); + expect(result.totalPages).to.equal(1); + }); + }); + it('first page with page and limit', function () { var query = { title: { @@ -249,9 +277,9 @@ describe('mongoose-paginate', function () { expect(result.limit).to.equal(10); expect(result.page).to.equal(1); expect(result.pagingCounter).to.equal(1); - expect(result.hasPrevPage).to.equal(false); + expect(result.hasPrevPage).to.equal(true); expect(result.hasNextPage).to.equal(true); - expect(result.prevPage).to.equal(null); + expect(result.prevPage).to.equal(1); expect(result.nextPage).to.equal(2); expect(result.totalPages).to.equal(10); });