1<?php
2
3namespace dokuwiki\plugin\struct\test\types;
4
5use dokuwiki\plugin\struct\meta\ValidationException;
6use dokuwiki\plugin\struct\test\StructTest;
7use dokuwiki\plugin\struct\types\User;
8
9/**
10 * Testing the User Type
11 *
12 * @group plugin_struct
13 * @group plugins
14 */
15class UserTest extends StructTest
16{
17
18    public function test_validate_fail()
19    {
20        $this->expectException(ValidationException::class);
21        $user = new User();
22        $user->validate('nosuchuser');
23    }
24
25    public function test_validate_success()
26    {
27        $user = new User();
28        $user->validate('testuser');
29        $this->assertTrue(true); // we simply check that no exceptions are thrown
30
31        $user = new User(['existingonly' => false]);
32        $user->validate('nosuchuser');
33        $this->assertTrue(true); // we simply check that no exceptions are thrown
34    }
35
36    public function test_ajax()
37    {
38        global $INPUT;
39
40        $user = new User(
41            [
42                'autocomplete' => [
43                    'fullname' => true,
44                    'mininput' => 2,
45                    'maxresult' => 5,
46                ],
47            ]
48        );
49
50        $INPUT->set('search', 'test');
51        $this->assertEquals([['label' => 'Arthur Dent [testuser]', 'value' => 'testuser']], $user->handleAjax());
52
53        $INPUT->set('search', 'dent');
54        $this->assertEquals([['label' => 'Arthur Dent [testuser]', 'value' => 'testuser']], $user->handleAjax());
55
56        $INPUT->set('search', 'd'); // under mininput
57        $this->assertEquals([], $user->handleAjax());
58
59        $user = new User(
60            [
61                'autocomplete' => [
62                    'fullname' => false,
63                    'mininput' => 2,
64                    'maxresult' => 5,
65                ],
66            ]
67        );
68
69        $INPUT->set('search', 'test');
70        $this->assertEquals([['label' => 'Arthur Dent [testuser]', 'value' => 'testuser']], $user->handleAjax());
71
72        $INPUT->set('search', 'dent');
73        $this->assertEquals([], $user->handleAjax());
74
75        $user = new User(
76            [
77                'autocomplete' => [
78                    'fullname' => false,
79                    'mininput' => 2,
80                    'maxresult' => 0,
81                ],
82            ]
83        );
84
85        $INPUT->set('search', 'test');
86        $this->assertEquals([], $user->handleAjax());
87
88        // Check that numeric usernames are handled properly; PHP's
89        // strange handling of array keys that look like integers has
90        // caused bugs with this in the past.
91        global $auth;
92        $auth->createUser('12345', 'secret_password', 'Some Person', 'someone@example.com');
93        $auth->createUser('54321', 'another_password', 'Someone Else', 's.else@example.com');
94
95        $user = new User(
96            [
97                'autocomplete' => [
98                    'fullname' => true,
99                    'mininput' => 2,
100                    'maxresult' => 5,
101                ],
102            ]
103        );
104
105        $INPUT->set('search', 'Some');
106        $this->assertEquals(
107            [
108                ['label' => 'Some Person [12345]', 'value' => '12345'],
109                ['label' => 'Someone Else [54321]', 'value' => '54321']
110            ],
111            $user->handleAjax()
112        );
113    }
114}
115