packages/moleculer-db/examples/pagination/index.js
"use strict";
let _ = require("lodash");
let kleur = require("kleur");
let { ServiceBroker } = require("moleculer");
let DbService = require("../../index");
let ModuleChecker = require("../../test/checker");
let Promise = require("bluebird");
// Create broker
let broker = new ServiceBroker({
logger: console,
logLevel: "debug"
});
// Load my service
broker.createService(DbService, {
name: "posts",
settings: {
fields: ["title"]
},
methods: {
seedDB() {
return this.adapter.clear()
.then(() => this.adapter.insertMany(_.times(28, i => {
return {
title: `Post #${_.padStart(i + 1, 2, "0")}`
};
})));
}
},
afterConnected() {
this.logger.info(kleur.green().bold("Connected successfully"));
return this.seedDB();
}
});
const checker = new ModuleChecker(14);
// Start checks
function start() {
return Promise.resolve()
.delay(500)
.then(() => checker.execute())
.catch(console.error)
.then(() => broker.stop())
.then(() => checker.printTotal());
}
// --- TEST CASES ---
let id;
// Count of posts
checker.add("COUNT", () => broker.call("posts.count"), res => {
console.log(res);
return res == 28;
});
// Find posts
checker.add("FIND", () => broker.call("posts.find", { sort: "title" }), res => {
console.log(res);
return res.length == 28;
});
// List posts
checker.add("LIST FIRST 10", () => broker.call("posts.list", { sort: "title" }), res => {
console.log(res);
let rows = res.rows;
return [
res.total === 28 && res.page === 1 && res.pageSize === 10 && res.totalPages === 3,
rows.length === 10 && rows[0].title == "Post #01" && rows[9].title === "Post #10"
];
});
// List posts
checker.add("LIST LAST 10", () => broker.call("posts.list", { sort: "-title" }), res => {
console.log(res);
let rows = res.rows;
return [
res.total === 28 && res.page === 1 && res.pageSize === 10 && res.totalPages === 3,
rows.length === 10 && rows[0].title == "Post #28" && rows[9].title === "Post #19"
];
});
// List posts
checker.add("LIST FIRST 25", () => broker.call("posts.list", { page: 1, pageSize: 25, sort: "title" }), res => {
console.log(res);
let rows = res.rows;
return [
res.total === 28 && res.page === 1 && res.pageSize === 25 && res.totalPages === 2,
rows.length === 25 && rows[0].title == "Post #01" && rows[24].title === "Post #25"
];
});
// List posts
checker.add("LIST NEXT 25", () => broker.call("posts.list", { page: 2, pageSize: 25, sort: "title" }), res => {
console.log(res);
let rows = res.rows;
return [
res.total === 28 && res.page === 2 && res.pageSize === 25 && res.totalPages === 2,
rows.length === 3 && rows[0].title == "Post #26" && rows[2].title === "Post #28"
];
});
// List posts
checker.add("LIST NEXT2 25", () => broker.call("posts.list", { page: 3, pageSize: 25, sort: "title" }), res => {
console.log(res);
let rows = res.rows;
return [
res.total === 28 && res.page === 3 && res.pageSize === 25 && res.totalPages === 2,
rows.length === 0
];
});
// List posts with search
checker.add("LIST SEARCH 5", () => broker.call("posts.list", { page: 1, pageSize: 5, search: "#2" }), res => {
console.log(res);
let rows = res.rows;
return [
res.total === 9 && res.page === 1 && res.pageSize === 5 && res.totalPages === 2,
rows.length === 5
];
});
broker.start().then(() => start());