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