UNPKG

2.35 kBtext/coffeescriptView Raw
1{Just} = require 'data.maybe'
2require('chai').should()
3
4agson = require('../src/agson')
5
6describe '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]