123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- const h = require('../helper');
- const Mongoose = require('mongoose');
- // These .set() calls can be removed when mongoose is upgraded to v5.
- Mongoose.set('useNewUrlParser', true);
- Mongoose.set('useFindAndModify', false);
- Mongoose.set('useUnifiedTopology', true);
- const connection = Mongoose.createConnection('mongodb://tfb-database/hello_world');
- /**
- * Note! The benchmarks say we should use "id" as a property name.
- * However, Mongo provides a default index on "_id", so to be equivalent to the other tests, we use
- * the same, default index provided by the database.
- *
- */
- // Mongoose Setup
- const WorldSchema = new Mongoose.Schema({
- _id: Number,
- randomNumber: Number
- }, {
- collection: 'world'
- });
- const FortuneSchema = new Mongoose.Schema({
- _id: Number,
- message: String
- }, {
- collection: 'fortune'
- });
- const Worlds = connection.model('World', WorldSchema);
- const Fortunes = connection.model('Fortune', FortuneSchema);
- const toClientWorld = (world) => {
- if (world) {
- world.id = world._id;
- delete world._id;
- }
- return world;
- };
- const mongooseRandomWorld = async () => {
- return toClientWorld(await Worlds.findOne({
- _id: h.randomTfbNumber()
- }).lean().exec());
- };
- const mongooseGetAllFortunes = async () => {
- return (await Fortunes.find({})
- .lean().exec()).map(toClientWorld);
- };
- async function getUpdateRandomWorld() {
- // it would be nice to use findOneAndUpdate here, but for some reason the test fails with it.
- const world = await Worlds.findOne({_id: h.randomTfbNumber()}).lean().exec();
- world.randomNumber = h.randomTfbNumber();
- await Worlds.updateOne({
- _id: world._id
- }, {
- $set: {
- randomNumber: world.randomNumber
- }
- }).exec();
- return toClientWorld(world);
- }
- module.exports = {
- SingleQuery: async (req, res) => {
- const result = await mongooseRandomWorld();
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(result));
- },
- MultipleQueries: async (queryCount, req, res) => {
- const queryFunctions = [];
- for (let i = 0; i < queryCount; i++) {
- queryFunctions.push(mongooseRandomWorld());
- }
- const results = await Promise.all(queryFunctions);
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(results));
- },
- Fortunes: async (req, res) => {
- const fortunes = await mongooseGetAllFortunes();
- fortunes.push(h.additionalFortune());
- fortunes.sort((a, b) => {
- return a.message.localeCompare(b.message);
- });
- h.addTfbHeaders(res, 'html');
- res.end(h.fortunesTemplate({fortunes}));
- },
- Updates: async (queryCount, req, res) => {
- const promises = [];
- for (let i = 1; i <= queryCount; i++) {
- promises.push(getUpdateRandomWorld());
- }
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(await Promise.all(promises)));
- }
- };
|