@@ -125,59 +125,84 @@ describe('findIndexInSortedArray', () => {
125
125
const messages = generateMessages ( { sort : 'asc' } ) . map ( formatMessage ) ;
126
126
127
127
it ( 'finds index of the message with closest matching created_at' , ( ) => {
128
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ;
128
+ [
129
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : true } ,
130
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : false } ,
131
+ ] . forEach ( ( { newMessage, returnOnMidMatch} ) => {
132
+ const index = findIndexInSortedArray ( {
133
+ needle : newMessage ,
134
+ returnOnMidMatch,
135
+ sortedArray : messages ,
136
+ sortDirection : 'ascending' ,
137
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
138
+ } ) ;
139
+
140
+ expect ( index ) . to . equal ( 3 ) ;
141
+ } )
129
142
130
- const index = findIndexInSortedArray ( {
131
- needle : newMessage ,
132
- sortedArray : messages ,
133
- sortDirection : 'ascending' ,
134
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
135
- } ) ;
136
-
137
- expect ( index ) . to . equal ( 3 ) ;
138
143
} ) ;
139
144
140
145
it ( 'finds exact index' , ( ) => {
141
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 20 * 1000 ) } ) as MessageResponse ) ;
142
-
143
- const index = findIndexInSortedArray ( {
144
- needle : newMessage ,
145
- sortedArray : messages ,
146
- sortDirection : 'ascending' ,
147
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
146
+ [
147
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 20 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : true } ,
148
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 20 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : false } ,
149
+ ] . forEach ( ( { newMessage, returnOnMidMatch} ) => {
150
+ const index = findIndexInSortedArray ( {
151
+ needle : newMessage ,
152
+ returnOnMidMatch,
153
+ sortedArray : messages ,
154
+ sortDirection : 'ascending' ,
155
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
156
+ } ) ;
157
+
158
+ if ( returnOnMidMatch ) {
159
+ expect ( index ) . to . equal ( 2 ) ;
160
+ } else {
161
+ expect ( index ) . to . equal ( 3 ) ;
162
+ }
148
163
} ) ;
149
-
150
- expect ( index ) . to . equal ( 2 ) ;
151
164
} ) ;
152
165
} ) ;
153
166
154
167
describe ( 'descending order' , ( ) => {
155
168
const messages = generateMessages ( { sort : 'desc' } ) . map ( formatMessage ) ;
156
169
157
170
it ( 'finds index of the message with closest matching created_at' , ( ) => {
158
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ;
159
-
160
- const index = findIndexInSortedArray ( {
161
- needle : newMessage ,
162
- sortedArray : messages ,
163
- sortDirection : 'descending' ,
164
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
171
+ [
172
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : true } ,
173
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : false } ,
174
+ ] . forEach ( ( { newMessage, returnOnMidMatch} ) => {
175
+
176
+ const index = findIndexInSortedArray ( {
177
+ needle : newMessage ,
178
+ returnOnMidMatch,
179
+ sortedArray : messages ,
180
+ sortDirection : 'descending' ,
181
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
182
+ } ) ;
183
+
184
+ expect ( index ) . to . equal ( 7 ) ;
165
185
} ) ;
166
-
167
- expect ( index ) . to . equal ( 7 ) ;
168
186
} ) ;
169
187
170
188
it ( 'finds exact index' , ( ) => {
171
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 10 * 1000 ) } ) as MessageResponse ) ;
172
-
173
- const index = findIndexInSortedArray ( {
174
- needle : newMessage ,
175
- sortedArray : messages ,
176
- sortDirection : 'descending' ,
177
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
189
+ [
190
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 10 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : true } ,
191
+ { newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 10 * 1000 ) } ) as MessageResponse ) , returnOnMidMatch : false } ,
192
+ ] . forEach ( ( { newMessage, returnOnMidMatch} ) => {
193
+ const index = findIndexInSortedArray ( {
194
+ needle : newMessage ,
195
+ returnOnMidMatch,
196
+ sortedArray : messages ,
197
+ sortDirection : 'descending' ,
198
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
199
+ } ) ;
200
+ if ( returnOnMidMatch ) {
201
+ expect ( index ) . to . equal ( 8 ) ;
202
+ } else {
203
+ expect ( index ) . to . equal ( 9 ) ;
204
+ }
178
205
} ) ;
179
-
180
- expect ( index ) . to . equal ( 8 ) ;
181
206
} ) ;
182
207
} ) ;
183
208
} ) ;
0 commit comments