diff options
Diffstat (limited to 'www/wiki/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php')
-rw-r--r-- | www/wiki/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php b/www/wiki/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php new file mode 100644 index 00000000..35dc1a83 --- /dev/null +++ b/www/wiki/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php @@ -0,0 +1,166 @@ +<?php + +/** + * @covers ChangesListBooleanFilter + */ +class ChangesListBooleanFilterTest extends MediaWikiTestCase { + public function testGetJsData() { + $group = new ChangesListBooleanFilterGroup( [ + 'name' => 'group', + 'priority' => 2, + 'filters' => [], + ] ); + + $definition = [ + 'group' => $group, + 'label' => 'main-label', + 'description' => 'main-description', + 'default' => 1, + 'priority' => 1, + ]; + + $fooFilter = new ChangesListBooleanFilter( + $definition + [ 'name' => 'hidefoo' ] + ); + + $barFilter = new ChangesListBooleanFilter( + $definition + [ 'name' => 'hidebar' ] + ); + + $bazFilter = new ChangesListBooleanFilter( + $definition + [ 'name' => 'hidebaz' ] + ); + + $fooFilter->conflictsWith( + $barFilter, + 'foo-bar-global-conflict', + 'foo-conflicts-bar', + 'bar-conflicts-foo' + ); + + $fooFilter->setAsSupersetOf( $bazFilter, 'foo-superset-of-baz' ); + + $fooData = $fooFilter->getJsData(); + $this->assertArrayEquals( + [ + 'name' => 'hidefoo', + 'label' => 'main-label', + 'description' => 'main-description', + 'default' => 1, + 'priority' => 1, + 'cssClass' => null, + 'defaultHighlightColor' => null, + 'conflicts' => [ + [ + 'group' => 'group', + 'filter' => 'hidebar', + 'globalDescription' => 'foo-bar-global-conflict', + 'contextDescription' => 'foo-conflicts-bar', + ] + ], + 'subset' => [ + [ + 'group' => 'group', + 'filter' => 'hidebaz', + ], + + ], + 'messageKeys' => [ + 'main-label', + 'main-description', + 'foo-bar-global-conflict', + 'foo-conflicts-bar', + ], + ], + $fooData, + /** ordered= */ false, + /** named= */ true + ); + + $barData = $barFilter->getJsData(); + $this->assertArrayEquals( + [ + 'name' => 'hidebar', + 'label' => 'main-label', + 'description' => 'main-description', + 'default' => 1, + 'priority' => 1, + 'cssClass' => null, + 'defaultHighlightColor' => null, + 'conflicts' => [ + [ + 'group' => 'group', + 'filter' => 'hidefoo', + 'globalDescription' => 'foo-bar-global-conflict', + 'contextDescription' => 'bar-conflicts-foo', + ] + ], + 'subset' => [], + 'messageKeys' => [ + 'main-label', + 'main-description', + 'foo-bar-global-conflict', + 'bar-conflicts-foo', + ], + ], + $barData, + /** ordered= */ false, + /** named= */ true + ); + } + + public function testIsFeatureAvailableOnStructuredUi() { + $groupA = new ChangesListBooleanFilterGroup( [ + 'name' => 'groupA', + 'priority' => 1, + 'filters' => [], + ] ); + + $foo = new ChangesListBooleanFilter( [ + 'name' => 'hidefoo', + 'group' => $groupA, + 'label' => 'foo-label', + 'description' => 'foo-description', + 'default' => true, + 'showHide' => 'showhidefoo', + 'priority' => 2, + ] ); + + $this->assertEquals( + true, + $foo->isFeatureAvailableOnStructuredUi(), + 'Same filter appears on both' + ); + + // Should only be legacy ones that haven't been ported yet + $bar = new ChangesListBooleanFilter( [ + 'name' => 'hidebar', + 'default' => true, + 'group' => $groupA, + 'showHide' => 'showhidebar', + 'priority' => 2, + ] ); + + $this->assertEquals( + false, + $bar->isFeatureAvailableOnStructuredUi(), + 'Only on unstructured UI' + ); + + $baz = new ChangesListBooleanFilter( [ + 'name' => 'hidebaz', + 'default' => true, + 'group' => $groupA, + 'showHide' => 'showhidebaz', + 'isReplacedInStructuredUi' => true, + 'priority' => 2, + ] ); + + $this->assertEquals( + true, + $baz->isFeatureAvailableOnStructuredUi(), + 'Legacy filter does not appear directly in new UI, but equivalent ' . + 'does and is marked with isReplacedInStructuredUi' + ); + } +} |