Merge "benchmarks: Add rate per second and standard deviation to output"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 29 Jan 2018 19:14:07 +0000 (19:14 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 29 Jan 2018 19:14:07 +0000 (19:14 +0000)
includes/api/ApiBase.php
languages/i18n/en.json
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js
tests/phpunit/includes/api/query/ApiQueryTest.php
tests/selenium/pageobjects/usermessage.page.js [new file with mode: 0644]
tests/selenium/specs/user.js

index 1676f64..62d73f4 100644 (file)
@@ -1404,7 +1404,7 @@ abstract class ApiBase extends ContextSource {
        protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues,
                $allSpecifier = null, $limit1 = null, $limit2 = null
        ) {
-               if ( ( trim( $value ) === '' || trim( $value ) === "\x1f" ) && $allowMultiple ) {
+               if ( ( $value === '' || $value === "\x1f" ) && $allowMultiple ) {
                        return [];
                }
                $limit1 = $limit1 ?: self::LIMIT_SML1;
index 8d4b952..3726ae9 100644 (file)
        "lockmanager-fail-closelock": "Could not close lock file for \"$1\".",
        "lockmanager-fail-deletelock": "Could not delete lock file for \"$1\".",
        "lockmanager-fail-acquirelock": "Could not acquire lock for \"$1\".",
-       "lockmanager-fail-openlock": "Could not open lock file for \"$1\".",
+       "lockmanager-fail-openlock": "Could not open lock file for \"$1\". Make sure your upload directory is configured correctly and your web server has permission to write to that directory. See https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory for more information.",
        "lockmanager-fail-releaselock": "Could not release lock for \"$1\".",
        "lockmanager-fail-db-bucket": "Could not contact enough lock databases in bucket $1.",
        "lockmanager-fail-db-release": "Could not release locks on database $1.",
index 070ecf8..953df5b 100644 (file)
 
                        mw.hook( 'RcFilters.popup.open' ).fire();
 
-                       if ( !this.getMenu().getSelectedItem() ) {
+                       if ( !this.getMenu().findSelectedItem() ) {
                                // If there are no selected items, scroll menu to top
                                // This has to be in a setTimeout so the menu has time
                                // to be positioned and fixed
index 07d8c88..cbb4350 100644 (file)
         */
        mw.rcfilters.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
                var nextItem,
-                       currentItem = this.findHighlightedItem() || this.getSelectedItem();
+                       currentItem = this.findHighlightedItem() || this.findSelectedItem();
 
                // Call parent
                mw.rcfilters.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );
index 8026e54..88a2e62 100644 (file)
@@ -81,6 +81,19 @@ class ApiQueryTest extends ApiTestCase {
                $this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
        }
 
+       public function testTitlesWithWhitespaces() {
+               $data = $this->doApiRequest( [
+                       'action' => 'query',
+                       'titles' => ' '
+               ] );
+
+               $this->assertArrayHasKey( 'query', $data[0] );
+               $this->assertArrayHasKey( 'pages', $data[0]['query'] );
+               $this->assertEquals( 1, count( $data[0]['query']['pages'] ) );
+               $this->assertArrayHasKey( -1, $data[0]['query']['pages'] );
+               $this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
+       }
+
        /**
         * Test the ApiBase::titlePartToKey function
         *
diff --git a/tests/selenium/pageobjects/usermessage.page.js b/tests/selenium/pageobjects/usermessage.page.js
new file mode 100644 (file)
index 0000000..7faf347
--- /dev/null
@@ -0,0 +1,7 @@
+'use strict';
+const Page = require( './page' );
+
+class UserMessagePage extends Page {
+       get usermessage() { return browser.element( 'div.usermessage' ); }
+}
+module.exports = new UserMessagePage();
index 3f3872d..102acd6 100644 (file)
@@ -2,7 +2,9 @@
 const assert = require( 'assert' ),
        CreateAccountPage = require( '../pageobjects/createaccount.page' ),
        PreferencesPage = require( '../pageobjects/preferences.page' ),
-       UserLoginPage = require( '../pageobjects/userlogin.page' );
+       UserLoginPage = require( '../pageobjects/userlogin.page' ),
+       UserMessagePage = require( '../pageobjects/usermessage.page' ),
+       EditPage = require( '../pageobjects/edit.page' );
 
 describe( 'User', function () {
 
@@ -66,4 +68,24 @@ describe( 'User', function () {
 
        } );
 
+       it( 'should be able to view new message banner', function () {
+
+               // create user
+               browser.call( function () {
+                       return CreateAccountPage.apiCreateAccount( username, password );
+               } );
+
+               // create talk page with content
+               browser.call( function () {
+                       return EditPage.apiEdit( 'User_talk:' + username, Math.random().toString() );
+               } );
+
+               // log in
+               UserLoginPage.login( username, password );
+
+               // check
+               assert.equal( UserMessagePage.usermessage.getText(), 'You have a new message (last change).' );
+
+       } );
+
 } );