@@ -28,6 +28,7 @@ @interface FirebaseIndexArrayTest : XCTestCase
28
28
@property (nonatomic ) FUITestObservable *index;
29
29
@property (nonatomic ) FUITestObservable *data;
30
30
@property (nonatomic ) FirebaseIndexArray *array;
31
+ @property (nonatomic ) FUIFirebaseIndexArrayTestDelegate *arrayDelegate;
31
32
32
33
@property (nonatomic ) NSMutableDictionary *dict;
33
34
@end
@@ -60,13 +61,16 @@ - (void)setUp {
60
61
self.data = [[FUITestObservable alloc ] initWithDictionary: database ()[@" data" ]];
61
62
self.array = [[FirebaseIndexArray alloc ] initWithIndex: self .index
62
63
data: self .data];
64
+ self.arrayDelegate = [[FUIFirebaseIndexArrayTestDelegate alloc ] init ];
65
+ self.array .delegate = self.arrayDelegate ;
63
66
self.dict = [database () mutableCopy ];
64
67
}
65
68
66
69
- (void )tearDown {
67
70
[super tearDown ];
68
71
[self .array invalidate ];
69
72
self.array = nil ;
73
+ self.arrayDelegate = nil ;
70
74
}
71
75
72
76
- (void )testItHasContents {
@@ -86,10 +90,25 @@ - (void)testItUpdatesOnInsertion {
86
90
NSArray *items = self.array .items ;
87
91
XCTAssert (items.count == 3 , @" expected %i keys, got %li " , 3 , items.count );
88
92
93
+ // test delegate
94
+ __block BOOL delegateWasCalled = NO ;
95
+ __block BOOL expectedParametersWereCorrect = NO ;
96
+
97
+ self.arrayDelegate .didAddQuery = ^(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger index) {
98
+ delegateWasCalled = YES ;
99
+ expectedParametersWereCorrect = (
100
+ array == self.array &&
101
+ index == 3
102
+ );
103
+ };
104
+
89
105
// insert item
90
106
[self .data addObject: @{ @" data" : @" 4" } forKey: @" 4" ];
91
107
[self .index addObject: @(YES ) forKey: @" 4" ];
92
108
109
+ XCTAssert (delegateWasCalled, @" expected insertion to call method on delegate" );
110
+ XCTAssert (expectedParametersWereCorrect, @" expected insertion to call delegate method with correct params" );
111
+
93
112
items = self.array .items ;
94
113
95
114
NSArray *expected = @[
@@ -107,10 +126,25 @@ - (void)testItUpdatesOnDeletion {
107
126
NSArray *items = self.array .items ;
108
127
XCTAssert (items.count == 3 , @" expected %i keys, got %li " , 3 , items.count );
109
128
129
+ // test delegate
130
+ __block BOOL delegateWasCalled = NO ;
131
+ __block BOOL expectedParametersWereCorrect = NO ;
132
+
133
+ self.arrayDelegate .didRemoveQuery = ^(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger index) {
134
+ delegateWasCalled = YES ;
135
+ expectedParametersWereCorrect = (
136
+ array == self.array &&
137
+ index == 1
138
+ );
139
+ };
140
+
110
141
// delete item
111
142
[self .data removeObjectForKey: @" 2" ];
112
143
[self .index removeObjectForKey: @" 2" ];
113
144
145
+ XCTAssert (delegateWasCalled, @" expected deletion to call method on delegate" );
146
+ XCTAssert (expectedParametersWereCorrect, @" expected deletion to call delegate method with correct params" );
147
+
114
148
items = self.array .items ;
115
149
116
150
NSArray *expected = @[
@@ -121,15 +155,70 @@ - (void)testItUpdatesOnDeletion {
121
155
XCTAssertEqualObjects (items, expected, @" expected contents to equal %@ " , expected);
122
156
}
123
157
158
+ - (void )testItCanDeleteEdgeCases {
159
+ // check expected number of items
160
+ NSArray *items = self.array .items ;
161
+ XCTAssert (items.count == 3 , @" expected %i keys, got %li " , 3 , items.count );
162
+
163
+ // delete first item
164
+ [self .data removeObjectForKey: @" 1" ];
165
+ [self .index removeObjectForKey: @" 1" ];
166
+
167
+ items = self.array .items ;
168
+
169
+ NSArray *expected = @[
170
+ [FUIFakeSnapshot snapWithKey: @" data" value: @" 2" ],
171
+ [FUIFakeSnapshot snapWithKey: @" data" value: @" 3" ],
172
+ ];
173
+
174
+ XCTAssertEqualObjects (items, expected, @" expected contents to equal %@ " , expected);
175
+
176
+ // delete last item
177
+ [self .data removeObjectForKey: @" 3" ];
178
+ [self .index removeObjectForKey: @" 3" ];
179
+
180
+ items = self.array .items ;
181
+
182
+ expected = @[
183
+ [FUIFakeSnapshot snapWithKey: @" data" value: @" 2" ],
184
+ ];
185
+
186
+ XCTAssertEqualObjects (items, expected, @" expected contents to equal %@ " , expected);
187
+
188
+ // delete single item
189
+ [self .index removeObjectForKey: @" 2" ];
190
+
191
+ items = self.array .items ;
192
+
193
+ expected = @[];
194
+
195
+ XCTAssertEqualObjects (items, expected, @" expected contents to equal %@ " , expected);
196
+ }
197
+
124
198
- (void )testItUpdatesOnChange {
125
199
// check expected number of items
126
200
NSArray *items = self.array .items ;
127
201
XCTAssert (items.count == 3 , @" expected %i keys, got %li " , 3 , items.count );
128
202
203
+ // test delegate
204
+ __block BOOL delegateWasCalled = NO ;
205
+ __block BOOL expectedParametersWereCorrect = NO ;
206
+
207
+ self.arrayDelegate .didChangeQuery = ^(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger index) {
208
+ delegateWasCalled = YES ;
209
+ expectedParametersWereCorrect = (
210
+ array == self.array &&
211
+ index == 1
212
+ );
213
+ };
214
+
129
215
// change item
130
216
[self .data changeObject: @{ @" data" : @" changed" } forKey: @" 2" ];
131
217
[self .index changeObject: @(YES ) forKey: @" 2" ];
132
218
219
+ XCTAssert (delegateWasCalled, @" expected change to call method on delegate" );
220
+ XCTAssert (expectedParametersWereCorrect, @" expected change to call delegate method with correct params" );
221
+
133
222
items = self.array .items ;
134
223
135
224
NSArray *expected = @[
@@ -146,10 +235,29 @@ - (void)testItUpdatesOnMove {
146
235
NSArray *items = self.array .items ;
147
236
XCTAssert (items.count == 3 , @" expected %i keys, got %li " , 3 , items.count );
148
237
238
+ // test delegate
239
+ __block BOOL delegateWasCalled = NO ;
240
+ __block BOOL expectedParametersWereCorrect = NO ;
241
+
242
+ self.arrayDelegate .didMoveQuery = ^(FirebaseIndexArray *array,
243
+ FIRDatabaseReference *query,
244
+ NSUInteger from,
245
+ NSUInteger to) {
246
+ delegateWasCalled = YES ;
247
+ expectedParametersWereCorrect = (
248
+ array == self.array &&
249
+ from == 0 &&
250
+ to == 2
251
+ );
252
+ };
253
+
149
254
// move item to back
150
255
[self .data moveObjectFromIndex: 0 toIndex: 2 ];
151
256
[self .index moveObjectFromIndex: 0 toIndex: 2 ];
152
257
258
+ XCTAssert (delegateWasCalled, @" expected move to call method on delegate" );
259
+ XCTAssert (expectedParametersWereCorrect, @" expected move to call delegate method with correct params" );
260
+
153
261
items = self.array .items ;
154
262
155
263
NSArray *expected = @[
0 commit comments