@@ -7,6 +7,7 @@ describe('Filter: filter', function() {
7
7
filter = $filter ( 'filter' ) ;
8
8
} ) ) ;
9
9
10
+
10
11
it ( 'should filter by string' , function ( ) {
11
12
var items = [ 'MIsKO' , { name : 'shyam' } , [ 'adam' ] , 1234 ] ;
12
13
expect ( filter ( items , '' ) . length ) . toBe ( 4 ) ;
@@ -27,13 +28,15 @@ describe('Filter: filter', function() {
27
28
expect ( filter ( items , "I don't exist" ) . length ) . toBe ( 0 ) ;
28
29
} ) ;
29
30
31
+
30
32
it ( 'should not read $ properties' , function ( ) {
31
33
expect ( '' . charAt ( 0 ) ) . toBe ( '' ) ; // assumption
32
34
33
35
var items = [ { $name : 'misko' } ] ;
34
36
expect ( filter ( items , 'misko' ) . length ) . toBe ( 0 ) ;
35
37
} ) ;
36
38
39
+
37
40
it ( 'should filter on specific property' , function ( ) {
38
41
var items = [ { ignore : 'a' , name : 'a' } , { ignore : 'a' , name : 'abc' } ] ;
39
42
expect ( filter ( items , { } ) . length ) . toBe ( 2 ) ;
@@ -44,11 +47,13 @@ describe('Filter: filter', function() {
44
47
expect ( filter ( items , { name : 'b' } ) [ 0 ] . name ) . toBe ( 'abc' ) ;
45
48
} ) ;
46
49
50
+
47
51
it ( 'should take function as predicate' , function ( ) {
48
52
var items = [ { name : 'a' } , { name : 'abc' , done : true } ] ;
49
53
expect ( filter ( items , function ( i ) { return i . done ; } ) . length ) . toBe ( 1 ) ;
50
54
} ) ;
51
55
56
+
52
57
it ( 'should pass the index to a function predicate' , function ( ) {
53
58
var items = [ 0 , 1 , 2 , 3 ] ;
54
59
@@ -59,6 +64,7 @@ describe('Filter: filter', function() {
59
64
expect ( result ) . toEqual ( [ 0 , 2 ] ) ;
60
65
} ) ;
61
66
67
+
62
68
it ( 'should take object as predicate' , function ( ) {
63
69
var items = [ { first : 'misko' , last : 'hevery' } ,
64
70
{ first : 'adam' , last : 'abrons' } ] ;
@@ -92,6 +98,18 @@ describe('Filter: filter', function() {
92
98
} ) ;
93
99
94
100
101
+ it ( 'should support deep expression objects with multiple properties' , function ( ) {
102
+ var items = [ { person : { name : 'John' , email : 'john@example.com' } } ,
103
+ { person : { name : 'Rita' , email : 'rita@example.com' } } ,
104
+ { person : { name : 'Billy' , email : 'me@billy.com' } } ,
105
+ { person : { name : 'Joan' , email : 'joan@example.net' } } ] ;
106
+ var expr = { person : { name : 'Jo' , email : '!example.com' } } ;
107
+
108
+ expect ( filter ( items , expr ) . length ) . toBe ( 1 ) ;
109
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 3 ] ] ) ;
110
+ } ) ;
111
+
112
+
95
113
it ( 'should match any properties for given "$" property' , function ( ) {
96
114
var items = [ { first : 'tom' , last : 'hevery' } ,
97
115
{ first : 'adam' , last : 'hevery' , alias : 'tom' , done : false } ,
@@ -103,24 +121,27 @@ describe('Filter: filter', function() {
103
121
expect ( filter ( items , { $ : 'hevery' } ) [ 0 ] ) . toEqual ( items [ 0 ] ) ;
104
122
} ) ;
105
123
124
+
106
125
it ( 'should support boolean properties' , function ( ) {
107
126
var items = [ { name : 'tom' , current : true } ,
108
- { name : 'demi' , current : false } ,
109
- { name : 'sofia' } ] ;
127
+ { name : 'demi' , current : false } ,
128
+ { name : 'sofia' } ] ;
110
129
111
130
expect ( filter ( items , { current :true } ) . length ) . toBe ( 1 ) ;
112
131
expect ( filter ( items , { current :true } ) [ 0 ] . name ) . toBe ( 'tom' ) ;
113
132
expect ( filter ( items , { current :false } ) . length ) . toBe ( 1 ) ;
114
133
expect ( filter ( items , { current :false } ) [ 0 ] . name ) . toBe ( 'demi' ) ;
115
134
} ) ;
116
135
136
+
117
137
it ( 'should support negation operator' , function ( ) {
118
138
var items = [ 'misko' , 'adam' ] ;
119
139
120
140
expect ( filter ( items , '!isk' ) . length ) . toBe ( 1 ) ;
121
141
expect ( filter ( items , '!isk' ) [ 0 ] ) . toEqual ( items [ 1 ] ) ;
122
142
} ) ;
123
143
144
+
124
145
describe ( 'should support comparator' , function ( ) {
125
146
126
147
it ( 'as equality when true' , function ( ) {
@@ -133,8 +154,8 @@ describe('Filter: filter', function() {
133
154
{ key : 'value1' , nonkey : 1 } ,
134
155
{ key : 'value2' , nonkey : 2 } ,
135
156
{ key : 'value12' , nonkey : 3 } ,
136
- { key : 'value1' , nonkey :4 } ,
137
- { key : 'Value1' , nonkey :5 }
157
+ { key : 'value1' , nonkey : 4 } ,
158
+ { key : 'Value1' , nonkey : 5 }
138
159
] ;
139
160
expr = { key : 'value1' } ;
140
161
expect ( filter ( items , expr , true ) ) . toEqual ( [ items [ 0 ] , items [ 3 ] ] ) ;
@@ -143,21 +164,22 @@ describe('Filter: filter', function() {
143
164
{ key : 1 , nonkey : 1 } ,
144
165
{ key : 2 , nonkey : 2 } ,
145
166
{ key : 12 , nonkey : 3 } ,
146
- { key : 1 , nonkey :4 }
167
+ { key : 1 , nonkey : 4 }
147
168
] ;
148
- expr = { key : 1 } ;
169
+ expr = { key : 1 } ;
149
170
expect ( filter ( items , expr , true ) ) . toEqual ( [ items [ 0 ] , items [ 3 ] ] ) ;
150
171
151
172
expr = 12 ;
152
173
expect ( filter ( items , expr , true ) ) . toEqual ( [ items [ 2 ] ] ) ;
153
174
} ) ;
154
175
176
+
155
177
it ( 'and use the function given to compare values' , function ( ) {
156
178
var items = [
157
179
{ key : 1 , nonkey : 1 } ,
158
180
{ key : 2 , nonkey : 2 } ,
159
181
{ key : 12 , nonkey : 3 } ,
160
- { key : 1 , nonkey :14 }
182
+ { key : 1 , nonkey : 14 }
161
183
] ;
162
184
var expr = { key : 10 } ;
163
185
var comparator = function ( obj , value ) {
@@ -167,10 +189,47 @@ describe('Filter: filter', function() {
167
189
168
190
expr = 10 ;
169
191
expect ( filter ( items , expr , comparator ) ) . toEqual ( [ items [ 2 ] , items [ 3 ] ] ) ;
170
-
171
192
} ) ;
172
193
173
194
174
- } ) ;
195
+ it ( 'and use it correctly with deep expression objects' , function ( ) {
196
+ var items = [
197
+ { id : 0 , details : { email : 'admin@example.com' , role : 'admin' } } ,
198
+ { id : 1 , details : { email : 'user1@example.com' , role : 'user' } } ,
199
+ { id : 2 , details : { email : 'user2@example.com' , role : 'user' } }
200
+ ] ;
201
+ var expr , comp ;
202
+
203
+ expr = { details : { email : 'user@example.com' , role : 'adm' } } ;
204
+ expect ( filter ( items , expr ) ) . toEqual ( [ ] ) ;
205
+
206
+ expr = { details : { email : 'admin@example.com' , role : 'adm' } } ;
207
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 0 ] ] ) ;
208
+
209
+ expr = { details : { email : 'admin@example.com' , role : 'adm' } } ;
210
+ expect ( filter ( items , expr , true ) ) . toEqual ( [ ] ) ;
211
+
212
+ expr = { details : { email : 'admin@example.com' , role : 'admin' } } ;
213
+ expect ( filter ( items , expr , true ) ) . toEqual ( [ items [ 0 ] ] ) ;
214
+
215
+ expr = { details : { email : 'user' , role : 'us' } } ;
216
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 1 ] , items [ 2 ] ] ) ;
175
217
218
+ expr = { id : 0 , details : { email : 'user' , role : 'us' } } ;
219
+ expect ( filter ( items , expr ) ) . toEqual ( [ ] ) ;
220
+
221
+ expr = { id : 1 , details : { email : 'user' , role : 'us' } } ;
222
+ expect ( filter ( items , expr ) ) . toEqual ( [ items [ 1 ] ] ) ;
223
+
224
+ comp = function ( actual , expected ) {
225
+ return isString ( actual ) && isString ( expected ) && ( actual . indexOf ( expected ) === 0 ) ;
226
+ } ;
227
+
228
+ expr = { details : { email : 'admin@example.com' , role : 'admn' } } ;
229
+ expect ( filter ( items , expr , comp ) ) . toEqual ( [ ] ) ;
230
+
231
+ expr = { details : { email : 'admin@example.com' , role : 'adm' } } ;
232
+ expect ( filter ( items , expr , comp ) ) . toEqual ( [ items [ 0 ] ] ) ;
233
+ } ) ;
234
+ } ) ;
176
235
} ) ;
0 commit comments