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.
65 lines (50 loc) • 2.05 kB
JavaScript
const createModel = require('./setup/createModel')
describe('SoftDelete - modes', () => {
let Model
describe('Strict mode', () => {
beforeEach(() => {
Model = createModel({}, {mode: 'strict', deletedAt: true})
})
afterEach(async () => {
await Model.deleteMany({}, {softDelete: false, withDeleted: true})
})
it('Should set deleted attribute to false when document is created', async () => {
const Document = await Model.create({})
expect(Document.deleted).toBe(false)
})
it('Should set deleted attribute to false when document is restored', async () => {
let Document = await Model.create({})
await Document.deleteOne()
expect((await Model.findOne({}).withDeleted()).deleted).toBe(true)
expect((await Model.findOne({}).withDeleted()).deletedAt).not.toBeUndefined()
await Document.restoreOne()
Document = await Model.findOne({})
expect(Document.deleted).toBe(false)
expect(Document.deletedAt).toBeUndefined()
expect(Document.deletedBy).toBeUndefined()
})
})
describe('$ne mode', () => {
beforeEach(() => {
Model = createModel({}, {mode: '$ne', deletedAt: true})
})
afterEach(async () => {
await Model.deleteMany({}, {softDelete: false, withDeleted: true})
})
it('Should set deleted field to false when document is created', async () => {
const Document = await Model.create({})
expect(Document.deleted).toBeUndefined()
})
it('Should unset deleted field when document is restored', async () => {
let Document = await Model.create({})
await Document.deleteOne()
expect((await Model.findOne({}).withDeleted()).deleted).toBe(true)
expect((await Model.findOne({}).withDeleted()).deletedAt).not.toBeUndefined()
await Document.restoreOne()
Document = await Model.findOne({})
expect(Document.deleted).toBeUndefined()
expect(Document.deletedAt).toBeUndefined()
expect(Document.deletedBy).toBeUndefined()
})
})
})