UNPKG

@stenneepro/mongoose-soft-delete

Version:
171 lines (170 loc) 8.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const mocha_1 = require("mocha"); const setupModel_1 = __importDefault(require("./utils/setupModel")); const dropModel_1 = __importDefault(require("./utils/dropModel")); const mongooseExpects_1 = require("./utils/mongooseExpects"); (0, mocha_1.describe)('simple delete', function () { let TestModel; before(async function () { TestModel = (0, setupModel_1.default)('TestSimpleDelete', { name: String }); }); after(async function () { await (0, dropModel_1.default)('TestSimpleDelete'); }); it('deleteOne() -> set deleted=true', async function () { const puffy = await TestModel.create({ name: 'Puffy1' }); const result = await puffy.deleteOne(); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 1); const doc = await TestModel.findById(puffy.id).withDeleted().orFail(); (0, chai_1.expect)(doc.deleted).to.equal(true); }); it('deleteOne() -> set deleted=true', async function () { const puffy = await TestModel.create({ name: 'Puffy2' }); const result = await TestModel.deleteOne({ name: 'Puffy2' }); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 1); const doc = await TestModel.findById(puffy.id).withDeleted().orFail(); (0, chai_1.expect)(doc.deleted).to.equal(true); }); it('deleteMany() -> set deleted=true', async function () { await TestModel.create({ name: 'Puffy' }); await TestModel.create({ name: 'Puffy' }); const result = await TestModel.deleteMany({ name: 'Puffy' }); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 2); }); it('findByIdAndDelete() -> set deleted=true', async function () { const puffy = await TestModel.create({ name: 'Puffy3' }); await TestModel.findByIdAndDelete(puffy.id); const result = await TestModel.findById(puffy.id).withDeleted().orFail(); (0, chai_1.expect)(result.deleted).to.equal(true); }); it('findOneAndDelete() -> set deleted=true', async function () { await TestModel.create({ name: 'Puffy4' }); await TestModel.findOneAndDelete({ name: 'Puffy4' }); const result = await TestModel.findOne({ name: 'Puffy4' }).withDeleted().orFail(); (0, chai_1.expect)(result.deleted).to.equal(true); }); it('restoreOne() -> set deleted=false', async function () { const puffy = await TestModel.findOne({ name: 'Puffy1' }).withDeleted().orFail(); const doc = await puffy.restoreOne(); (0, chai_1.expect)(doc.deleted).to.equal(false); }); it('restoreOne() -> set deleted=false', async function () { const result = await TestModel.restoreOne({ name: 'Puffy2' }); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectModifiedCount)(result, 1); const puffy = await TestModel.findOne({ name: 'Puffy2' }).orFail(); (0, chai_1.expect)(puffy.deleted).to.equal(false); }); it('restoreMany() -> set deleted=false', async function () { const result = await TestModel.restoreMany({ name: 'Puffy' }); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectModifiedCount)(result, 2); const [puffy1, puffy2] = await TestModel.find({ name: 'Puffy' }); (0, chai_1.expect)(puffy1.deleted).to.equal(false); (0, chai_1.expect)(puffy2.deleted).to.equal(false); }); }); (0, mocha_1.describe)('delete with timestamps', function () { let TestModel; before(async function () { TestModel = (0, setupModel_1.default)('TestDeleteWithTimestamps', { name: String }, {}, { timestamps: true }); }); after(async function () { await (0, dropModel_1.default)('TestDeleteWithTimestamps'); }); it('deleteOne() -> will not change updatedAt', async function () { const puffy = await TestModel.create({ name: 'Puffy1' }); const updatedAt = new Date(puffy.updatedAt); const result = await puffy.deleteOne(); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 1); const doc = await TestModel.findById(puffy.id).withDeleted().orFail(); (0, chai_1.expect)(doc.updatedAt).to.deep.equal(updatedAt); }); it('deleteOne() -> will not change updatedAt', async function () { const puffy = await TestModel.create({ name: 'Puffy2' }); const updatedAt = new Date(puffy.updatedAt); const result = await TestModel.deleteOne({ name: 'Puffy2' }); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 1); const doc = await TestModel.findById(puffy.id).withDeleted().orFail(); (0, chai_1.expect)(doc.deleted).to.equal(true); (0, chai_1.expect)(doc.updatedAt).to.deep.equal(updatedAt); }); it('restoreOne() -> will not change updatedAt', async function () { const puffy = await TestModel.findOne({ name: 'Puffy1' }).withDeleted().orFail(); const updatedAt = new Date(puffy.updatedAt); const doc = await puffy.restoreOne(); (0, chai_1.expect)(doc.deleted).to.equal(false); (0, chai_1.expect)(doc.updatedAt).to.deep.equal(updatedAt); }); it('restoreOne() -> will not change updatedAt', async function () { const before = await TestModel.findOne({ name: 'Puffy2' }).withDeleted().orFail(); const updatedAt = new Date(before.updatedAt); await TestModel.restoreOne({ name: 'Puffy2' }); const puffy = await TestModel.findOne({ name: 'Puffy2' }).orFail(); (0, chai_1.expect)(puffy.deleted).to.equal(false); (0, chai_1.expect)(puffy.updatedAt).to.deep.equal(updatedAt); }); }); (0, mocha_1.describe)('delete with validateBeforeDelete', function () { let TestModelTrue; let TestModelFalse; before(async function () { TestModelTrue = (0, setupModel_1.default)('TestValidateBeforeDeleteTrue', { name: { type: String, required: true } }, { validateBeforeDelete: true }); TestModelFalse = (0, setupModel_1.default)('TestValidateBeforeDeleteFalse', { name: { type: String, required: true } }, { validateBeforeDelete: false }); }); after(async function () { await (0, dropModel_1.default)('TestValidateBeforeDeleteTrue'); await (0, dropModel_1.default)('TestValidateBeforeDeleteFalse'); }); it('deleteOne() -> will raise ValidationError error', async function () { const puffy = await TestModelTrue.create({ name: 'Puffy1' }); puffy.name = ''; try { const result = await puffy.deleteOne(); (0, mongooseExpects_1.expectDeletedCount)(result, 0); } catch (error) { expectError(error); (0, chai_1.expect)(error.name).to.equal('ValidationError'); } }); it('deleteOne() -> will not raise ValidationError error', async function () { const puffy = await TestModelFalse.create({ name: 'Puffy1' }); puffy.name = ''; const result = await puffy.deleteOne(); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 1); }); }); (0, mocha_1.describe)('deleted schema options', function () { let TestModel; before(async function () { TestModel = (0, setupModel_1.default)('TestSchemaOptions', { name: String }, { deleted: { alias: 'destroyed' } }); }); after(async function () { await (0, dropModel_1.default)('TestSchemaOptions'); }); it('use custom schema alias', async function () { const puffy = await TestModel.create({ name: 'Puffy1' }); const result = await puffy.deleteOne(); (0, mongooseExpects_1.expectOk)(result); (0, mongooseExpects_1.expectDeletedCount)(result, 1); const doc = await TestModel.findById(puffy.id).withDeleted().orFail(); (0, chai_1.expect)(doc.destroyed).to.equal(true); }); }); function expectError(error) { if (!(error instanceof Error)) { throw new TypeError('error is not of type Error'); } }