3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
21 use MediaWiki\Preferences\IntvalFilter
;
22 use MediaWiki\Preferences\MultiUsernameFilter
;
23 use MediaWiki\Preferences\TimezoneFilter
;
28 class FiltersTest
extends MediaWikiTestCase
{
30 * @covers MediaWiki\Preferences\IntvalFilter::filterFromForm()
31 * @covers MediaWiki\Preferences\IntvalFilter::filterForForm()
33 public function testIntvalFilter() {
34 $filter = new IntvalFilter();
35 self
::assertSame( 0, $filter->filterFromForm( '0' ) );
36 self
::assertSame( 3, $filter->filterFromForm( '3' ) );
37 self
::assertSame( '123', $filter->filterForForm( '123' ) );
41 * @covers MediaWiki\Preferences\TimezoneFilter::filterFromForm()
42 * @dataProvider provideTimezoneFilter
44 * @param string $input
45 * @param string $expected
47 public function testTimezoneFilter( $input, $expected ) {
48 $filter = new TimezoneFilter();
49 $result = $filter->filterFromForm( $input );
50 self
::assertEquals( $expected, $result );
53 public function provideTimezoneFilter() {
55 [ 'ZoneInfo', 'Offset|0' ],
56 [ 'ZoneInfo|bogus', 'Offset|0' ],
57 [ 'System', 'System' ],
58 [ '2:30', 'Offset|150' ],
63 * @covers MediaWiki\Preferences\MultiUsernameFilter::filterFromForm()
64 * @dataProvider provideMultiUsernameFilterFrom
66 * @param string $input
67 * @param string|null $expected
69 public function testMultiUsernameFilterFrom( $input, $expected ) {
70 $filter = $this->makeMultiUsernameFilter();
71 $result = $filter->filterFromForm( $input );
72 self
::assertSame( $expected, $result );
75 public function provideMultiUsernameFilterFrom() {
80 [ "\n\n\nFoo\nBar\n", "1\n2" ],
81 [ "Baz\nInvalid\nFoo", "3\n1" ],
83 [ "Invalid\n\n\nInvalid\n", null ],
88 * @covers MediaWiki\Preferences\MultiUsernameFilter::filterForForm()
89 * @dataProvider provideMultiUsernameFilterFor
91 * @param string $input
92 * @param string $expected
94 public function testMultiUsernameFilterFor( $input, $expected ) {
95 $filter = $this->makeMultiUsernameFilter();
96 $result = $filter->filterForForm( $input );
97 self
::assertSame( $expected, $result );
100 public function provideMultiUsernameFilterFor() {
105 [ "\n1\n\n2\666\n", "Foo\nBar" ],
110 private function makeMultiUsernameFilter() {
116 $flipped = array_flip( $userMapping );
117 $idLookup = self
::getMockBuilder( CentralIdLookup
::class )
118 ->disableOriginalConstructor()
119 ->setMethods( [ 'centralIdsFromNames', 'namesFromCentralIds' ] )
120 ->getMockForAbstractClass();
122 $idLookup->method( 'centralIdsFromNames' )
123 ->will( self
::returnCallback( function ( $names ) use ( $userMapping ) {
125 foreach ( $names as $name ) {
126 $ids[] = $userMapping[$name] ??
null;
128 return array_filter( $ids, 'is_numeric' );
130 $idLookup->method( 'namesFromCentralIds' )
131 ->will( self
::returnCallback( function ( $ids ) use ( $flipped ) {
133 foreach ( $ids as $id ) {
134 $names[] = $flipped[$id] ??
null;
136 return array_filter( $names, 'is_string' );
139 return new MultiUsernameFilter( $idLookup );