1<?php
2
3namespace dokuwiki\plugin\bureaucracy\test;
4
5/**
6 * @group plugin_bureaucracyau
7 * @group plugins
8 */
9class syntax_plugin_bureaucracyau_fieldusers_test extends BureaucracyTest
10{
11
12    /**
13     * Create some users
14     */
15    public function setUp()
16    {
17        parent::setUp();
18
19        /** @var \DokuWiki_Auth_Plugin $auth */
20        global $auth;
21
22        $auth->createUser('user1', '54321', 'user1Name', 'user1@example.com');
23        $auth->createUser('user2', '543210', 'user2Name', 'user2@example.com');
24        $auth->createUser('mwuser', '12345', 'Wiki User', 'me@example.com', ['group1', 'group2']);
25    }
26
27    public function dataProvider()
28    {
29        return [
30            [
31                'users:@@users@@',
32                'users users',
33                'user1, user2',
34                'users:user1, user2',
35                [],
36                'default substitution',
37            ],
38            [
39                'users:@@users@@',
40                'users users',
41                '',
42                'users:',
43                ['users'],
44                'error for empty substitution',
45            ],
46            [
47                'users:@@users(;)@@',
48                'users users',
49                'user1, user2',
50                'users:user1;user2',
51                [],
52                'custom delimiter',
53            ],
54            [
55                "users:@@users(\n)@@",
56                'users users',
57                'user1, user2',
58                "users:user1\nuser2",
59                [],
60                'newline delimiter',
61            ],
62            [
63                'users:@@users()@@',
64                'users users',
65                'user1, user2',
66                'users:user1user2',
67                [],
68                'empty delimiter',
69            ],
70            [
71                'users:@@users.name@@',
72                'users users',
73                'user1, user2',
74                'users:user1Name, user2Name',
75                [],
76                'names substitution default delitmiter',
77            ],
78            [
79                'users:@@users(;).name@@',
80                'users users',
81                'user1, user2',
82                'users:user1Name;user2Name',
83                [],
84                'names substitution custom delitmiter',
85            ],
86            [
87                'users:@@users.mail@@',
88                'users users',
89                'user1, user2',
90                'users:user1@example.com, user2@example.com',
91                [],
92                'mail substitution default delitmiter',
93            ],
94            [
95                "mails:@@users.mail@@\n\nnames:@@users(\n).name@@",
96                'users users',
97                'user1, user2',
98                "mails:user1@example.com, user2@example.com\n\nnames:user1Name\nuser2Name",
99                [],
100                'multiple replacements',
101            ],
102            [
103                'users:@@users@@',
104                'users users',
105                'not_existing1, not_existing2',
106                'users:not_existing1, not_existing2',
107                ['users'],
108                'unknown users should cause errors',
109            ],
110            [
111                'users:@@users.unknown_attribute@@',
112                'users users',
113                'user1, user2',
114                'users:@@users.unknown_attribute@@',
115                [],
116                'non existant attribute is not replaced',
117            ],
118            [
119                'users:@@*]]@@',  // the label must be something to break a regex when not properly quoted
120                'users "*]]"',
121                'user1, user2',
122                'users:user1, user2',
123                [],
124                'ensure label desn\'t break regex',
125            ],
126            [
127                'users:@@tHis Is UsEr@@',
128                'users "tHis Is UsEr"',
129                'user1, user2',
130                'users:user1, user2',
131                [],
132                'label with spaces and mixed case',
133            ],
134        ];
135    }
136
137    /**
138     * @dataProvider dataProvider
139     *
140     * @param string $templateSyntax
141     * @param string $formSyntax
142     * @param string $postedValue value of 'users' field
143     * @param string $expectedWikiText
144     * @param string $expectedValidationErrors
145     * @param string $msg
146     *
147     */
148    public function test_field_users(
149        $templateSyntax,
150        $formSyntax,
151        $postedValue,
152        $expectedWikiText,
153        $expectedValidationErrors,
154        $msg
155    ) {
156        $actualValidationErrors = [];
157
158        $actualWikiText = parent::send_form_action_template(
159            $formSyntax,
160            $templateSyntax,
161            $actualValidationErrors,
162            $postedValue
163        );
164
165        $this->assertEquals($expectedWikiText, $actualWikiText, $msg);
166        $this->assertEquals($expectedValidationErrors, $actualValidationErrors, $msg);
167    }
168}
169