graphql-compose-mongoose
Version:
Plugin for `graphql-compose` which derive a graphql types from a mongoose model.
204 lines (198 loc) • 4.38 kB
JavaScript
"use strict";
var _mongoose = _interopRequireDefault(require("mongoose"));
var _getIndexesFromModel = require("../getIndexesFromModel");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const AgentSchema = new _mongoose.default.Schema({
subDoc: {
field1: String,
field2: {
field21: String,
field22: String
}
},
name: {
type: String,
description: 'Person name'
},
someUniqField: {
type: String,
unique: true
},
age: {
type: Number,
description: 'Full years'
},
gender: {
type: String,
enum: ['male', 'female', 'ladyboy']
},
skills: {
type: [String],
default: [],
description: 'List of skills'
},
relocation: {
type: Boolean,
description: 'Does candidate relocate to another region'
}
});
AgentSchema.set('autoIndex', false);
AgentSchema.index({
name: 1,
age: -1
});
AgentSchema.index({
'subDoc.field2': 1
});
AgentSchema.index({
name: 'text',
skills: 'text'
}, {
unique: true
});
AgentSchema.index({
name: 1,
someOtherField: -1
}, {
unique: true
});
const AgentModel = _mongoose.default.model('Agent', AgentSchema);
describe('getIndexesFromModel()', () => {
it('should get regular indexes and extract compound idx by default', () => {
const idx = (0, _getIndexesFromModel.getIndexesFromModel)(AgentModel);
expect(idx).toEqual(expect.arrayContaining([{
_id: 1
}, {
name: 1
}, {
name: 1,
age: -1
}, {
'subDoc.field2': 1
}, {
someUniqField: 1
}, {
name: 1,
someOtherField: -1
}]));
});
it('should not extract compound indexes', () => {
const idx = (0, _getIndexesFromModel.getIndexesFromModel)(AgentModel, {
extractCompound: false
});
expect(idx).toEqual(expect.arrayContaining([{
_id: 1
}, {
name: 1,
age: -1
}, {
'subDoc.field2': 1
}, {
someUniqField: 1
}, {
name: 1,
someOtherField: -1
}]));
});
it('it should return specialIndexes indexes', () => {
const idx = (0, _getIndexesFromModel.getIndexesFromModel)(AgentModel, {
skipSpecificIndexes: false
});
expect(idx).toEqual(expect.arrayContaining([{
_id: 1
}, {
name: 1
}, {
name: 1,
age: -1
}, {
'subDoc.field2': 1
}, {
name: 'text'
}, {
name: 'text',
skills: 'text'
}, {
someUniqField: 1
}, {
name: 1,
someOtherField: -1
}]));
});
});
describe('getUniqueIndexes()', () => {
it('should return unique indexes', () => {
const idx = (0, _getIndexesFromModel.getUniqueIndexes)(AgentModel);
expect(idx).toEqual(expect.arrayContaining([{
_id: 1
}, {
someUniqField: 1
}, {
name: 1,
someOtherField: -1
}]));
});
});
describe('extendByReversedIndexes()', () => {
it('should return extended indexes list', () => {
const idxSource = [{
_id: 1
}, {
someUniqField: 1
}, {
name: 1,
someOtherField: -1
}];
const idx = (0, _getIndexesFromModel.extendByReversedIndexes)(idxSource);
expect(idx).toEqual([{
_id: 1
}, {
_id: -1
}, {
someUniqField: 1
}, {
someUniqField: -1
}, {
name: 1,
someOtherField: -1
}, {
name: -1,
someOtherField: 1
}]);
});
it('should return extended indexes list with reversed first', () => {
const idxSource = [{
_id: 1
}, {
someUniqField: 1
}, {
name: 1,
someOtherField: -1
}];
const idx = (0, _getIndexesFromModel.extendByReversedIndexes)(idxSource, {
reversedFirst: true
});
expect(idx).toEqual([{
_id: -1
}, {
_id: 1
}, {
someUniqField: -1
}, {
someUniqField: 1
}, {
name: -1,
someOtherField: 1
}, {
name: 1,
someOtherField: -1
}]);
});
});
describe('getIndexedFieldNamesForGraphQL()', () => {
it('should return array of indexed fieldNames', () => {
const indexedFields = (0, _getIndexesFromModel.getIndexedFieldNamesForGraphQL)(AgentModel);
expect(indexedFields).toEqual(expect.arrayContaining(['_id', 'someUniqField', 'name', 'subDoc__field2']));
expect(indexedFields).not.toEqual(expect.arrayContaining(['age', 'gender']));
});
});