@stenneepro/mongoose-soft-delete
Version:
Mongoose soft delete plugin
146 lines (145 loc) • 7.22 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const crypto = __importStar(require("crypto"));
const mongoose_1 = require("mongoose");
const mocha_1 = require("mocha");
const setupModel_1 = __importDefault(require("./utils/setupModel"));
const dropModel_1 = __importDefault(require("./utils/dropModel"));
const chai_1 = require("chai");
const mongooseExpects_1 = require("./utils/mongooseExpects");
(0, mocha_1.describe)('deletedBy=true', function () {
let TestModel;
before(async function () {
TestModel = (0, setupModel_1.default)('TestDeletedBy', { name: String }, { deletedBy: true });
});
after(async function () {
await (0, dropModel_1.default)('TestDeletedBy');
});
it('deleteOneByUser() -> set deletedBy', async function () {
const puffy = await TestModel.create({ name: 'Puffy1' });
const userId = new mongoose_1.Types.ObjectId();
const result = await puffy.deleteOneByUser(userId);
(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.deletedBy).to.deep.equal(userId);
});
it('deleteOneByUser() -> set deletedBy', async function () {
await TestModel.create({ name: 'Puffy2' });
const userId = new mongoose_1.Types.ObjectId();
const result = await TestModel.deleteOneByUser(userId, { name: 'Puffy2' });
(0, mongooseExpects_1.expectOk)(result);
(0, mongooseExpects_1.expectDeletedCount)(result, 1);
const puffy = await TestModel.findOne({ name: 'Puffy2' }).withDeleted().orFail();
(0, chai_1.expect)(puffy.deletedBy).to.deep.equal(userId);
});
it('restoreOne() -> unset deletedBy', async function () {
const puffy = await TestModel.findOne({ name: 'Puffy1' }).withDeleted().orFail();
const doc = await puffy.restoreOne();
(0, chai_1.expect)(doc.deletedBy).to.not.exist;
});
it('restoreOne() -> unset deletedBy', async function () {
const result = await TestModel.restoreOne({ name: 'Puffy2' });
(0, mongooseExpects_1.expectOk)(result);
(0, mongooseExpects_1.expectMatchCount)(result, 1);
const puffy = await TestModel.findOne({ name: 'Puffy2' }).withDeleted().orFail();
(0, chai_1.expect)(puffy.deletedBy).to.not.exist;
});
});
(0, mocha_1.describe)('deletedBy=deleted_by', function () {
let TestModel;
before(async function () {
TestModel = (0, setupModel_1.default)('TestDeletedByCustomField', { name: String }, { deletedBy: 'deleted_by' });
});
after(async function () {
await (0, dropModel_1.default)('TestDeletedByCustomField');
});
it('deleteOneByUser() -> set deletedBy', async function () {
const puffy = await TestModel.create({ name: 'Puffy1' });
const userId = new mongoose_1.Types.ObjectId();
const result = await puffy.deleteOneByUser(userId);
(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.deletedBy).to.deep.equal(userId);
(0, chai_1.expect)(doc.get('deleted_by')).to.deep.equal(userId);
});
it('restoreOne() -> unset deletedAt', async function () {
const puffy = await TestModel.findOne({ name: 'Puffy1' }).withDeleted().orFail();
const doc = await puffy.restoreOne();
(0, chai_1.expect)(doc.deletedBy).to.not.exist;
(0, chai_1.expect)(doc.get('deleted_by')).to.not.exist;
});
});
(0, mocha_1.describe)('deletedBy custom schema', function () {
let TestModel;
before(async function () {
TestModel = (0, setupModel_1.default)('TestDeletedByCustomSchema', { name: String }, { deletedBy: { name: 'deleted_by', type: String, get: (id) => { return id && { id }; } } });
});
after(async function () {
await (0, dropModel_1.default)('TestDeletedByCustomSchema');
});
it('deleteOneByUser() -> set deletedBy', async function () {
const puffy = await TestModel.create({ name: 'Puffy1' });
const userId = new mongoose_1.Types.ObjectId().toString();
const result = await puffy.deleteOneByUser(userId);
(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.deletedBy).to.deep.equal({ id: userId });
});
it('restoreOne() -> unset deletedAt', async function () {
const puffy = await TestModel.findOne({ name: 'Puffy1' }).withDeleted().orFail();
const doc = await puffy.restoreOne();
(0, chai_1.expect)(doc.deletedBy).to.not.exist;
});
});
(0, mocha_1.describe)('deletedBy object without alias', function () {
let TestModel;
before(async function () {
TestModel = (0, setupModel_1.default)('TestDeletedByWithoutAlias', { name: String }, { deletedBy: { type: String } });
});
after(async function () {
await (0, dropModel_1.default)('TestDeletedByWithoutAlias');
});
it('deleteOneByUser() -> set deletedBy', async function () {
const puffy = await TestModel.create({ name: 'Daffy1' });
const userId = crypto.randomBytes(10).toString('hex');
const result = await puffy.deleteOneByUser(userId);
(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.deletedBy).to.equal(userId);
});
it('restoreOne() -> unset deletedAt', async function () {
const puffy = await TestModel.findOne({ name: 'Daffy1' }).withDeleted().orFail();
const doc = await puffy.restoreOne();
(0, chai_1.expect)(doc.deletedBy).to.not.exist;
});
});