Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
46.20% covered (danger)
46.20%
79 / 171
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
phpbb_functions_validate_username_test
46.20% covered (danger)
46.20%
79 / 171
75.00% covered (warning)
75.00%
3 / 4
6.49
0.00% covered (danger)
0.00%
0 / 1
 getDataSet
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setUp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 validate_username_data
0.00% covered (danger)
0.00%
0 / 92
0.00% covered (danger)
0.00%
0 / 1
2
 test_validate_username
100.00% covered (success)
100.00%
74 / 74
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14require_once __DIR__ . '/../../phpBB/includes/functions_user.php';
15require_once __DIR__ . '/../mock/cache.php';
16require_once __DIR__ . '/validate_data_helper.php';
17
18class phpbb_functions_validate_username_test extends phpbb_database_test_case
19{
20    protected $db;
21    protected $cache;
22    protected $helper;
23
24    public function getDataSet()
25    {
26        return $this->createXMLDataSet(__DIR__ . '/fixtures/validate_username.xml');
27    }
28
29    protected function setUp(): void
30    {
31        parent::setUp();
32
33        $this->db = $this->new_dbal();
34        $this->cache = new phpbb_mock_cache;
35        $this->helper = new phpbb_functions_validate_data_helper($this);
36    }
37
38    public static function validate_username_data()
39    {
40        return array(
41            array('USERNAME_CHARS_ANY', array(
42                'foobar_allow'        => array(),
43                'foobar_ascii'        => array(),
44                'foobar_any'        => array(),
45                'foobar_alpha'        => array(),
46                'foobar_alpha_spacers'    => array(),
47                'foobar_letter_num'    => array(),
48                'foobar_letter_num_sp'    => array(),
49                'foobar_quot'        => array('INVALID_CHARS'),
50                'foobar_emoji'        => array('INVALID_EMOJIS'),
51                'barfoo_disallow'    => array('USERNAME_DISALLOWED'),
52                'admin_taken'        => array('USERNAME_TAKEN'),
53                'group_taken'        => array('USERNAME_TAKEN'),
54                'a d m i n i ᠎strator' => array('INVALID_CHARS'),
55            )),
56            array('USERNAME_ALPHA_ONLY', array(
57                'foobar_allow'        => array(),
58                'foobar_ascii'        => array(),
59                'foobar_any'        => array('INVALID_CHARS'),
60                'foobar_alpha'        => array(),
61                'foobar_alpha_spacers'    => array('INVALID_CHARS'),
62                'foobar_letter_num'    => array(),
63                'foobar_letter_num_sp'    => array('INVALID_CHARS'),
64                'foobar_quot'        => array('INVALID_CHARS'),
65                'foobar_emoji'        => array('INVALID_EMOJIS'),
66                'barfoo_disallow'    => array('USERNAME_DISALLOWED'),
67                'admin_taken'        => array('USERNAME_TAKEN'),
68                'group_taken'        => array('INVALID_CHARS'),
69                'a d m i n i ᠎strator' => array('INVALID_CHARS'),
70            )),
71            array('USERNAME_ALPHA_SPACERS', array(
72                'foobar_allow'        => array(),
73                'foobar_ascii'        => array(),
74                'foobar_any'        => array('INVALID_CHARS'),
75                'foobar_alpha'        => array(),
76                'foobar_alpha_spacers'    => array(),
77                'foobar_letter_num'    => array(),
78                'foobar_letter_num_sp'    => array('INVALID_CHARS'),
79                'foobar_quot'        => array('INVALID_CHARS'),
80                'foobar_emoji'        => array('INVALID_EMOJIS'),
81                'barfoo_disallow'    => array('USERNAME_DISALLOWED'),
82                'admin_taken'        => array('USERNAME_TAKEN'),
83                'group_taken'        => array('USERNAME_TAKEN'),
84                'a d m i n i ᠎strator' => array('INVALID_CHARS'),
85            )),
86            array('USERNAME_LETTER_NUM', array(
87                'foobar_allow'        => array(),
88                'foobar_ascii'        => array(),
89                'foobar_any'        => array('INVALID_CHARS'),
90                'foobar_alpha'        => array(),
91                'foobar_alpha_spacers'    => array('INVALID_CHARS'),
92                'foobar_letter_num'    => array(),
93                'foobar_letter_num_sp'    => array('INVALID_CHARS'),
94                'foobar_quot'        => array('INVALID_CHARS'),
95                'foobar_emoji'        => array('INVALID_EMOJIS'),
96                'barfoo_disallow'    => array('USERNAME_DISALLOWED'),
97                'admin_taken'        => array('USERNAME_TAKEN'),
98                'group_taken'        => array('INVALID_CHARS'),
99                'a d m i n i ᠎strator' => array('INVALID_CHARS'),
100            )),
101            array('USERNAME_LETTER_NUM_SPACERS', array(
102                'foobar_allow'        => array(),
103                'foobar_ascii'        => array(),
104                'foobar_any'        => array('INVALID_CHARS'),
105                'foobar_alpha'        => array(),
106                'foobar_alpha_spacers'    => array(),
107                'foobar_letter_num'    => array(),
108                'foobar_letter_num_sp'    => array(),
109                'foobar_quot'        => array('INVALID_CHARS'),
110                'foobar_emoji'        => array('INVALID_EMOJIS'),
111                'barfoo_disallow'    => array('USERNAME_DISALLOWED'),
112                'admin_taken'        => array('USERNAME_TAKEN'),
113                'group_taken'        => array('USERNAME_TAKEN'),
114                'a d m i n i ᠎strator' => array('INVALID_CHARS'),
115            )),
116            array('USERNAME_ASCII', array(
117                'foobar_allow'        => array(),
118                'foobar_ascii'        => array(),
119                'foobar_any'        => array(),
120                'foobar_alpha'        => array(),
121                'foobar_alpha_spacers'    => array(),
122                'foobar_letter_num'    => array(),
123                'foobar_letter_num_sp'    => array('INVALID_CHARS'),
124                'foobar_quot'        => array('INVALID_CHARS'),
125                'foobar_emoji'        => array('INVALID_EMOJIS'),
126                'barfoo_disallow'    => array('USERNAME_DISALLOWED'),
127                'admin_taken'        => array('USERNAME_TAKEN'),
128                'group_taken'        => array('USERNAME_TAKEN'),
129                'a d m i n i ᠎strator' => array('INVALID_CHARS'),
130            )),
131        );
132    }
133
134    /**
135    * @dataProvider validate_username_data
136    */
137    public function test_validate_username($allow_name_chars, $expected)
138    {
139        global $cache, $config, $db, $user;
140
141        $db = $this->db;
142        $cache = $this->cache;
143        $cache->put('_disallowed_usernames', array('barfoo'));
144        $user = new phpbb_mock_user();
145        $user->data['username_clean'] = 'username';
146
147        $config['allow_name_chars'] = $allow_name_chars;
148
149        $this->helper->assert_valid_data(array(
150            'foobar_allow' => array(
151                $expected['foobar_allow'],
152                'foobar',
153                array('username', 'foobar'),
154            ),
155            'foobar_ascii' => array(
156                $expected['foobar_ascii'],
157                'foobar',
158                array('username'),
159            ),
160            'foobar_any' => array(
161                $expected['foobar_any'],
162                'f*~*^=oo_bar1',
163                array('username'),
164            ),
165            'foobar_alpha' => array(
166                $expected['foobar_alpha'],
167                'fo0Bar',
168                array('username'),
169            ),
170            'foobar_alpha_spacers' => array(
171                $expected['foobar_alpha_spacers'],
172                'Fo0-[B]_a+ R',
173                array('username'),
174            ),
175            'foobar_letter_num' => array(
176                $expected['foobar_letter_num'],
177                'fo0Bar0',
178                array('username'),
179            ),
180            'foobar_letter_num_sp' => array(
181                $expected['foobar_letter_num_sp'],
182                'Fö0-[B]_a+ R',
183                array('username'),
184            ),
185            'foobar_quot' => array(
186                $expected['foobar_quot'],
187                '"foobar"',
188                array('username'),
189            ),
190            'foobar_emoji' => array(
191                $expected['foobar_emoji'],
192                'username😮',
193                array('username'),
194            ),
195            'barfoo_disallow' => array(
196                $expected['barfoo_disallow'],
197                'barfoo',
198                array('username'),
199            ),
200            'admin_taken' => array(
201                $expected['admin_taken'],
202                'admin',
203                array('username'),
204            ),
205            'group_taken' => array(
206                $expected['group_taken'],
207                'foobar_group',
208                array('username'),
209            ),
210            'a d m i n i ᠎strator' => array(
211                $expected['a d m i n i ᠎strator'],
212                'a d m i n i ᠎strator',
213                array('username'),
214            ),
215        ));
216    }
217}