« get me outta code hell

withUniqueItemsOnly.js « data « 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/data/withUniqueItemsOnly.js
blob: 965b14b5984a6665a76f569dfb3fc96fe16e2814 (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
import t from 'tap';

import {compositeFrom, input} from '#composite';
import {exposeDependency} from '#composite/control-flow';
import {withUniqueItemsOnly} from '#composite/data';

t.test(`withUniqueItemsOnly: basic behavior`, t => {
  t.plan(3);

  const composite = compositeFrom({
    compose: false,

    steps: [
      withUniqueItemsOnly({
        list: 'list',
      }),

      exposeDependency({dependency: '#list'}),
    ],
  });

  t.match(composite, {
    expose: {
      dependencies: ['list'],
    },
  });

  t.same(composite.expose.compute({
    list: ['apple', 'banana', 'banana', 'banana', 'apple', 'watermelon'],
  }), ['apple', 'banana', 'watermelon']);

  t.same(composite.expose.compute({
    list: [],
  }), []);
});

t.test(`withUniqueItemsOnly: output shapes & values`, t => {
  t.plan(2 * 3 ** 1);

  const dependencies = {
    ['list_dependency']:
      [1, 1, 2, 3, 3, 4, 'foo', false, false, 4],
    [input('list_neither')]:
      [8, 8, 7, 6, 6, 5, 'bar', true, true, 5],
  };

  const mapLevel1 = [
    ['list_dependency', {
      '#list_dependency': [1, 2, 3, 4, 'foo', false],
    }],
    [input.value([-1, -1, 'interesting', 'very', 'interesting']), {
      '#uniqueItems': [-1, 'interesting', 'very'],
    }],
    [input('list_neither'), {
      '#uniqueItems': [8, 7, 6, 5, 'bar', true],
    }],
  ];

  for (const [listInput, outputDict] of mapLevel1) {
    const step = withUniqueItemsOnly({
      list: listInput,
    });

    quickCheckOutputs(step, outputDict);
  }

  function quickCheckOutputs(step, outputDict) {
    t.same(
      Object.keys(step.toDescription().outputs),
      Object.keys(outputDict));

    const composite = compositeFrom({
      compose: false,
      steps: [step, {
        dependencies: Object.keys(outputDict),
        compute: dependencies => dependencies,
      }],
    });

    t.same(
      composite.expose.compute(dependencies),
      outputDict);
  }
});