Skip to content

Commit 5ac6605

Browse files
committed
complete tests for array bindings
1 parent 4460a9d commit 5ac6605

File tree

1 file changed

+250
-0
lines changed

1 file changed

+250
-0
lines changed

tests/vuefire.spec.js

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,254 @@ describe('VueFire', function () {
210210
})
211211
})
212212
})
213+
214+
it('binds multiple Firebase references to state variables at the same time', function (done) {
215+
var vm = new Vue({
216+
firebase: {
217+
bindVar0: firebaseRef.child('items0'),
218+
bindVar1: firebaseRef.child('items1')
219+
},
220+
template:
221+
'<div>' +
222+
'<div v-for="item in bindVar0">{{ item[".key"] }} {{ item.index }} </div>' +
223+
'<div v-for="item in bindVar1">{{ item[".key"] }} {{ item[".value"] }} </div>' +
224+
'</div>'
225+
}).$mount()
226+
firebaseRef.set({
227+
items0: {
228+
first: { index: 0 },
229+
second: { index: 1 },
230+
third: { index: 2 }
231+
},
232+
items1: ['first', 'second', 'third']
233+
}, function () {
234+
expect(vm.bindVar0).to.deep.equal([
235+
{ '.key': 'first', index: 0 },
236+
{ '.key': 'second', index: 1 },
237+
{ '.key': 'third', index: 2 }
238+
])
239+
240+
expect(vm.bindVar1).to.deep.equal([
241+
{ '.key': '0', '.value': 'first' },
242+
{ '.key': '1', '.value': 'second' },
243+
{ '.key': '2', '.value': 'third' }
244+
])
245+
Vue.nextTick(function () {
246+
expect(vm.$el.textContent).to.contain('first 0 second 1 third 2')
247+
expect(vm.$el.textContent).to.contain('0 first 1 second 2 third')
248+
done()
249+
})
250+
})
251+
})
252+
253+
it('updates an array record when its value changes', function (done) {
254+
var vm = new Vue({
255+
firebase: {
256+
items: firebaseRef
257+
},
258+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item[".value"] || item.foo }} </div></div>'
259+
}).$mount()
260+
firebaseRef.set({ a: 1, b: 2, c: 3 }, function () {
261+
firebaseRef.child('b').set({ foo: 'bar' }, function () {
262+
expect(vm.items).to.deep.equal([
263+
{ '.key': 'a', '.value': 1 },
264+
{ '.key': 'b', foo: 'bar' },
265+
{ '.key': 'c', '.value': 3 }
266+
])
267+
Vue.nextTick(function () {
268+
expect(vm.$el.textContent).to.contain('a 1 b bar c 3')
269+
done()
270+
})
271+
})
272+
})
273+
})
274+
275+
it('removes an array record when it is deleted', function (done) {
276+
var vm = new Vue({
277+
firebase: {
278+
items: firebaseRef
279+
},
280+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item[".value"] }} </div></div>'
281+
}).$mount()
282+
firebaseRef.set({ a: 1, b: 2, c: 3 }, function () {
283+
firebaseRef.child('b').remove(function () {
284+
expect(vm.items).to.deep.equal([
285+
{ '.key': 'a', '.value': 1 },
286+
{ '.key': 'c', '.value': 3 }
287+
])
288+
Vue.nextTick(function () {
289+
expect(vm.$el.textContent).to.contain('a 1 c 3')
290+
done()
291+
})
292+
})
293+
})
294+
})
295+
296+
it('moves an array record when it\'s order changes (moved to start of array) [orderByValue()]', function (done) {
297+
var vm = new Vue({
298+
firebase: {
299+
items: firebaseRef.orderByValue()
300+
},
301+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item[".value"] }} </div></div>'
302+
}).$mount()
303+
firebaseRef.set({ a: 2, b: 3, c: 2 }, function () {
304+
firebaseRef.child('b').set(1, function () {
305+
expect(vm.items).to.deep.equal([
306+
{ '.key': 'b', '.value': 1 },
307+
{ '.key': 'a', '.value': 2 },
308+
{ '.key': 'c', '.value': 2 }
309+
])
310+
Vue.nextTick(function () {
311+
expect(vm.$el.textContent).to.contain('b 1 a 2 c 2')
312+
done()
313+
})
314+
})
315+
})
316+
})
317+
318+
it('moves an array record when it\'s order changes (moved to middle of array) [orderByValue()]', function (done) {
319+
var vm = new Vue({
320+
firebase: {
321+
items: firebaseRef.orderByValue()
322+
},
323+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item[".value"] }} </div></div>'
324+
}).$mount()
325+
firebaseRef.set({ a: 2, b: 1, c: 4 }, function () {
326+
firebaseRef.child('b').set(3, function () {
327+
expect(vm.items).to.deep.equal([
328+
{ '.key': 'a', '.value': 2 },
329+
{ '.key': 'b', '.value': 3 },
330+
{ '.key': 'c', '.value': 4 }
331+
])
332+
Vue.nextTick(function () {
333+
expect(vm.$el.textContent).to.contain('a 2 b 3 c 4')
334+
done()
335+
})
336+
})
337+
})
338+
})
339+
340+
it('moves an array record when it\'s order changes (moved to end of array) [orderByValue()]', function (done) {
341+
var vm = new Vue({
342+
firebase: {
343+
items: firebaseRef.orderByValue()
344+
},
345+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item[".value"] }} </div></div>'
346+
}).$mount()
347+
firebaseRef.set({ a: 2, b: 1, c: 3 }, function () {
348+
firebaseRef.child('b').set(4, function () {
349+
expect(vm.items).to.deep.equal([
350+
{ '.key': 'a', '.value': 2 },
351+
{ '.key': 'c', '.value': 3 },
352+
{ '.key': 'b', '.value': 4 }
353+
])
354+
Vue.nextTick(function () {
355+
expect(vm.$el.textContent).to.contain('a 2 c 3 b 4')
356+
done()
357+
})
358+
})
359+
})
360+
})
361+
362+
it('moves an array record when it\'s order changes (moved to start of array) [orderByChild()]', function (done) {
363+
var vm = new Vue({
364+
firebase: {
365+
items: firebaseRef.orderByChild('value')
366+
},
367+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item.value }} </div></div>'
368+
}).$mount()
369+
firebaseRef.set({
370+
a: { value: 2 },
371+
b: { value: 3 },
372+
c: { value: 2 }
373+
}, function () {
374+
firebaseRef.child('b').set({ value: 1 }, function () {
375+
expect(vm.items).to.deep.equal([
376+
{ '.key': 'b', value: 1 },
377+
{ '.key': 'a', value: 2 },
378+
{ '.key': 'c', value: 2 }
379+
])
380+
Vue.nextTick(function () {
381+
expect(vm.$el.textContent).to.contain('b 1 a 2 c 2')
382+
done()
383+
})
384+
})
385+
})
386+
})
387+
388+
it('moves an array record when it\'s order changes (moved to middle of array) [orderByChild()]', function (done) {
389+
var vm = new Vue({
390+
firebase: {
391+
items: firebaseRef.orderByChild('value')
392+
},
393+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item.value }} </div></div>'
394+
}).$mount()
395+
firebaseRef.set({
396+
a: { value: 2 },
397+
b: { value: 1 },
398+
c: { value: 4 }
399+
}, function () {
400+
firebaseRef.child('b').set({ value: 3 }, function () {
401+
expect(vm.items).to.deep.equal([
402+
{ '.key': 'a', value: 2 },
403+
{ '.key': 'b', value: 3 },
404+
{ '.key': 'c', value: 4 }
405+
])
406+
Vue.nextTick(function () {
407+
expect(vm.$el.textContent).to.contain('a 2 b 3 c 4')
408+
done()
409+
})
410+
})
411+
})
412+
})
413+
414+
it('moves an array record when it\'s order changes (moved to end of array) [orderByChild()]', function (done) {
415+
var vm = new Vue({
416+
firebase: {
417+
items: firebaseRef.orderByChild('value')
418+
},
419+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item.value }} </div></div>'
420+
}).$mount()
421+
firebaseRef.set({
422+
a: { value: 2 },
423+
b: { value: 1 },
424+
c: { value: 3 }
425+
}, function () {
426+
firebaseRef.child('b').set({ value: 4 }, function () {
427+
expect(vm.items).to.deep.equal([
428+
{ '.key': 'a', value: 2 },
429+
{ '.key': 'c', value: 3 },
430+
{ '.key': 'b', value: 4 }
431+
])
432+
Vue.nextTick(function () {
433+
expect(vm.$el.textContent).to.contain('a 2 c 3 b 4')
434+
done()
435+
})
436+
})
437+
})
438+
})
439+
440+
it('works with orderByKey() queries', function (done) {
441+
var vm = new Vue({
442+
firebase: {
443+
items: firebaseRef.orderByKey()
444+
},
445+
template: '<div><div v-for="item in items">{{ item[".key"] }} {{ item[".value"] }} </div></div>'
446+
}).$mount()
447+
firebaseRef.set({ b: 2, c: 1, d: 3 }, function () {
448+
firebaseRef.update({ a: 4, d: 4, e: 0 }, function () {
449+
expect(vm.items).to.deep.equal([
450+
{ '.key': 'a', '.value': 4 },
451+
{ '.key': 'b', '.value': 2 },
452+
{ '.key': 'c', '.value': 1 },
453+
{ '.key': 'd', '.value': 4 },
454+
{ '.key': 'e', '.value': 0 }
455+
])
456+
Vue.nextTick(function () {
457+
expect(vm.$el.textContent).to.contain('a 4 b 2 c 1 d 4 e 0')
458+
done()
459+
})
460+
})
461+
})
462+
})
213463
})

0 commit comments

Comments
 (0)