Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / chain-able-deps   js

Repository URL to install this package:

Version: 6.0.4 

/ src / fp / __tests__ / evolve-transform.ts

import evolve from '../../fp/evolve'
import add from '../../math/add'

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

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

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

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

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

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

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

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