Skip to content

Commit 7641603

Browse files
committed
add tests for index array delegate, edge cases
1 parent 8828e5b commit 7641603

File tree

3 files changed

+166
-0
lines changed

3 files changed

+166
-0
lines changed

FirebaseDatabaseUITests/FirebaseArrayTestUtils.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,14 @@ NS_ASSUME_NONNULL_BEGIN
9797
@property (nonatomic, copy) void (^didMoveObject)(FirebaseArray *array, id object, NSUInteger fromIndex, NSUInteger toIndex);
9898
@end
9999

100+
@interface FUIFirebaseIndexArrayTestDelegate : NSObject <FirebaseIndexArrayDelegate>
101+
@property (nonatomic, copy) void (^didLoad)(FirebaseIndexArray *array, FIRDatabaseReference *ref, FIRDataSnapshot *snap, NSUInteger index);
102+
@property (nonatomic, copy) void (^didFail)(FirebaseIndexArray *array, FIRDatabaseReference *ref, NSUInteger index, NSError *error);
103+
@property (nonatomic, copy) void (^queryCancelled)(FirebaseIndexArray *array, NSError *error);
104+
@property (nonatomic, copy) void (^didAddQuery)(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger index);
105+
@property (nonatomic, copy) void (^didChangeQuery)(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger index);
106+
@property (nonatomic, copy) void (^didRemoveQuery)(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger index);
107+
@property (nonatomic, copy) void (^didMoveQuery)(FirebaseIndexArray *array, FIRDatabaseReference *query, NSUInteger fromIndex, NSUInteger toIndex);
108+
@end
109+
100110
NS_ASSUME_NONNULL_END

FirebaseDatabaseUITests/FirebaseArrayTestUtils.m

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,3 +251,51 @@ - (void)array:(FirebaseArray *)array queryCancelledWithError:(NSError *)error {
251251
}
252252

253253
@end
254+
255+
@implementation FUIFirebaseIndexArrayTestDelegate
256+
257+
- (void)array:(FirebaseIndexArray *)array
258+
reference:(nonnull FIRDatabaseReference *)ref
259+
didLoadObject:(nonnull FIRDataSnapshot *)object
260+
atIndex:(NSUInteger)index {
261+
if (self.didLoad != NULL) {
262+
self.didLoad(array, ref, object, index);
263+
}
264+
}
265+
266+
- (void)array:(FirebaseIndexArray *)array reference:(nonnull FIRDatabaseReference *)ref
267+
atIndex:(NSUInteger)index didFailLoadWithError:(nonnull NSError *)error {
268+
if (self.didFail != NULL) {
269+
self.didFail(array, ref, index, error);
270+
}
271+
}
272+
273+
- (void)array:(FirebaseIndexArray *)array didAddReference:(nonnull FIRDatabaseReference *)ref
274+
atIndex:(NSUInteger)index {
275+
if (self.didAddQuery != NULL) {
276+
self.didAddQuery(array, ref, index);
277+
}
278+
}
279+
280+
- (void)array:(FirebaseIndexArray *)array didChangeReference:(nonnull FIRDatabaseReference *)ref
281+
atIndex:(NSUInteger)index {
282+
if (self.didChangeQuery != NULL) {
283+
self.didChangeQuery(array, ref, index);
284+
}
285+
}
286+
287+
- (void)array:(FirebaseIndexArray *)array didRemoveReference:(nonnull FIRDatabaseReference *)ref
288+
atIndex:(NSUInteger)index {
289+
if (self.didRemoveQuery != nil) {
290+
self.didRemoveQuery(array, ref, index);
291+
}
292+
}
293+
294+
- (void)array:(FirebaseIndexArray *)array didMoveReference:(nonnull FIRDatabaseReference *)ref
295+
fromIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex {
296+
if (self.didMoveQuery != NULL) {
297+
self.didMoveQuery(array, ref, fromIndex, toIndex);
298+
}
299+
}
300+
301+
@end

