62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
const mongoose = require('mongoose');
|
|
const setupTestDB = require('../../../utils/setupTestDB');
|
|
const paginate = require('../../../../src/models/plugins/paginate.plugin');
|
|
|
|
const projectSchema = mongoose.Schema({
|
|
name: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
});
|
|
|
|
projectSchema.virtual('tasks', {
|
|
ref: 'Task',
|
|
localField: '_id',
|
|
foreignField: 'project',
|
|
});
|
|
|
|
projectSchema.plugin(paginate);
|
|
const Project = mongoose.model('Project', projectSchema);
|
|
|
|
const taskSchema = mongoose.Schema({
|
|
name: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
project: {
|
|
type: mongoose.SchemaTypes.ObjectId,
|
|
ref: 'Project',
|
|
required: true,
|
|
},
|
|
});
|
|
|
|
taskSchema.plugin(paginate);
|
|
const Task = mongoose.model('Task', taskSchema);
|
|
|
|
setupTestDB();
|
|
|
|
describe('paginate plugin', () => {
|
|
describe('populate option', () => {
|
|
test('should populate the specified data fields', async () => {
|
|
const project = await Project.create({ name: 'Project One' });
|
|
const task = await Task.create({ name: 'Task One', project: project._id });
|
|
|
|
const taskPages = await Task.paginate({ _id: task._id }, { populate: 'project' });
|
|
|
|
expect(taskPages.results[0].project).toHaveProperty('_id', project._id);
|
|
});
|
|
|
|
test('should populate nested fields', async () => {
|
|
const project = await Project.create({ name: 'Project One' });
|
|
const task = await Task.create({ name: 'Task One', project: project._id });
|
|
|
|
const projectPages = await Project.paginate({ _id: project._id }, { populate: 'tasks.project' });
|
|
const { tasks } = projectPages.results[0];
|
|
|
|
expect(tasks).toHaveLength(1);
|
|
expect(tasks[0]).toHaveProperty('_id', task._id);
|
|
expect(tasks[0].project).toHaveProperty('_id', project._id);
|
|
});
|
|
});
|
|
});
|