Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit 456af84

Browse files
committed
Update to MockFirebase 0.7
MF 0.6 replicates Angular behavior with respect to flushing its deferred queue When ref#flush is called with no deferred events an exception is throw MF 0.7 removes default data. I set up its old defaults as a fixture here.
1 parent 65d4894 commit 456af84

File tree

7 files changed

+136
-39
lines changed

7 files changed

+136
-39
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,6 @@
3636
"devDependencies": {
3737
"lodash": "~2.4.1",
3838
"angular-mocks": "~1.2.18",
39-
"mockfirebase": "0.5.0"
39+
"mockfirebase": "~0.7.0"
4040
}
4141
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"karma-chrome-launcher": "^0.1.4",
5353
"karma-coverage": "^0.2.4",
5454
"karma-failed-reporter": "0.0.2",
55+
"karma-html2js-preprocessor": "~0.1.0",
5556
"karma-jasmine": "~0.2.0",
5657
"karma-phantomjs-launcher": "~0.1.0",
5758
"karma-sauce-launcher": "~0.2.9",

tests/automatic_karma.conf.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ module.exports = function(config) {
1010
singleRun: true,
1111

1212
preprocessors: {
13-
"../src/*.js": "coverage"
13+
"../src/*.js": "coverage",
14+
"./fixtures/**/*.json": "html2js"
1415
},
1516

1617
coverageReporter: {
@@ -34,6 +35,7 @@ module.exports = function(config) {
3435
'../src/module.js',
3536
'../src/**/*.js',
3637
'mocks/**/*.js',
38+
"fixtures/**/*.json",
3739
'unit/**/*.spec.js'
3840
]
3941
});

tests/fixtures/data.json

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
{
2+
"data": {
3+
"a": {
4+
"aString": "alpha",
5+
"aNumber": 1,
6+
"aBoolean": false
7+
},
8+
"b": {
9+
"aString": "bravo",
10+
"aNumber": 2,
11+
"aBoolean": true
12+
},
13+
"c": {
14+
"aString": "charlie",
15+
"aNumber": 3,
16+
"aBoolean": true
17+
},
18+
"d": {
19+
"aString": "delta",
20+
"aNumber": 4,
21+
"aBoolean": true
22+
},
23+
"e": {
24+
"aString": "echo",
25+
"aNumber": 5
26+
}
27+
},
28+
"index": {
29+
"b": true,
30+
"c": 1,
31+
"e": false,
32+
"z": true
33+
},
34+
"ordered": {
35+
"null_a": {
36+
"aNumber": 0,
37+
"aLetter": "a"
38+
},
39+
"null_b": {
40+
"aNumber": 0,
41+
"aLetter": "b"
42+
},
43+
"null_c": {
44+
"aNumber": 0,
45+
"aLetter": "c"
46+
},
47+
"num_1_a": {
48+
".priority": 1,
49+
"aNumber": 1
50+
},
51+
"num_1_b": {
52+
".priority": 1,
53+
"aNumber": 1
54+
},
55+
"num_2": {
56+
".priority": 2,
57+
"aNumber": 2
58+
},
59+
"num_3": {
60+
".priority": 3,
61+
"aNumber": 3
62+
},
63+
"char_a_1": {
64+
".priority": "a",
65+
"aNumber": 1,
66+
"aLetter": "a"
67+
},
68+
"char_a_2": {
69+
".priority": "a",
70+
"aNumber": 2,
71+
"aLetter": "a"
72+
},
73+
"char_b": {
74+
".priority": "b",
75+
"aLetter": "b"
76+
},
77+
"char_c": {
78+
".priority": "c",
79+
"aLetter": "c"
80+
}
81+
}
82+
}

tests/mocks/mocks.firebase.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11

22
angular.module('mock.firebase', [])
33
.run(function($window) {
4-
$window.mockfirebase.override();
5-
$window.Firebase = $window.MockFirebase;
6-
})
7-
.factory('Firebase', function($window) {
8-
return $window.MockFirebase;
9-
});
4+
$window.MockFirebase.override();
5+
});

tests/unit/FirebaseArray.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ describe('$FirebaseArray', function () {
8282
var spy = jasmine.createSpy();
8383
arr.$add({foo: 'bar'}).then(spy);
8484
flushAll();
85-
var lastId = $fb.$ref().getLastAutoId();
85+
var lastId = $fb.$ref()._lastAutoId;
8686
expect(spy).toHaveBeenCalledWith($fb.$ref().child(lastId));
8787
});
8888

