all files / src/structure/immutable/ expectations.js

88% Statements 22/25
91.67% Branches 11/12
85.71% Functions 6/7
81.25% Lines 13/16
1 branch Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57        520× 322× 322×         198×                                                       58×           58×          
import expect from 'expect'
import deepEqual from 'deep-equal'
import { Map, List, Iterable, fromJS } from 'immutable'
 
const deepEqualValues = (a, b) => {
  if (Iterable.isIterable(a)) {
    Eif (Iterable.isIterable(b)) {
      return a.count() === b.count() &&
        a.every((value, key) => deepEqualValues(value, b.get(key)))
    }
    return false
  }
  return deepEqual(a, b) // neither are immutable iterables
}
 
const api = {
  toBeAList() {
    expect.assert(
      List.isList(this.actual),
      'expected %s to be an immutable list',
      this.actual
    )
    return this
  },
 
  toBeAMap() {
    expect.assert(
      Map.isMap(this.actual),
      'expected %s to be an immutable map',
      this.actual
    )
    return this
  },
 
  toBeSize(size) {
    expect.assert(
      Iterable.isIterable(this.actual) && this.actual.count() === size,
      'expected %s to contain %s elements',
      this.actual,
      size
    )
    return this
  },
 
  toEqualMap(expected) {
    expect.assert(
      deepEqualValues(this.actual, fromJS(expected)),
      'expected...\n%s\n...but found...\n%s',
      this.actual,
      fromJS(expected)
    )
    return this
  }
}
 
export default api