@@ -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 : 'annet@example.com' } } ,
103
+ { person : { name : 'Billy' , email : 'me@billy.com' } } ,
104
+ { person : { name : 'Joan' , email : 'joan@example.net' } } ,
105
+ { person : { name : 'John' , email : 'john@example.com' } } ,
106
+ { person : { name : 'Rita' , email : 'rita@example.com' } } ] ;
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 : 'annet@example.com' } } ,
128
+ { person : { name : 'Billy' , email : 'me@billy.com' } } ,
129
+ { person : { name : 'Joan' , email : 'joan@example.net' } } ,
130
+ { person : { name : 'John' , email : 'john@example.com' } } ,
131
+ { person : { name : 'Rita' , email : 'rita@example.com' } } ] ;
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 : 'admin@example.com' , role : 'admin' } } ,
212
+ { id : 1 , details : { email : 'user1@example.com' , role : 'user' } } ,
213
+ { id : 2 , details : { email : 'user2@example.com' , role : 'user' } }
214
+ ] ;
215
+ var expr , comp ;
216
+
217
+ expr = { details : { email : 'user@example.com' , role : 'adm' } } ;
218
+ expect ( filter ( items , expr ) ) . toEqual ( [ ] ) ;
219
+
220
+ expr = { details : { email : 'admin@example.com' , role : 'adm' } } ;
221
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 0 ] ] ) ;
222
+
223
+ expr = { details : { email : 'admin@example.com' , role : 'adm' } } ;
224
+ expect ( filter ( items , expr , true ) ) . toEqual ( [ ] ) ;
225
+
226
+ expr = { details : { email : 'admin@example.com' , 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 : 'admin@example.com' , role : 'admn' } } ;
243
+ expect ( filter ( items , expr , comp ) ) . toEqual ( [ ] ) ;
244
+
245
+ expr = { details : { email : 'admin@example.com' , role : 'adm' } } ;
246
+ expect ( filter ( items , expr , comp ) ) . toEqual ( [ items [ 0 ] ] ) ;
247
+ } ) ;
180
248
} ) ;
181
249
} ) ;
0 commit comments