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 / fp / evolve-transform.js
Size: Mime:
const evolve = require('../../src/deps/fp/evolve')
const add = require('../../src/deps/math/add')

const eq = (x, y, msg) => expect(x).toEqual(y)

describe('evolve', function() {
  it('creates a new object by evolving the `object` according to the `transformation` functions', function() {
    var transf   = {elapsed: add(1), remaining: add(-1)}
    var object   = {name: 'Tomato', elapsed: 100, remaining: 1400}
    var expected = {name: 'Tomato', elapsed: 101, remaining: 1399}
    eq(evolve(transf, object), expected)
  })

  it('does not invoke function if object does not contain the key', function() {
    var transf   = {n: add(1), m: add(1)}
    var object   = {m: 3}
    var expected = {m: 4}
    eq(evolve(transf, object), expected)
  })

  it('is not destructive', function() {
    var transf   = {elapsed: add(1), remaining: add(-1)}
    var object   = {name: 'Tomato', elapsed: 100, remaining: 1400}
    var expected = {name: 'Tomato', elapsed: 100, remaining: 1400}
    evolve(transf, object)
    eq(object, expected)
  })

  it('is recursive', function() {
    var transf   = {nested: {second: add(-1), third: add(1)}}
    var object   = {first: 1, nested: {second: 2, third: 3}}
    var expected = {first: 1, nested: {second: 1, third: 4}}
    eq(evolve(transf, object), expected)
  })

  it('is curried', function() {
    var tick = evolve({elapsed: add(1), remaining: add(-1)})
    var object   = {name: 'Tomato', elapsed: 100, remaining: 1400}
    var expected = {name: 'Tomato', elapsed: 101, remaining: 1399}
    eq(tick(object), expected)
  })

  it('ignores primitive value transformations', function() {
    var transf   = {n: 2, m: 'foo'}
    var object   = {n: 0, m: 1}
    var expected = {n: 0, m: 1}
    eq(evolve(transf, object), expected)
  })

  it('ignores null transformations', function() {
    var transf   = {n: null}
    var object   = {n: 0}
    var expected = {n: 0}
    eq(evolve(transf, object), expected)
  })
})