FirebaseDatabaseUITests/FirebaseIndexArrayTest.m

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ @interface FirebaseIndexArrayTest : XCTestCase
2828
@property (nonatomic) FUITestObservable *index;
2929
@property (nonatomic) FUITestObservable *data;
3030
@property (nonatomic) FirebaseIndexArray *array;
31+
@property (nonatomic) FUIFirebaseIndexArrayTestDelegate *arrayDelegate;
3132

3233
@property (nonatomic) NSMutableDictionary *dict;
3334
@end
@@ -60,13 +61,16 @@ - (void)setUp {
6061
self.data = [[FUITestObservable alloc] initWithDictionary:database()[@"data"]];
6162
self.array = [[FirebaseIndexArray alloc] initWithIndex:self.index
6263
data:self.data];
64+
self.arrayDelegate = [[FUIFirebaseIndexArrayTestDelegate alloc] init];
65+
self.array.delegate = self.arrayDelegate;
6366
self.dict = [database() mutableCopy];
6467
}
6568

6669
- (void)tearDown {
6770
[super tearDown];
6871
[self.array invalidate];
6972
self.array = nil;
73+
self.arrayDelegate = nil;
7074
}
7175

7276
- (void)testItHasContents {
@@ -86,10 +90,25 @@ - (void)testItUpdatesOnInsertion {
8690
NSArray *items = self.array.items;
8791
XCTAssert(items.count == 3, @"expected %i keys, got %li", 3, items.count);
8892

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+
89105
// insert item
90106
[self.data addObject:@{ @"data": @"4" } forKey:@"4"];
91107
[self.index addObject:@(YES) forKey:@"4"];
92108

109+
XCTAssert(delegateWasCalled, @"expected insertion to call method on delegate");
110+
XCTAssert(expectedParametersWereCorrect, @"expected insertion to call delegate method with correct params");
111+
93112
items = self.array.items;
94113

95114
NSArray *expected = @[
@@ -107,10 +126,25 @@ - (void)testItUpdatesOnDeletion {
107126
NSArray *items = self.array.items;
108127
XCTAssert(items.count == 3, @"expected %i keys, got %li", 3, items.count);
109128

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+
110141
// delete item
111142
[self.data removeObjectForKey:@"2"];
112143
[self.index removeObjectForKey:@"2"];
113144

145+
XCTAssert(delegateWasCalled, @"expected deletion to call method on delegate");
146+
XCTAssert(expectedParametersWereCorrect, @"expected deletion to call delegate method with correct params");
147+
114148
items = self.array.items;
115149

116150
NSArray *expected = @[
@@ -121,15 +155,70 @@ - (void)testItUpdatesOnDeletion {
121155
XCTAssertEqualObjects(items, expected, @"expected contents to equal %@", expected);
122156
}
123157

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+
124198
- (void)testItUpdatesOnChange {
125199
// check expected number of items
126200
NSArray *items = self.array.items;
127201
XCTAssert(items.count == 3, @"expected %i keys, got %li", 3, items.count);
128202

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+
129215
// change item
130216
[self.data changeObject:@{ @"data": @"changed" } forKey:@"2"];
131217
[self.index changeObject:@(YES) forKey:@"2"];
132218

219+
XCTAssert(delegateWasCalled, @"expected change to call method on delegate");
220+
XCTAssert(expectedParametersWereCorrect, @"expected change to call delegate method with correct params");
221+
133222
items = self.array.items;
134223

135224
NSArray *expected = @[
@@ -146,10 +235,29 @@ - (void)testItUpdatesOnMove {
146235
NSArray *items = self.array.items;
147236
XCTAssert(items.count == 3, @"expected %i keys, got %li", 3, items.count);
148237

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+
149254
// move item to back
150255
[self.data moveObjectFromIndex:0 toIndex:2];
151256
[self.index moveObjectFromIndex:0 toIndex:2];
152257

258+
XCTAssert(delegateWasCalled, @"expected move to call method on delegate");
259+
XCTAssert(expectedParametersWereCorrect, @"expected move to call delegate method with correct params");
260+
153261
items = self.array.items;
154262

155263
NSArray *expected = @[

0 commit comments

Comments
 (0)