« get me outta code hell

withAlbum.js « track « things « composite « data « unit « test - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/test/unit/data/composite/things/track/withAlbum.js
blob: 6f50776b2ce10cd23a3397ca85102034c615160a (plain)
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`);
});