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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
import t from 'tap';
import '#import-heck';
import Thing from '#thing';
import {compositeFrom, input} from '#composite';
import {exposeConstant, exposeDependency} from '#composite/control-flow';
import {withAlbum} from '#composite/things/track';
t.test(`withAlbum: basic behavior`, t => {
t.plan(3);
const composite = compositeFrom({
compose: false,
steps: [
withAlbum(),
exposeDependency({dependency: '#album'}),
],
});
t.match(composite, {
expose: {
dependencies: ['albumData', 'this'],
},
});
const fakeTrack1 = {
[Thing.isThing]: true,
directory: 'foo',
};
const fakeTrack2 = {
[Thing.isThing]: true,
directory: 'bar',
};
const fakeAlbum = {
[Thing.isThing]: true,
directory: 'baz',
tracks: [fakeTrack1],
};
t.equal(
composite.expose.compute({
albumData: [fakeAlbum],
this: fakeTrack1,
}),
fakeAlbum);
t.equal(
composite.expose.compute({
albumData: [fakeAlbum],
this: fakeTrack2,
}),
null);
});
t.test(`withAlbum: early exit conditions`, t => {
t.plan(4);
const composite = compositeFrom({
compose: false,
steps: [
withAlbum(),
exposeConstant({
value: input.value('bimbam'),
}),
],
});
const fakeTrack1 = {
[Thing.isThing]: true,
directory: 'foo',
};
const fakeTrack2 = {
[Thing.isThing]: true,
directory: 'bar',
};
const fakeAlbum = {
[Thing.isThing]: true,
directory: 'baz',
tracks: [fakeTrack1],
};
t.equal(
composite.expose.compute({
albumData: [fakeAlbum],
this: fakeTrack1,
}),
'bimbam',
`does not early exit if albumData is present and contains the track`);
t.equal(
composite.expose.compute({
albumData: [fakeAlbum],
this: fakeTrack2,
}),
'bimbam',
`does not early exit if albumData is present and does not contain the track`);
t.equal(
composite.expose.compute({
albumData: [],
this: fakeTrack1,
}),
'bimbam',
`does not early exit if albumData is empty array`);
t.equal(
composite.expose.compute({
albumData: null,
this: fakeTrack1,
}),
null,
`early exits if albumData is null`);
});
|