Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / chain-able / test / ChainedMap.js
Size: Mime:
"use strict";

const ChainedMap = require("../src/ChainedMap");

const clean = require("../src/deps/reduce/clean");

test('is Chainable', () => {
  const parent = {
    parent: true
  };
  const map = new ChainedMap(parent);
  expect(map.end()).toBe(parent);
});
test('creates a backing Map', () => {
  const map = new ChainedMap();
  expect(map.store instanceof Map).toBe(true);
});
test('set', () => {
  const map = new ChainedMap();
  expect(map.set('a', 'alpha')).toBe(map);
  expect(map.store.get('a')).toBe('alpha');
});
test('get', () => {
  const map = new ChainedMap();
  expect(map.set('a', 'alpha')).toBe(map);
  expect(map.get('a')).toBe('alpha');
});

function getMapToClear() {
  const map = new ChainedMap().set('a', 'alpha').set('b', 'beta').set('c', 'gamma');
  map.map = new ChainedMap(map).set('clearme', 1);
  return map;
}

test('.clear(false)', () => {
  const map = getMapToClear();
  expect(map.store.size).toBe(3);
  expect(map.clear(false)).toBe(map);
  expect(map.store.size).toBe(0);
  expect(map.map.length).toBe(1);
});
test('clear', () => {
  const map = getMapToClear();
  expect(map.length).toBe(3);
  expect(map.store.size).toBe(3);
  expect(map.clear()).toBe(map);
  expect(map.store.size).toBe(0);
});
test('clean', () => {
  const map = new ChainedMap();
  map.set('emptyArr', []);
  map.set('arr', [1]);
  map.set('nill', null);
  map.set('emptyObj', {});
  map.set('obj', {
    keys: true
  });
  expect(clean(map.entries())).toEqual({
    arr: [1],
    obj: {
      keys: true
    }
  });
});
test('clear - with sub-chainable', () => {
  const map = new ChainedMap();
  map.map = new ChainedMap(map);
  map.map.set('clearme', 1);
  map.set('a', 'alpha');
  map.set('b', 'beta');
  map.set('c', 'gamma');
  expect(map.store.size).toBe(3);
  expect(map.clear()).toBe(map);
  expect(map.store.size).toBe(0);
  expect(map.map.store.size).toBe(0);
});
test('delete', () => {
  const map = new ChainedMap();
  map.set('a', 'alpha');
  map.set('b', 'beta');
  map.set('c', 'gamma');
  expect(map.delete('b')).toBe(map);
  expect(map.store.size).toBe(2);
  expect(map.store.has('b')).toBe(false);
});
test('has', () => {
  const map = new ChainedMap();
  map.set('a', 'alpha');
  map.set('b', 'beta');
  map.set('c', 'gamma');
  expect(map.has('b')).toBe(true);
  expect(map.has('d')).toBe(false);
  expect(map.has('b')).toBe(map.store.has('b'));
});
test('values', () => {
  const map = new ChainedMap();
  map.set('a', 'alpha');
  map.set('b', 'beta');
  map.set('c', 'gamma');
  expect(map.values()).toEqual(['alpha', 'beta', 'gamma']);
});
test('entries with values', () => {
  const map = new ChainedMap();
  map.set('a', 'alpha');
  map.set('b', 'beta');
  map.set('c', 'gamma');
  expect(map.entries()).toEqual({
    a: 'alpha',
    b: 'beta',
    c: 'gamma'
  });
});
test('entries with no values', () => {
  const map = new ChainedMap();
  expect(map.entries()).toEqual({});
});
test('merge with no values', () => {
  const map = new ChainedMap();
  const obj = {
    a: 'alpha',
    b: 'beta',
    c: 'gamma'
  };
  expect(map.merge(obj)).toBe(map);
  expect(map.entries()).toEqual(obj);
});
test('merge with existing values', () => {
  const map = new ChainedMap();
  const obj = {
    a: 'alpha',
    b: 'beta',
    c: 'gamma'
  };
  map.set('d', 'delta');
  expect(map.merge(obj)).toBe(map);
  expect(map.entries()).toEqual({
    a: 'alpha',
    b: 'beta',
    c: 'gamma',
    d: 'delta'
  });
});
test('merge with overriding values', () => {
  const map = new ChainedMap();
  const obj = {
    a: 'alpha',
    b: 'beta',
    c: 'gamma'
  };
  map.set('b', 'delta');
  expect(map.merge(obj)).toBe(map);
  expect(map.entries()).toEqual({
    a: 'alpha',
    b: 'beta',
    c: 'gamma'
  });
});
test('when(has)', () => {
  expect.assertions(6);
  const map = new ChainedMap();
  map.set('truth', true).set('lies', false);

  const right = instance => {
    expect(instance).toBe(map);
    instance.set('alpha', 'a');
  };

  const left = instance => {
    instance.set('beta', 'b');
  };

  expect(map.when('truth', right, left)).toBe(map);
  expect(map.has('alpha')).toBe(true);
  expect(map.has('beta')).toBe(false);
  expect(map.when('lies', right, left)).toBe(map);
  expect(map.has('beta')).toBe(false);
});
test('when true', () => {
  const map = new ChainedMap();

  const right = instance => {
    expect(instance).toBe(map);
    instance.set('alpha', 'a');
  };

  const left = instance => {
    instance.set('beta', 'b');
  };

  expect(map.when(true, right, left)).toBe(map);
  expect(map.has('alpha')).toBe(true);
  expect(map.has('beta')).toBe(false);
});
test('when false', () => {
  const map = new ChainedMap();

  const right = instance => {
    instance.set('alpha', 'a');
  };

  const left = instance => {
    expect(instance).toBe(map);
    instance.set('beta', 'b');
  };

  expect(map.when(false, right, left)).toBe(map);
  expect(map.has('alpha')).toBe(false);
  expect(map.has('beta')).toBe(true);
});