@@ -98,6 +98,19 @@ describe('Filter: filter', function() {
98
98
} ) ;
99
99
100
100
101
+ it ( 'should support deep expression objects with multiple properties' , function ( ) {
102
+ var items = [ { person :
{ name :
'Annet' , email :
'[email protected] ' } } ,
103
+ { person :
{ name :
'Billy' , email :
'[email protected] ' } } ,
104
+ { person :
{ name :
'Joan' , email :
'[email protected] ' } } ,
105
+ { person :
{ name :
'John' , email :
'[email protected] ' } } ,
106
+ { person :
{ name :
'Rita' , email :
'[email protected] ' } } ] ;
107
+ var expr = { person : { name : 'Jo' , email : '!example.com' } } ;
108
+
109
+ expect ( filter ( items , expr ) . length ) . toBe ( 1 ) ;
110
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 2 ] ] ) ;
111
+ } ) ;
112
+
113
+
101
114
it ( 'should match any properties for given "$" property' , function ( ) {
102
115
var items = [ { first : 'tom' , last : 'hevery' } ,
103
116
{ first : 'adam' , last : 'hevery' , alias : 'tom' , done : false } ,
@@ -110,6 +123,19 @@ describe('Filter: filter', function() {
110
123
} ) ;
111
124
112
125
126
+ it ( 'should match any properties in the nested object for given deep "$" property' , function ( ) {
127
+ var items = [ { person :
{ name :
'Annet' , email :
'[email protected] ' } } ,
128
+ { person :
{ name :
'Billy' , email :
'[email protected] ' } } ,
129
+ { person :
{ name :
'Joan' , email :
'[email protected] ' } } ,
130
+ { person :
{ name :
'John' , email :
'[email protected] ' } } ,
131
+ { person :
{ name :
'Rita' , email :
'[email protected] ' } } ] ;
132
+ var expr = { person : { $ : 'net' } } ;
133
+
134
+ expect ( filter ( items , expr ) . length ) . toBe ( 2 ) ;
135
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 0 ] , items [ 2 ] ] ) ;
136
+ } ) ;
137
+
138
+
113
139
it ( 'should support boolean properties' , function ( ) {
114
140
var items = [ { name : 'tom' , current : true } ,
115
141
{ name : 'demi' , current : false } ,
@@ -129,6 +155,7 @@ describe('Filter: filter', function() {
129
155
expect ( filter ( items , '!isk' ) [ 0 ] ) . toEqual ( items [ 1 ] ) ;
130
156
} ) ;
131
157
158
+
132
159
describe ( 'should support comparator' , function ( ) {
133
160
134
161
it ( 'as equality when true' , function ( ) {
@@ -177,5 +204,46 @@ describe('Filter: filter', function() {
177
204
expr = 10 ;
178
205
expect ( filter ( items , expr , comparator ) ) . toEqual ( [ items [ 2 ] , items [ 3 ] ] ) ;
179
206
} ) ;
207
+
208
+
209
+ it ( 'and use it correctly with deep expression objects' , function ( ) {
210
+ var items = [
211
+ { id :
0 , details :
{ email :
'[email protected] ' , role :
'admin' } } ,
212
+ { id :
1 , details :
{ email :
'[email protected] ' , role :
'user' } } ,
213
+ { id :
2 , details :
{ email :
'[email protected] ' , role :
'user' } }
214
+ ] ;
215
+ var expr , comp ;
216
+
217
+ expr = { details :
{ email :
'[email protected] ' , role :
'adm' } } ;
218
+ expect ( filter ( items , expr ) ) . toEqual ( [ ] ) ;
219
+
220
+ expr = { details :
{ email :
'[email protected] ' , role :
'adm' } } ;
221
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 0 ] ] ) ;
222
+
223
+ expr = { details :
{ email :
'[email protected] ' , role :
'adm' } } ;
224
+ expect ( filter ( items , expr , true ) ) . toEqual ( [ ] ) ;
225
+
226
+ expr = { details :
{ email :
'[email protected] ' , role :
'admin' } } ;
227
+ expect ( filter ( items , expr , true ) ) . toEqual ( [ items [ 0 ] ] ) ;
228
+
229
+ expr = { details : { email : 'user' , role : 'us' } } ;
230
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 1 ] , items [ 2 ] ] ) ;
231
+
232
+ expr = { id : 0 , details : { email : 'user' , role : 'us' } } ;
233
+ expect ( filter ( items , expr ) ) . toEqual ( [ ] ) ;
234
+
235
+ expr = { id : 1 , details : { email : 'user' , role : 'us' } } ;
236
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 1 ] ] ) ;
237
+
238
+ comp = function ( actual , expected ) {
239
+ return isString ( actual ) && isString ( expected ) && ( actual . indexOf ( expected ) === 0 ) ;
240
+ } ;
241
+
242
+ expr = { details :
{ email :
'[email protected] ' , role :
'admn' } } ;
243
+ expect ( filter ( items , expr , comp ) ) . toEqual ( [ ] ) ;
244
+
245
+ expr = { details :
{ email :
'[email protected] ' , role :
'adm' } } ;
246
+ expect ( filter ( items , expr , comp ) ) . toEqual ( [ items [ 0 ] ] ) ;
247
+ } ) ;
180
248
} ) ;
181
249
} ) ;
0 commit comments