Files
overleaf-cep/services/web/test/unit/src/helpers/MockModel.js
T
Miguel Serrano f9871103bf Merge pull request #3949 from overleaf/msm-reenable-eslint-const-rule
Reenable eslint `prefer-const` rule

GitOrigin-RevId: 4f3825be8b8dff381095209085a36eaab76260d5
2021-05-06 02:09:14 +00:00

40 lines
1.2 KiB
JavaScript

const SandboxedModule = require('sandboxed-module')
const mongoose = require('mongoose')
/**
* Imports a model as we would usually do with e.g. `require('models/User')`
* an returns a model an schema, but without connecting to Mongo. This allows
* us to use model classes in tests, and to use them with `sinon-mongoose`
*
* @param modelName the name of the model - e.g. 'User'
* @param requires additional `requires` to be passed to SanboxedModule in
* the event that these also need to be stubbed. For example,
* additional dependent models to be included
*
* @return model and schema pair - e.g. { User, UserSchema }
*/
module.exports = (modelName, requires = {}) => {
const model = {}
requires['../infrastructure/Mongoose'] = {
createConnection: () => {
return {
model: () => {},
}
},
model: (modelName, schema) => {
model[modelName + 'Schema'] = schema
model[modelName] = mongoose.model(modelName, schema)
},
Schema: mongoose.Schema,
Types: mongoose.Types,
}
SandboxedModule.require('../../../../app/src/models/' + modelName, {
requires: requires,
})
return model
}