UNPKG

lux-framework

Version:

Build scalable, Node.js-powered REST APIs with almost no code.

161 lines (122 loc) 3.68 kB
// @flow import { expect } from 'chai'; import { it, describe, before, beforeEach } from 'mocha'; import { FreezeableMap, FreezeableSet } from '../index'; describe('module "freezeable"', () => { describe('class FreezeableMap', () => { describe('#constructor()', () => { let subject; before(() => { subject = new FreezeableMap([ ['a', 1], ['b', 2], ['c', 3] ]); }); it('returns a mutable `Map` interface', () => { expect(subject.size).to.equal(3); subject.clear(); expect(subject.size).to.equal(0); subject.set('a', 1).set('b', 2).set('c', 3); expect(subject.size).to.equal(3); subject.set('d', 4); expect(subject.size).to.equal(4); subject.delete('d'); expect(subject.size).to.equal(3); }); }); describe('#freeze()', () => { let subject; beforeEach(() => { const d = { a: 1, b: 2, c: 3 }; subject = new FreezeableMap([ ['a', 1], ['b', 2], ['c', 3], ['d', d] ]); }); it('returns `this`', () => { expect(subject.freeze()).to.equal(subject); }); it('is immutable after #freeze is called', () => { subject.freeze(); subject.clear(); expect(subject.size).to.equal(4); subject.set('a', 1).set('b', 2).set('c', 3); expect(subject.size).to.equal(4); subject.set('d', 4); expect(subject.size).to.equal(4); subject.delete('d'); expect(subject.size).to.equal(4); expect(Object.isFrozen(subject.get('d'))).to.be.false; }); it('can recursively freeze members when `deep = true`', () => { subject.freeze(true); expect(Object.isFrozen(subject.get('d'))).to.be.true; }); }); }); describe('class FreezeableSet', () => { describe('#constructor()', () => { let subject; before(() => { subject = new FreezeableSet([1, 2, 3]); }); it('returns a mutable `Set` interface', () => { expect(subject.size).to.equal(3); subject.clear(); expect(subject.size).to.equal(0); subject.add(1).add(2).add(3); expect(subject.size).to.equal(3); subject.add(4); expect(subject.size).to.equal(4); subject.delete(4); expect(subject.size).to.equal(3); }); }); describe('#freeze()', () => { let subject; const obj = { a: 1, b: 2, c: 3 }; beforeEach(() => { subject = new FreezeableSet([1, 2, 3, obj]); }); it('returns `this`', () => { expect(subject.freeze()).to.equal(subject); }); it('is immutable after #freeze is called', () => { subject.freeze(); expect(subject.size).to.equal(4); subject.clear(); expect(subject.size).to.equal(4); subject.add(1).add(2).add(3); expect(subject.size).to.equal(4); subject.add(4); expect(subject.size).to.equal(4); subject.delete(4); expect(subject.size).to.equal(4); subject.forEach(member => { if (typeof member === 'object') { expect(Object.isFrozen(member)).to.be.false; } }); }); it('can recursively freeze members when `deep = true`', () => { subject.freeze(true); subject.forEach(member => { if (typeof member === 'object') { expect(Object.isFrozen(member)).to.be.true; } }); }); }); }); });