jstd-web/node_modules/object-refs/test/spec/collectionSpec.js

184 lines
2.7 KiB
JavaScript

'use strict';
var expect = require('chai').expect;
var Refs = require('../../');
describe('collection api', function() {
var refs = new Refs({ name: 'foos', collection: true }, { name: 'bar' });
describe('#contains', function() {
it('should not contain', function() {
// given
var a = { foos: [] };
// when
refs.bind(a, 'foos');
// then
expect(a.foos.contains({})).to.equal(false);
});
it('should contain', function() {
// given
var b = {}, a = { foos: [ b ] };
// when
refs.bind(a, 'foos');
// then
expect(a.foos.contains(b)).to.equal(true);
});
});
describe('#add', function() {
it('should add', function() {
// given
var a = {};
var b = { id: 'B' };
var c = { id: 'C' };
refs.bind(a, 'foos');
// when
a.foos.add(b);
a.foos.add(c);
// then
expect(a.foos).to.eql([ b, c ]);
});
it('should add at idx', function() {
// given
var a = {};
var b = { id: 'B' };
var c = { id: 'C' };
var d = { id: 'D' };
refs.bind(a, 'foos');
a.foos.add(b);
a.foos.add(c);
// when
a.foos.add(d, 1);
// then
expect(a.foos).to.eql([ b, d, c ]);
});
it('should move to front with idx', function() {
// given
var a = {};
var b = { id: 'B' };
var c = { id: 'C' };
var d = { id: 'D' };
refs.bind(a, 'foos');
a.foos.add(b);
a.foos.add(c);
a.foos.add(d);
// when
a.foos.add(c, 0);
// then
expect(a.foos).to.eql([ c, b, d ]);
});
it('should move to back with idx', function() {
// given
var a = {};
var b = { id: 'B' };
var c = { id: 'C' };
var d = { id: 'D' };
refs.bind(a, 'foos');
a.foos.add(b);
a.foos.add(c);
a.foos.add(d);
// when
a.foos.add(b, 2);
// then
expect(a.foos).to.eql([ c, d, b ]);
});
it('should inverse add', function() {
// given
var a = {};
var b = {};
refs.bind(a, 'foos');
// when
a.foos.add(b);
// then
expect(b.bar).to.equal(a);
});
it('should inverse add', function() {
// given
var a = {};
var b = {};
refs.bind(a, 'foos');
// when
a.foos.add(b);
// then
expect(b.bar).to.equal(a);
});
});
describe('#remove', function() {
it('should inverse remove', function() {
// given
var a = {};
var b = {};
refs.bind(a, 'foos');
// when
a.foos.add(b);
a.foos.remove(b);
// then
expect(a.foos).to.eql([ ]);
expect(b.bar).not.to.exist;
});
});
});