1 | var test = require('prova')
|
2 | var fs = require('fs')
|
3 | var path = require('path')
|
4 | var { analyzeFields,
|
5 | buildFilter,
|
6 | mergeFilterFields,
|
7 | getFiltersByField,
|
8 | parseDate} = require('../src/util/filter_helpers')
|
9 |
|
10 | function reviver (k, v) {
|
11 | if (k === '') return v
|
12 | return parseDate(v) || v
|
13 | }
|
14 |
|
15 |
|
16 | test('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 |
|
24 | test('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 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 | test('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 |
|
72 |
|
73 |
|
74 | t.end()
|
75 | })
|
76 |
|
77 | test('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 | })
|