« 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: 50b16f432f8ad4d0fb50b979cc3558928af006ac (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
import t from 'tap';
import {quickCheckCompositeOutputs} from '#test-lib';

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 qcco = quickCheckCompositeOutputs(t, dependencies);

  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,
    });

    qcco(step, outputDict);
  }
});