xref: /plugin/struct/_test/AggregationFilterTest.php (revision de7aa9acedd23776755a111f9b6ca98f8f26f533)
1f1812f0bSAndreas Gohr<?php
2f1812f0bSAndreas Gohr
3f1812f0bSAndreas Gohrnamespace dokuwiki\plugin\struct\test;
4f1812f0bSAndreas Gohr
5*de7aa9acSAnna Dabrowska/**
6*de7aa9acSAnna Dabrowska * Testing aggregation filter
7*de7aa9acSAnna Dabrowska *
8*de7aa9acSAnna Dabrowska * @group plugin_struct
9*de7aa9acSAnna Dabrowska * @group plugins
10*de7aa9acSAnna Dabrowska */
11f1812f0bSAndreas Gohrclass AggregationFilterTest extends StructTest
12f1812f0bSAndreas Gohr{
13f1812f0bSAndreas Gohr    protected $items = [
14f1812f0bSAndreas Gohr        [['green', 'yellow'], 'car', 'audi', 'a80'],
15f1812f0bSAndreas Gohr        [[], 'car', 'audi', 'a4'],
16f1812f0bSAndreas Gohr        [['red', 'black'], 'car', 'bmw', 'i3'],
17bea7239dSAndreas Gohr        [['green', 'blue'], 'laptop', 'apple', 'pro 16'],
18f1812f0bSAndreas Gohr        [['blue', 'gray'], 'car', 'bmw', 'mini'],
19f1812f0bSAndreas Gohr        [['red', 'black'], 'car', 'bmw', 'z1'],
20f1812f0bSAndreas Gohr        [['red', 'blue'], 'laptop', 'apple', 'air'],
21f1812f0bSAndreas Gohr        [['black', 'red'], 'laptop', 'apple', 'm1'],
22f1812f0bSAndreas Gohr        [[], 'laptop', 'dell', 'xps'],
23bea7239dSAndreas Gohr        [['black', 'green'], '', 'audi', 'quattro'],
24f1812f0bSAndreas Gohr        [['blue', 'yellow'], '', 'dell', 'inspiron'],
25f1812f0bSAndreas Gohr        [['gray', 'yellow'], 'laptop', 'dell', 'latitude'],
26f1812f0bSAndreas Gohr    ];
27f1812f0bSAndreas Gohr
28f1812f0bSAndreas Gohr    public function testGetAllColumnValues()
29f1812f0bSAndreas Gohr    {
30f1812f0bSAndreas Gohr        $result = $this->createAggregationResult($this->items);
31f1812f0bSAndreas Gohr        $filter = new mock\AggregationFilter();
32f1812f0bSAndreas Gohr        $values = $filter->getAllColumnValues($result);
33f1812f0bSAndreas Gohr
34f1812f0bSAndreas Gohr        $this->assertCount(4, $values);
35f1812f0bSAndreas Gohr
36bea7239dSAndreas Gohr        // we expect value => displayValue pairs, sorted by displayValue
37bea7239dSAndreas Gohr        $this->assertSame(
38bea7239dSAndreas Gohr            [
39bea7239dSAndreas Gohr                'black' => 'black',
40bea7239dSAndreas Gohr                'blue' => 'blue',
41bea7239dSAndreas Gohr                'gray' => 'gray',
42bea7239dSAndreas Gohr                'green' => 'green',
43bea7239dSAndreas Gohr                'red' => 'red',
44bea7239dSAndreas Gohr                'yellow' => 'yellow'
45bea7239dSAndreas Gohr            ],
46*de7aa9acSAnna Dabrowska            $this->trimKeys($values[0]['values'])
47f1812f0bSAndreas Gohr        );
48f1812f0bSAndreas Gohr
49f1812f0bSAndreas Gohr        $this->assertEquals(
50f1812f0bSAndreas Gohr            'Label 1',
51bea7239dSAndreas Gohr            $values[0]['label']
52f1812f0bSAndreas Gohr        );
53f1812f0bSAndreas Gohr
54bea7239dSAndreas Gohr        $this->assertSame(
55bea7239dSAndreas Gohr            [
56bea7239dSAndreas Gohr                'car' => 'car',
57bea7239dSAndreas Gohr                'laptop' => 'laptop'
58bea7239dSAndreas Gohr            ],
59*de7aa9acSAnna Dabrowska            $this->trimKeys($values[1]['values'])
60f1812f0bSAndreas Gohr        );
61f1812f0bSAndreas Gohr
62f1812f0bSAndreas Gohr        $this->assertEquals(
63f1812f0bSAndreas Gohr            'Label 2',
64bea7239dSAndreas Gohr            $values[1]['label']
65f1812f0bSAndreas Gohr        );
66f1812f0bSAndreas Gohr    }
67*de7aa9acSAnna Dabrowska
68*de7aa9acSAnna Dabrowska    /**
69*de7aa9acSAnna Dabrowska     * Reverses key padding workaround in AggregationFilter::getAllColumnValues()
70*de7aa9acSAnna Dabrowska     *
71*de7aa9acSAnna Dabrowska     * @param array $values
72*de7aa9acSAnna Dabrowska     * @return int[]|string[]
73*de7aa9acSAnna Dabrowska     */
74*de7aa9acSAnna Dabrowska    protected function trimKeys($values)
75*de7aa9acSAnna Dabrowska    {
76*de7aa9acSAnna Dabrowska        return array_flip(array_map(static fn($val) => trim($val), array_flip($values)));
77*de7aa9acSAnna Dabrowska    }
78f1812f0bSAndreas Gohr}
79