deno.land / x / mongoose@6.7.5 / test / helpers / indexes.getRelatedIndexes.test.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384'use strict';const assert = require('assert');const start = require('../common.js');const mongoose = start.mongoose;const Schema = mongoose.Schema;
const { getRelatedDBIndexes, getRelatedSchemaIndexes} = require('../../lib/helpers/indexes/getRelatedIndexes.js');
describe('getRelatedIndexes', () => { let db; beforeEach(() => db = start()); after(() => db.close());
describe('getRelatedSchemaIndexes', () => { it('with base model, no discriminator, it gets all indexes', () => { // Arrange const eventSchema = new Schema({ actorId: { type: Schema.Types.ObjectId }, happenedAt: Date }); eventSchema.index({ actorId: 1 }, { unique: true }); eventSchema.index({ happenedAt: 1 }, { partialFilterExpression: { __t: 'EventButNoDiscriminator' } }); const Event = db.model('Event', eventSchema);
// Act const filteredSchemaIndexes = getRelatedSchemaIndexes(Event, Event.schema.indexes());
// Assert assert.deepStrictEqual( filteredSchemaIndexes, [ [{ actorId: 1 }, { background: true, unique: true }], [ { happenedAt: 1 }, { background: true, partialFilterExpression: { __t: 'EventButNoDiscriminator' } } ] ] ); }); it('with base model that has discriminator, it ignores discriminator indexes', () => { // Arrange const eventSchema = new Schema( { actorId: { type: Schema.Types.ObjectId } }, { autoIndex: false } ); eventSchema.index({ actorId: 1 }, { unique: true });
const Event = db.model('Event', eventSchema);
const clickEventSchema = new Schema( { clickedAt: Date, productCategory: String }, { autoIndex: false } ); clickEventSchema.index( { clickedAt: 1 }, { partialFilterExpression: { productCategory: 'Computers' } } ); Event.discriminator('ClickEvent', clickEventSchema);
const buyEventSchema = new Schema( { boughtAt: String, productPrice: Number }, { autoIndex: false } ); buyEventSchema.index( { boughtAt: 1 }, { unique: true, partialFilterExpression: { productPrice: { $gt: 100 } } } ); Event.discriminator('BuyEvent', buyEventSchema);
// Act const filteredSchemaIndexes = getRelatedSchemaIndexes(Event, Event.schema.indexes());
// Assert assert.deepStrictEqual( filteredSchemaIndexes, [ [{ actorId: 1 }, { background: true, unique: true }] ] ); }); it('with discriminator model, it only gets discriminator indexes', () => { // Arrange const eventSchema = new Schema( { actorId: { type: Schema.Types.ObjectId } }, { autoIndex: false } ); eventSchema.index({ actorId: 1 }, { unique: true });
const Event = db.model('Event', eventSchema);
const clickEventSchema = new Schema( { clickedAt: Date, productCategory: String }, { autoIndex: false } ); clickEventSchema.index( { clickedAt: 1 }, { partialFilterExpression: { productCategory: 'Computers' } } ); Event.discriminator('ClickEvent', clickEventSchema);
const buyEventSchema = new Schema( { boughtAt: String, productPrice: Number }, { autoIndex: false } ); buyEventSchema.index( { boughtAt: 1 }, { unique: true, partialFilterExpression: { productPrice: { $gt: 100 } } } ); const BuyEvent = Event.discriminator('BuyEvent', buyEventSchema);
// Act const filteredSchemaIndexes = getRelatedSchemaIndexes(BuyEvent, BuyEvent.schema.indexes());
// Assert assert.deepStrictEqual( filteredSchemaIndexes, [ [ { boughtAt: 1 }, { background: true, unique: true, partialFilterExpression: { __t: 'BuyEvent', productPrice: { $gt: 100 } } } ] ] ); }); }); describe('getRelatedDBIndexes', () => { it('with base model, no discriminator, it gets all indexes', () => { // Arrange const eventSchema = new Schema(); const Event = db.model('Event', eventSchema);
const dbIndexes = [ { v: 2, key: { _id: 1 }, name: '_id_', ns: 'mongoose_test.some_collection' }, { v: 2, unique: true, key: { actorId: 1 }, name: 'actorId_1', ns: 'mongoose_test.some_collection', background: true }, { v: 2, unique: true, key: { doesNotMatter: 1 }, name: 'doesNotMatter_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'EventButNoDiscriminator' }, background: true } ];
// Act const filteredDBIndexes = getRelatedDBIndexes(Event, dbIndexes);
// Assert assert.deepStrictEqual( filteredDBIndexes, [ { v: 2, key: { _id: 1 }, name: '_id_', ns: 'mongoose_test.some_collection' }, { v: 2, unique: true, key: { actorId: 1 }, name: 'actorId_1', ns: 'mongoose_test.some_collection', background: true }, { v: 2, unique: true, key: { doesNotMatter: 1 }, name: 'doesNotMatter_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'EventButNoDiscriminator' }, background: true } ] ); }); it('with base model that has discriminator, it ignores discriminator indexes', () => { // Arrange const eventSchema = new Schema( { actorId: { type: Schema.Types.ObjectId } }, { autoIndex: false } ); eventSchema.index({ actorId: 1 }, { unique: true });
const Event = db.model('Event', eventSchema);
const clickEventSchema = new Schema( { clickedAt: Date, productCategory: String }, { autoIndex: false } ); clickEventSchema.index( { clickedAt: 1 }, { partialFilterExpression: { productCategory: 'Computers' } } ); Event.discriminator('ClickEvent', clickEventSchema);
const buyEventSchema = new Schema( { boughtAt: String, productPrice: Number }, { autoIndex: false } ); buyEventSchema.index( { boughtAt: 1 }, { unique: true, partialFilterExpression: { productPrice: { $gt: 100 } } } ); Event.discriminator('BuyEvent', buyEventSchema);
const dbIndexes = [ { v: 2, key: { _id: 1 }, name: '_id_', ns: 'mongoose_test.some_collection' }, { v: 2, unique: true, key: { actorId: 1 }, name: 'actorId_1', ns: 'mongoose_test.some_collection', background: true }, { unique: true, key: { boughtAt: 1 }, name: 'boughtAt_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'BuyEvent' }, background: true }, { unique: true, key: { clickedAt: 1 }, name: 'clickedAt_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'ClickEvent' }, background: true } ];
// Act const filteredDBIndexes = getRelatedDBIndexes(Event, dbIndexes);
// Assert assert.deepStrictEqual( filteredDBIndexes, [ { v: 2, key: { _id: 1 }, name: '_id_', ns: 'mongoose_test.some_collection' }, { v: 2, unique: true, key: { actorId: 1 }, name: 'actorId_1', ns: 'mongoose_test.some_collection', background: true } ] ); }); it('with discriminator model, it only gets discriminator indexes', () => { // Arrange const eventSchema = new Schema( { actorId: { type: Schema.Types.ObjectId } }, { autoIndex: false } ); eventSchema.index({ actorId: 1 }, { unique: true });
const Event = db.model('Event', eventSchema);
const clickEventSchema = new Schema( { clickedAt: Date, productCategory: String }, { autoIndex: false } ); clickEventSchema.index( { clickedAt: 1 }, { partialFilterExpression: { productCategory: 'Computers' } } ); Event.discriminator('ClickEvent', clickEventSchema);
const buyEventSchema = new Schema( { boughtAt: String, productPrice: Number }, { autoIndex: false } ); buyEventSchema.index( { boughtAt: 1 }, { unique: true, partialFilterExpression: { productPrice: { $gt: 100 } } } ); const BuyEvent = Event.discriminator('BuyEvent', buyEventSchema);
const dbIndexes = [ { v: 2, key: { _id: 1 }, name: '_id_', ns: 'mongoose_test.some_collection' }, { v: 2, unique: true, key: { actorId: 1 }, name: 'actorId_1', ns: 'mongoose_test.some_collection', background: true }, { unique: true, key: { boughtAt: 1 }, name: 'boughtAt_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'BuyEvent' }, background: true }, { unique: true, key: { clickedAt: 1 }, name: 'clickedAt_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'ClickEvent' }, background: true } ];
// Act const filteredDBIndexes = getRelatedDBIndexes(BuyEvent, dbIndexes);
// Assert assert.deepStrictEqual( filteredDBIndexes, [ { unique: true, key: { boughtAt: 1 }, name: 'boughtAt_1', ns: 'mongoose_test.some_collection', partialFilterExpression: { __t: 'BuyEvent' }, background: true } ] ); }); });});
Version Info