UNPKG

4.53 kBJavaScriptView Raw
1var test = require('prova')
2var fs = require('fs')
3var path = require('path')
4var { analyzeFields,
5 buildFilter,
6 mergeFilterFields,
7 getFiltersByField,
8 parseDate} = require('../src/util/filter_helpers')
9
10function reviver (k, v) {
11 if (k === '') return v
12 return parseDate(v) || v
13}
14
15// TODO: Need better tests here.
16test('analyzeFields', function (t) {
17 var markers = require('./fixtures/markers.json')
18 var expected = fs.readFileSync(path.join(__dirname, 'fixtures/expectedFieldAnalysis.json'), 'utf8')
19 expected = JSON.parse(expected, reviver)
20 t.deepEqual(analyzeFields(markers), expected, 'Matches expected output')
21 t.end()
22})
23
24test('mergeFilterFields', function (t) {
25 var merged
26
27 merged = mergeFilterFields(['in', 'myField', 'foo'])
28 t.deepEqual(merged, ['myField'], 'works with undefined `filterFields`')
29
30 merged = mergeFilterFields(undefined, ['myField'])
31 t.deepEqual(merged, ['myField'], 'works with undefined filter')
32
33 merged = mergeFilterFields(null, ['myField'])
34 t.deepEqual(merged, ['myField'], 'works with null filter')
35
36 merged = mergeFilterFields(['in', 'myField', 'foo'], ['myField', 'otherField'])
37 t.deepEqual(merged, ['myField', 'otherField'], 'merges overlapping filters and fields')
38
39 merged = mergeFilterFields(['in', 'myField', 'foo'], ['otherField1', 'otherField2'])
40 t.deepEqual(merged, ['otherField1', 'otherField2', 'myField'], 'merges non-overlapping filters and fields')
41
42 merged = mergeFilterFields(['all', ['in', 'myField1', 'foo'], ['in', 'myField2', 'bar']], ['otherField'])
43 t.deepEqual(merged, ['otherField', 'myField1', 'myField2'], 'works with \'all\' filter')
44
45 t.end()
46})
47
48// test('isSupportedFilter', function (t) {
49// t.true(isSupportedFilter(['in', 'foo', 'bar'], ['in']), 'if filter expression is in supported array, returns true')
50// t.false(isSupportedFilter(['in', 'foo', 'bar'], ['==']), 'returns false if filter expression not in supported list')
51// t.true(isSupportedFilter(['all', ['in', 'foo', 'bar'], ['==', 'foo', 'bar']], ['in', 'all', '==']), 'works with nested \'all\' filters')
52// t.false(isSupportedFilter(['all', ['in', 'foo', 'bar'], ['==', 'foo', 'bar']], ['in', '==']), 'works with nested \'all\' filters')
53// t.false(isSupportedFilter(['all', ['in', 'foo', 'bar'], ['==', 'foo', 'bar']], ['all', '==']), 'works with nested \'all\' filters')
54// t.end()
55// })
56
57test('getFiltersByField', function (t) {
58 t.deepEqual(getFiltersByField(undefined), {}, 'undefined filter returns no filter')
59 t.deepEqual(getFiltersByField(null), {}, 'null filter returns no filter')
60 t.deepEqual(getFiltersByField(['in', 'foo', 'bar', 'baz']), {foo: {in: ['bar', 'baz']}})
61 t.deepEqual(getFiltersByField(['<=', 'foo', 3]), {foo: {'<=': 3}})
62 t.deepEqual(getFiltersByField(['>=', 'foo', 1]), {foo: {'>=': 1}})
63 t.deepEqual(getFiltersByField(['all', ['<=', 'foo', 3], ['>=', 'foo', 1]]), {foo: {'>=': 1, '<=': 3}})
64 t.deepEqual(getFiltersByField(['all', ['in', 'foo', 'bar'], ['in', 'baz', 'qux']]), {foo: {in: ['bar']}, baz: {in: ['qux']}})
65 t.deepEqual(getFiltersByField(['all',
66 ['all', ['in', 'foo', 'bar'], ['in', 'baz', 'qux']],
67 ['all', ['<=', 'quux', 3], ['>=', 'quux', 1]]]), {foo: {in: ['bar']}, baz: {in: ['qux']}, quux: {'>=': 1, '<=': 3}}, 'compound-compound filter')
68 t.deepEqual(getFiltersByField(['all', ['all', ['<=', 'foo', 3]]]), {foo: {'<=': 3}})
69 t.deepEqual(getFiltersByField(['all', ['all', ['<=', 'foo', 3], ['>=', 'foo', 1]]]), {foo: {'>=': 1, '<=': 3}})
70 t.throws(getFiltersByField.bind(null, ['==', 'foo', 'bar']), 'invalid operator')
71 // Does not currently throw, instead ignores field filter on 'foo'
72 // t.throws(getFiltersByField.bind(null, ['all', ['in', 'foo', 'bar'], ['in', 'foo', 'baz']]), 'repeat filter on same field within "all" compound filter')
73 // t.throws(getFiltersByField.bind(null, ['all', ['in', 'foo', 'bar'], ['in', 'qux', 'baz'], ['in', 'foo', 'baz']]), 'repeat filter on same field within "all" compound filter')
74 t.end()
75})
76
77test('buildFilter', function (t) {
78 t.deepEqual(buildFilter({foo: {in: ['bar', 'baz']}}), ['all', ['in', 'foo', 'bar', 'baz']])
79 t.deepEqual(buildFilter({foo: {'<=': 3}}), ['all', ['all', ['<=', 'foo', 3]]])
80 t.deepEqual(buildFilter({foo: {'>=': 1}}), ['all', ['all', ['>=', 'foo', 1]]])
81 t.deepEqual(buildFilter({foo: {'>=': 1, '<=': 3}}), ['all', ['all', ['<=', 'foo', 3], ['>=', 'foo', 1]]])
82 t.deepEqual(buildFilter({foo: {in: ['bar']}, baz: {in: ['qux']}}), ['all', ['in', 'foo', 'bar'], ['in', 'baz', 'qux']])
83 t.end()
84})