1 | {Just} = require 'data.maybe'
|
2 | require('chai').should()
|
3 |
|
4 | agson = require('../src/agson')
|
5 |
|
6 | describe 'agson query', ->
|
7 | describe 'running', ->
|
8 | it 'can be done via map', ->
|
9 | agson
|
10 | .map((v) -> v + 1)
|
11 | .run(1)
|
12 | .should.deep.equal Just 2
|
13 |
|
14 | it 'can be done via get', ->
|
15 | agson
|
16 | .get()
|
17 | .run(1)
|
18 | .should.deep.equal Just 1
|
19 |
|
20 | it 'can be done via set', ->
|
21 | agson
|
22 | .set('foo')
|
23 | .run('bar')
|
24 | .should.deep.equal Just 'foo'
|
25 |
|
26 | describe 'composing different lenses together', ->
|
27 | it 'can compose list, property and object', ->
|
28 | agson
|
29 | .list()
|
30 | .property('foo')
|
31 | .object()
|
32 | .map((v) -> v + 1)
|
33 | .run([
|
34 | { foo: bar: 1 }
|
35 | { foo: qux: 2 }
|
36 | { foo: baz: 3 }
|
37 | ])
|
38 | .should.deep.equal Just [
|
39 | { foo: bar: 2 }
|
40 | { foo: qux: 3 }
|
41 | { foo: baz: 4 }
|
42 | ]
|
43 |
|
44 | it 'can compose list and recurse', ->
|
45 | agson
|
46 | .list()
|
47 | .recurse()
|
48 | .where((v) -> typeof v is 'number')
|
49 | .map((v) -> v + 1)
|
50 | .run([
|
51 | 1
|
52 | [2]
|
53 | [[3]]
|
54 | [[[4]]]
|
55 | ])
|
56 | .should.deep.equal Just [
|
57 | 2
|
58 | [3]
|
59 | [[4]]
|
60 | [[[5]]]
|
61 | ]
|
62 |
|
63 | it 'can compose list and where', ->
|
64 | agson
|
65 | .list()
|
66 | .where((v) -> v.here)
|
67 | .property('foo')
|
68 | .map((foo) -> foo + 111)
|
69 | .run([
|
70 | { foo: 123 }
|
71 | { foo: 456, here: true }
|
72 | ])
|
73 | .should.deep.equal Just [
|
74 | { foo: 123 }
|
75 | { foo: 567, here: true }
|
76 | ]
|
77 |
|
78 | describe 'chaining', ->
|
79 | it 'can do partial recursion by chaining multiple queries', ->
|
80 | agson
|
81 | .list()
|
82 | .then(
|
83 | agson.property('foo').recurse()
|
84 | )
|
85 | .where((v) -> typeof v is 'number')
|
86 | .map((foo) -> foo + 1)
|
87 | .run([
|
88 | { foo: 1 }
|
89 | { foo: foo: 2 }
|
90 | { foo: foo: foo: 3 }
|
91 | ])
|
92 | .should.deep.equal Just [
|
93 | { foo: 2 }
|
94 | { foo: foo: 3 }
|
95 | { foo: foo: foo: 4 }
|
96 | ]
|
97 |
|
98 | describe 'selectMany', ->
|
99 | it 'is an alias for property().list()', ->
|
100 | agson
|
101 | .selectMany('foos')
|
102 | .map((v) -> v + 1)
|
103 | .run({
|
104 | foos: [1, 2, 3]
|
105 | })
|
106 | .should.deep.equal Just foos: [2, 3, 4]
|