tests/unit/firebase.spec.js

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ describe('$firebase', function () {
33

44
var $firebase, $timeout, $rootScope, $utils;
55

6+
var defaults = JSON.parse(window.__html__['fixtures/data.json']);
7+
68
beforeEach(function() {
79
module('firebase');
810
module('mock.firebase');
@@ -29,7 +31,10 @@ describe('$firebase', function () {
2931
describe('<constructor>', function() {
3032
var $fb;
3133
beforeEach(function() {
32-
$fb = $firebase(new Firebase('Mock://').child('data'));
34+
var ref = new Firebase('Mock://');
35+
ref.set(defaults);
36+
ref.flush();
37+
$fb = $firebase(ref.child('data'));
3338
});
3439

3540
it('should accept a Firebase ref', function() {
@@ -108,7 +113,7 @@ describe('$firebase', function () {
108113
var blackSpy = jasmine.createSpy('reject');
109114
$fb.$push({foo: 'bar'}).then(whiteSpy, blackSpy);
110115
flushAll();
111-
var newId = $fb.$ref().getLastAutoId();
116+
var newId = $fb.$ref()._lastAutoId;
112117
expect(whiteSpy).toHaveBeenCalled();
113118
expect(blackSpy).not.toHaveBeenCalled();
114119
var ref = whiteSpy.calls.argsFor(0)[0];
@@ -138,10 +143,8 @@ describe('$firebase', function () {
138143
var ref = new Firebase('Mock://').child('ordered').limit(5);
139144
var $fb = $firebase(ref);
140145
spyOn(ref.ref(), 'push').and.callThrough();
141-
flushAll();
142146
expect(ref.ref().push).not.toHaveBeenCalled();
143147
$fb.$push({foo: 'querytest'});
144-
flushAll();
145148
expect(ref.ref().push).toHaveBeenCalled();
146149
});
147150
});
@@ -203,7 +206,6 @@ describe('$firebase', function () {
203206
var ref = new Firebase('Mock://').child('ordered').limit(1);
204207
var $fb = $firebase(ref);
205208
spyOn(ref.ref(), 'update');
206-
ref.flush();
207209
var expKeys = ref.slice().keys;
208210
$fb.$set({hello: 'world'});
209211
ref.flush();
@@ -216,6 +218,7 @@ describe('$firebase', function () {
216218
var $fb, flushAll;
217219
beforeEach(function() {
218220
$fb = $firebase(new Firebase('Mock://').child('data'));
221+
$fb.$ref().set(defaults.data);
219222
flushAll = flush.bind(null, $fb.$ref());
220223
});
221224

@@ -239,8 +242,7 @@ describe('$firebase', function () {
239242
var ref = new Firebase('Mock://').child('ordered').limit(2);
240243
var $fb = $firebase(ref);
241244
$fb.$remove().then(spy);
242-
flushAll(ref);
243-
flushAll(ref);
245+
flush(ref);
244246
expect(spy).toHaveBeenCalledWith(ref);
245247
});
246248

@@ -285,48 +287,59 @@ describe('$firebase', function () {
285287
});
286288

287289
it('should only remove keys in query if used on a query', function() {
288-
var ref = new Firebase('Mock://').child('ordered').limit(2);
289-
var keys = ref.slice().keys;
290-
var origKeys = ref.ref().getKeys();
290+
var ref = new Firebase('Mock://').child('ordered')
291+
var query = ref.limit(2);
292+
ref.set(defaults.ordered);
293+
ref.flush();
294+
var keys = query.slice().keys;
295+
var origKeys = query.ref().getKeys();
291296
expect(keys.length).toBeGreaterThan(0);
292297
expect(origKeys.length).toBeGreaterThan(keys.length);
293-
var $fb = $firebase(ref);
294-
flushAll(ref);
298+
var $fb = $firebase(query);
295299
origKeys.forEach(function (key) {
296-
spyOn(ref.ref().child(key), 'remove');
300+
spyOn(query.ref().child(key), 'remove');
297301
});
298302
$fb.$remove();
299-
flushAll(ref);
303+
flushAll(query);
300304
keys.forEach(function(key) {
301-
expect(ref.ref().child(key).remove).toHaveBeenCalled();
305+
expect(query.ref().child(key).remove).toHaveBeenCalled();
302306
});
303307
origKeys.forEach(function(key) {
304308
if( keys.indexOf(key) === -1 ) {
305-
expect(ref.ref().child(key).remove).not.toHaveBeenCalled();
309+
expect(query.ref().child(key).remove).not.toHaveBeenCalled();
306310
}
307311
});
308312
});
309313

310314
it('should wait to resolve promise until data is actually deleted',function(){
311-
var ref = new Firebase('Mock://').child('ordered').limit(2);
312-
var $fb = $firebase(ref);
315+
var ref = new Firebase('Mock://').child('ordered');
316+
ref.set(defaults.ordered);
317+
ref.flush();
318+
var query = ref.limit(2);
319+
var $fb = $firebase(query);
313320
var resolved = false;
314321
$fb.$remove().then(function(){
315322
resolved = true;
316323
});
317-
try {$timeout.flush();} catch(e){} //this may actually throw an error
318324
expect(resolved).toBe(false);
319-
flushAll(ref);
320-
flushAll(ref);
325+
// flush once for on('value')
326+
ref.flush();
327+
// flush again to fire the ref#remove calls
328+
ref.flush();
329+
// then flush the promise
330+
$timeout.flush();
321331
expect(resolved).toBe(true);
322332
});
323333
});
324334

325335
describe('$update', function() {
326336
var $fb, flushAll;
327337
beforeEach(function() {
328-
$fb = $firebase(new Firebase('Mock://').child('data'));
329-
flushAll = flush.bind(null, $fb.$ref());
338+
var ref = new Firebase('Mock://').child('data');
339+
ref.set(defaults.data);
340+
ref.flush();
341+
$fb = $firebase(ref);
342+
flushAll = flush.bind(null, ref);
330343
});
331344

332345
it('should return a promise', function() {
@@ -353,7 +366,6 @@ describe('$firebase', function () {
353366
});
354367

355368
it('should not destroy untouched keys', function() {
356-
flushAll();
357369
var data = $fb.$ref().getData();
358370
data.a = 'foo';
359371
delete data.b;
@@ -373,7 +385,6 @@ describe('$firebase', function () {
373385

374386
it('should work on a query object', function() {
375387
var $fb2 = $firebase($fb.$ref().limit(1));
376-
flushAll();
377388
$fb2.$update({foo: 'bar'});
378389
flushAll();
379390
expect($fb2.$ref().ref().getData().foo).toBe('bar');
@@ -445,7 +456,10 @@ describe('$firebase', function () {
445456

446457
beforeEach(function() {
447458
$ArrayFactory = stubArrayFactory();
448-
$fb = $firebase(new Firebase('Mock://').child('data'), {arrayFactory: $ArrayFactory});
459+
var ref = new Firebase('Mock://').child('data');
460+
ref.set(defaults.data);
461+
ref.flush();
462+
$fb = $firebase(ref, {arrayFactory: $ArrayFactory});
449463
});
450464

451465
it('should call $FirebaseArray constructor with correct args', function() {
@@ -580,10 +594,9 @@ describe('$firebase', function () {
580594

581595
it('should call $$error if an error event occurs', function() {
582596
var arr = $fb.$asArray();
583-
// flush all the existing data through
584597
flushAll();
585598
$fb.$ref().forceCancel('test_failure');
586-
flushAll();
599+
$timeout.flush();
587600
expect(arr.$$error).toHaveBeenCalledWith('test_failure');
588601
});
589602

@@ -642,7 +655,10 @@ describe('$firebase', function () {
642655

643656
beforeEach(function() {
644657
var Factory = stubObjectFactory();
645-
$fb = $firebase(new Firebase('Mock://').child('data'), {objectFactory: Factory});
658+
var ref = new Firebase('Mock://').child('data');
659+
ref.set(defaults.data);
660+
ref.flush();
661+
$fb = $firebase(ref, {objectFactory: Factory});
646662
$fb.$Factory = Factory;
647663
});
648664

@@ -689,7 +705,7 @@ describe('$firebase', function () {
689705
flushAll();
690706
expect(obj.$$error).not.toHaveBeenCalled();
691707
ref.forceCancel('test_cancel');
692-
flushAll();
708+
$timeout.flush();
693709
expect(obj.$$error).toHaveBeenCalledWith('test_cancel');
694710
});
695711

0 commit comments

Comments
 (0)