1<?php
2
3namespace dokuwiki\plugin\bureaucracy\test;
4
5use Doku_Form;
6
7/**
8 * @group plugin_bureaucracy
9 * @group plugins
10 */
11class bureaucracy_field_multiselect_test extends BureaucracyTest
12{
13
14    public function dataProvider()
15    {
16        return [
17            [
18                'fruits: @@multiSelectLabel@@',
19                'multiselect "multiSelectLabel" "Peaches|Apples|Oranges" =Peaches,Oranges',
20                ['Peaches','Apples'],
21                'fruits: Peaches, Apples',
22                [],
23                'default separator',
24            ],
25            [
26                'fruits: @@multiSelectLabel(;)@@',
27                'multiselect "multiSelectLabel" "Peaches|Apples|Oranges" =Peaches,Oranges',
28                ['Peaches','Apples'],
29                'fruits: Peaches;Apples',
30                [],
31                'custom separator',
32            ],
33        ];
34    }
35
36    /**
37     * @dataProvider dataProvider
38     *
39     * @param string $templateSyntax
40     * @param string $formSyntax
41     * @param        $postedValue
42     * @param string $expectedWikiText
43     * @param string $expectedValidationErrors
44     * @param string $msg
45     *
46     */
47    public function test_field_multiselect_submit(
48        $templateSyntax,
49        $formSyntax,
50        $postedValue,
51        $expectedWikiText,
52        $expectedValidationErrors,
53        $msg
54    ) {
55        $actualValidationErrors = [];
56
57        $actualWikiText = parent::send_form_action_template(
58            $formSyntax,
59            $templateSyntax,
60            $actualValidationErrors,
61            $postedValue
62        );
63
64        $this->assertEquals($expectedWikiText, $actualWikiText, $msg);
65        $this->assertEquals($expectedValidationErrors, $actualValidationErrors, $msg);
66    }
67
68    public function test_field_multiselect_render()
69    {
70        $formSyntax = 'multiselect "multiSelectLabel" "Peaches|Apples|Oranges" =Peaches,Oranges';
71        $instr = p_get_instructions("<form>\n$formSyntax\n</form>");
72
73        $actualHTML = p_render('xhtml', $instr, $info);
74
75        $expectedFieldHTML = '<label><span>multiSelectLabel <sup>*</sup></span> <select name="bureaucracy[0][]" multiple="multiple">
76<option value="Peaches" selected="selected">Peaches</option><option value="Apples">Apples</option><option value="Oranges" selected="selected">Oranges</option>
77</select></label>';
78        $expectedHTML = self::FORM_PREFIX_HTML . "\n$expectedFieldHTML\n" . self::FORM_SUFFIX_HTML;
79        $this->assertEquals(trim($expectedHTML), trim($actualHTML));
80    }
81}
82