mongoose-smart-delete
Version:
A Mongoose plugin for implementing soft delete functionality, allowing documents to be marked as deleted without being removed from the database.
54 lines (43 loc) • 1.51 kB
JavaScript
const Mongoose = require('mongoose')
const createModel = require('./setup/createModel')
const modes = require('./setup/modes')
modes.forEach((mode) => {
describe(`SoftDelete - deleteMany middleware (mode: ${mode})`, () => {
let Model, TriggeredHooks = {}
beforeAll(async () => {
const Schema = Mongoose.Schema({})
Schema.pre('deleteMany', function (next) {
TriggeredHooks.preDeleteMany = true
next()
})
Schema.post('deleteMany', function (doc, next) {
TriggeredHooks.postDeleteMany = true
next()
})
Schema.pre('updateMany', function (next) {
TriggeredHooks.preUpdateMany = true
next()
})
Schema.post('updateMany', function () {
TriggeredHooks.postUpdateMany = true
})
Model = createModel(Schema, {mode: mode})
})
beforeEach(async () => {
const objects = Array.from({length: 10}, (_, index) => ({num: index + 1}))
await Model.insertMany(objects)
})
afterEach(async () => {
TriggeredHooks = {}
await Model.deleteMany({}, {softDelete: false, withDeleted: true})
})
it('Model.deleteMany should trigger pre hook', async () => {
await Model.deleteMany({num: {$lte: 5}})
expect(TriggeredHooks.preDeleteMany).toBe(true)
})
it('Model.deleteMany should trigger post hook', async () => {
await Model.deleteMany({num: {$lte: 5}})
expect(TriggeredHooks.postDeleteMany).toBe(true)
})
})
})