Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 4x 4x 4x 38x 38x 25x 13x 4x 4x 38x 38x 38x 42x 38x 4x 50x 43x 13x 13x 7x 7x 7x 5x 7x 50x 4x 37x 37x 37x 37x 37x 4x 39x 39x 4x 4x 4x 4x | import { Types } from "mongoose";
// Facade
const ModelMock = {};
/*
* STUBS
*/
ModelMock.collection = {};
/*
* MONGOOSE_MODEL CLASS
*/
ModelMock.GooseModel = class {
findById = jest.fn(async (id) => {
if (id) {
return ModelMock.collection[id];
}
return {};
});
};
/*
* MODEL OBJECT
*/
ModelMock.object = {
save: jest.fn(),
delete: jest.fn(),
find: jest.fn(),
};
/*
* MODEL CLASS
*/
ModelMock.Class = jest.fn(async (id) => {
// All models have an async constructor
const _model = new ModelMock.GooseModel();
const _doc = await _model.findById(id);
for (let k in _doc) {
ModelMock.object[k] = _doc[k];
}
return ModelMock.object;
});
/*
* HELPERS
*/
ModelMock.clearModelObject = (clearSpies = true) => {
if (clearSpies) {
ModelMock.object = {
save: jest.fn(() => {
ModelMock.object._id = ModelMock.object._id ? ModelMock.object._id : new Types.ObjectId();
ModelMock.addDocToCollection(ModelMock.object._id, ModelMock.object);
}),
delete: (deleteSpy = jest.fn(() => {
Eif (ModelMock.collection[ModelMock.object._id]) {
delete ModelMock.collection[ModelMock.object._id];
}
// When deleting a doc, clears the model's properties but keep the state of the spies
ModelMock.clearModelObject(false);
})),
find: jest.fn(async (query) => {
return Object.values(ModelMock.collection);
}),
};
} else {
ModelMock.object = {
save: ModelMock.object.save,
delete: ModelMock.object.delete,
};
}
return ModelMock;
};
ModelMock.addDocToCollection = (id, doc) => {
Iif (typeof id == "undefined") {
throw "An ID must be given";
}
Iif (typeof doc !== "object") {
throw "Doc must be an object";
}
ModelMock.collection[id] = doc;
ModelMock.collection[id]._id = id;
return ModelMock;
};
ModelMock.clearCollection = (id, doc) => {
ModelMock.collection = {};
return ModelMock;
};
ModelMock.clearModelObject();
/*
* IMPORTS
* See: https://jestjs.io/docs/ecmascript-modules#module-mocking-in-esm
*/
jest.unstable_mockModule("@models/model.js", () => ({
default: ModelMock.Class,
}));
const mongoose = (await import("mongoose")).default;
mongoose.model = jest.fn(() => ModelMock.GooseModel);
export default ModelMock;
|