11import { expect } from 'chai' ;
22import mongoose from 'mongoose' ;
3- import getIndexesFromModel from '../getIndexesFromModel' ;
3+ import {
4+ getIndexesFromModel ,
5+ getUniqueIndexes ,
6+ extendByReversedIndexes ,
7+ } from '../getIndexesFromModel' ;
48
59const AgentSchema = new mongoose . Schema (
610 {
@@ -17,6 +21,11 @@ const AgentSchema = new mongoose.Schema(
1721 description : 'Person name' ,
1822 } ,
1923
24+ someUniqField : {
25+ type : String ,
26+ unique : true ,
27+ } ,
28+
2029 age : {
2130 type : Number ,
2231 description : 'Full years' ,
@@ -43,18 +52,21 @@ const AgentSchema = new mongoose.Schema(
4352AgentSchema . set ( 'autoIndex' , false ) ;
4453AgentSchema . index ( { name : 1 , age : - 1 } ) ;
4554AgentSchema . index ( { 'subDoc.field2' : 1 } ) ;
46- AgentSchema . index ( { name : 'text' , skills : 'text' } ) ;
55+ AgentSchema . index ( { name : 'text' , skills : 'text' } , { unique : true } ) ;
56+ AgentSchema . index ( { name : 1 , someOtherField : - 1 } , { unique : true } ) ;
4757
4858const AgentModel = mongoose . model ( 'Agent' , AgentSchema ) ;
4959
50- describe ( 'getIndexesFromModel' , ( ) => {
60+ describe ( 'getIndexesFromModel() ' , ( ) => {
5161 it ( 'should get regular indexes and extract compound idx by default' , ( ) => {
5262 const idx = getIndexesFromModel ( AgentModel ) ;
5363 expect ( idx ) . to . deep . have . all . members ( [
5464 { _id : 1 } ,
5565 { name : 1 } ,
5666 { name : 1 , age : - 1 } ,
5767 { 'subDoc.field2' : 1 } ,
68+ { someUniqField : 1 } ,
69+ { name : 1 , someOtherField : - 1 } ,
5870 ] ) ;
5971 } ) ;
6072
@@ -64,18 +76,70 @@ describe('getIndexesFromModel', () => {
6476 { _id : 1 } ,
6577 { name : 1 , age : - 1 } ,
6678 { 'subDoc.field2' : 1 } ,
79+ { someUniqField : 1 } ,
80+ { name : 1 , someOtherField : - 1 } ,
6781 ] ) ;
6882 } ) ;
6983
7084 it ( 'it should return specialIndexes indexes' , ( ) => {
71- const idx = getIndexesFromModel ( AgentModel , { skipSpecificIndexes : false } ) ;
85+ const idx = getIndexesFromModel ( AgentModel , { skipSpecificIndexes : false } ) ;
7286 expect ( idx ) . to . deep . have . all . members ( [
7387 { _id : 1 } ,
7488 { name : 1 } ,
7589 { name : 1 , age : - 1 } ,
7690 { 'subDoc.field2' : 1 } ,
7791 { name : 'text' } ,
7892 { name : 'text' , skills : 'text' } ,
93+ { someUniqField : 1 } ,
94+ { name : 1 , someOtherField : - 1 } ,
95+ ] ) ;
96+ } ) ;
97+ } ) ;
98+
99+
100+ describe ( 'getUniqueIndexes()' , ( ) => {
101+ it ( 'should return unique indexes' , ( ) => {
102+ const idx = getUniqueIndexes ( AgentModel ) ;
103+ expect ( idx ) . to . deep . have . all . members ( [
104+ { _id : 1 } ,
105+ { someUniqField : 1 } ,
106+ { name : 1 , someOtherField : - 1 } ,
107+ ] ) ;
108+ } ) ;
109+ } ) ;
110+
111+ describe ( 'extendByReversedIndexes()' , ( ) => {
112+ it ( 'should return extended indexes list' , ( ) => {
113+ const idxSource = [
114+ { _id : 1 } ,
115+ { someUniqField : 1 } ,
116+ { name : 1 , someOtherField : - 1 } ,
117+ ] ;
118+ const idx = extendByReversedIndexes ( idxSource ) ;
119+ expect ( idx ) . deep . equal ( [
120+ { _id : 1 } ,
121+ { _id : - 1 } ,
122+ { someUniqField : 1 } ,
123+ { someUniqField : - 1 } ,
124+ { name : 1 , someOtherField : - 1 } ,
125+ { name : - 1 , someOtherField : 1 } ,
126+ ] ) ;
127+ } ) ;
128+
129+ it ( 'should return extended indexes list with reversed first' , ( ) => {
130+ const idxSource = [
131+ { _id : 1 } ,
132+ { someUniqField : 1 } ,
133+ { name : 1 , someOtherField : - 1 } ,
134+ ] ;
135+ const idx = extendByReversedIndexes ( idxSource , { reversedFirst : true } ) ;
136+ expect ( idx ) . deep . equal ( [
137+ { _id : - 1 } ,
138+ { _id : 1 } ,
139+ { someUniqField : - 1 } ,
140+ { someUniqField : 1 } ,
141+ { name : - 1 , someOtherField : 1 } ,
142+ { name : 1 , someOtherField : - 1 } ,
79143 ] ) ;
80144 } ) ;
81145} ) ;
0 commit comments