1
1
import { expect } from 'chai' ;
2
2
import mongoose from 'mongoose' ;
3
- import getIndexesFromModel from '../getIndexesFromModel' ;
3
+ import {
4
+ getIndexesFromModel ,
5
+ getUniqueIndexes ,
6
+ extendByReversedIndexes ,
7
+ } from '../getIndexesFromModel' ;
4
8
5
9
const AgentSchema = new mongoose . Schema (
6
10
{
@@ -17,6 +21,11 @@ const AgentSchema = new mongoose.Schema(
17
21
description : 'Person name' ,
18
22
} ,
19
23
24
+ someUniqField : {
25
+ type : String ,
26
+ unique : true ,
27
+ } ,
28
+
20
29
age : {
21
30
type : Number ,
22
31
description : 'Full years' ,
@@ -43,18 +52,21 @@ const AgentSchema = new mongoose.Schema(
43
52
AgentSchema . set ( 'autoIndex' , false ) ;
44
53
AgentSchema . index ( { name : 1 , age : - 1 } ) ;
45
54
AgentSchema . 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 } ) ;
47
57
48
58
const AgentModel = mongoose . model ( 'Agent' , AgentSchema ) ;
49
59
50
- describe ( 'getIndexesFromModel' , ( ) => {
60
+ describe ( 'getIndexesFromModel() ' , ( ) => {
51
61
it ( 'should get regular indexes and extract compound idx by default' , ( ) => {
52
62
const idx = getIndexesFromModel ( AgentModel ) ;
53
63
expect ( idx ) . to . deep . have . all . members ( [
54
64
{ _id : 1 } ,
55
65
{ name : 1 } ,
56
66
{ name : 1 , age : - 1 } ,
57
67
{ 'subDoc.field2' : 1 } ,
68
+ { someUniqField : 1 } ,
69
+ { name : 1 , someOtherField : - 1 } ,
58
70
] ) ;
59
71
} ) ;
60
72
@@ -64,18 +76,70 @@ describe('getIndexesFromModel', () => {
64
76
{ _id : 1 } ,
65
77
{ name : 1 , age : - 1 } ,
66
78
{ 'subDoc.field2' : 1 } ,
79
+ { someUniqField : 1 } ,
80
+ { name : 1 , someOtherField : - 1 } ,
67
81
] ) ;
68
82
} ) ;
69
83
70
84
it ( 'it should return specialIndexes indexes' , ( ) => {
71
- const idx = getIndexesFromModel ( AgentModel , { skipSpecificIndexes : false } ) ;
85
+ const idx = getIndexesFromModel ( AgentModel , { skipSpecificIndexes : false } ) ;
72
86
expect ( idx ) . to . deep . have . all . members ( [
73
87
{ _id : 1 } ,
74
88
{ name : 1 } ,
75
89
{ name : 1 , age : - 1 } ,
76
90
{ 'subDoc.field2' : 1 } ,
77
91
{ name : 'text' } ,
78
92
{ 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 } ,
79
143
] ) ;
80
144
} ) ;
81
145
} ) ;
0 commit comments