Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/78078


Change subject: Refactor SetAliasesTest
......................................................................

Refactor SetAliasesTest

Bug: 51681
Change-Id: I0ebd09eb1a4cd33927ffcee276f1adf441ed4b57
---
M repo/tests/phpunit/includes/api/SetAliasesTest.php
1 file changed, 122 insertions(+), 97 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/78/78078/3

diff --git a/repo/tests/phpunit/includes/api/SetAliasesTest.php 
b/repo/tests/phpunit/includes/api/SetAliasesTest.php
index aec5450..f1bfa17 100644
--- a/repo/tests/phpunit/includes/api/SetAliasesTest.php
+++ b/repo/tests/phpunit/includes/api/SetAliasesTest.php
@@ -50,128 +50,153 @@
  * @group BreakingTheSlownessBarrier
  *
  * @licence GNU GPL v2+
- * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland
  */
-class SetAliasesTest extends WikibaseApiTestCase {
+class SetAliasesTest extends LangAttributeTestCase {
 
-       private static $hasSetup;
-
-       public function setup() {
-               parent::setup();
-
-               if( !isset( self::$hasSetup ) ){
-                       $this->initTestEntities( array( 'Oslo' ) );
-               }
-               self::$hasSetup = true;
+       public function setUp() {
+               self::$testAction = 'wbsetaliases';
+               parent::setUp();
        }
 
-       public function paramProvider() {
+       public static function provideData() {
                return array(
-                       // lang code, list name, list values, expected result
-                       array( 'Oslo', 'en', 'set', 'Foo', 'Foo' ),
-                       array( 'Oslo', 'en', 'add', 'Foo|bax', 'Foo|bax' ),
-                       array( 'Oslo', 'en', 'set', 'Foo|bar|baz', 
'Foo|bar|baz' ),
-                       array( 'Oslo', 'en', 'add', 'Foo|spam', 
'Foo|bar|baz|spam' ),
-                       array( 'Oslo', 'en', 'add', 'ohi', 
'Foo|bar|baz|spam|ohi' ),
+                       // p => params, e => expected
 
-                       array( 'Oslo', 'de', 'set', '', '' ),
-                       array( 'Oslo', 'de', 'add', 'ohi', 'ohi' ),
-
-                       array( 'Oslo', 'en', 'remove', 'ohi', 
'Foo|bar|baz|spam' ),
-                       array( 'Oslo', 'en', 'remove', 'ohi', 
'Foo|bar|baz|spam' ),
-                       array( 'Oslo', 'en', 'remove', 'Foo|bar|baz|o_O', 
'spam' ),
-                       array( 'Oslo', 'en', 'add', 'o_O', 'spam|o_O' ),
-                       array( 'Oslo', 'en', 'set', 'o_O', 'o_O' ),
-                       array( 'Oslo', 'en', 'remove', 'o_O', '' ),
+                       // -- Test valid sequence -----------------------------
+                       array( //0
+                               'p' => array( 'language' => 'en', 'set' => '' ),
+                               'e' => array( 'warning' => 'edit-no-change' ) ),
+                       array( //1
+                               'p' => array( 'language' => 'en', 'set' => 
'Foo' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'Foo' ) ) ) ),
+                       array( //2
+                               'p' => array( 'language' => 'en', 'add' => 
'Foo|Bax' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'Foo', 'Bax' ) ) ) ),
+                       array( //3
+                               'p' => array( 'language' => 'en', 'set' => 
'Foo|Bar|Baz' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'Foo', 'Bar', 'Baz' ) ) ) ),
+                       array( //4
+                               'p' => array( 'language' => 'en', 'set' => 
'Foo|Bar|Baz' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'Foo', 'Bar', 'Baz' ) ), 'warning' => 'edit-no-change' ) ),
+                       array( //5
+                               'p' => array( 'language' => 'en', 'add' => 
'Foo|Spam' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'Foo', 'Bar', 'Baz', 'Spam' ) ) ) ),
+                       array( //6
+                               'p' => array( 'language' => 'en', 'add' => 
'ohi' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'Foo', 'Bar', 'Baz', 'Spam', 'ohi' ) ) ) ),
+                       array( //7
+                               'p' => array( 'language' => 'en', 'set' => 
'ohi' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'ohi' ) ) ) ),
+                       array( //8
+                               'p' => array( 'language' => 'de', 'set' => '' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'ohi' ) ), 'warning' => 'edit-no-change' ) ),
+                       array( //9
+                               'p' => array( 'language' => 'de', 'set' => 
'hiya' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'ohi' ), 'de' => array( 'hiya' ) ) ) ),
+                       array( //10
+                               'p' => array( 'language' => 'de', 'add' => 
'opps' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'ohi' ), 'de' => array( 'hiya', 'opps' ) ) ) ),
+                       array( //11
+                               'p' => array( 'language' => 'de', 'remove' => 
'opps|hiya' ),
+                               'e' => array( 'value' => array( 'en' => array( 
'ohi' ) ) ) ),
+                       array( //12
+                               'p' => array( 'language' => 'en', 'remove' => 
'ohi' ),
+                               'e' => array(  ) ),
                );
        }
 
        /**
-        * @dataProvider paramProvider
+        * @dataProvider provideData
         */
-       public function testSetAliases( $handle, $langCode, $op, $value, 
$expected ) {
-               $id = EntityTestHelper::getId( $handle );
-               $expected = $expected === '' ? array() : explode( '|', 
$expected );
+       public function testSetAliases( $params, $expected ){
+               // -- set any defaults ------------------------------------
+               $params['action'] = self::$testAction;
+               if( !array_key_exists( 'id', $params ) ){
+                       $params['id'] = EntityTestHelper::getId( 'Empty' );
+               }
+               if( !array_key_exists( 'value', $expected ) ){
+                       $expected['value'] = array();
+               }
 
-               // update the item 
----------------------------------------------------------------
-               $req = array(
-                       'id' => $id,
-                       'action' => 'wbsetaliases',
-                       'language' => $langCode,
-                       $op => $value
-               );
+               // -- do the request 
--------------------------------------------------
+               list( $result,, ) = $this->doApiRequestWithToken( $params );
 
-               list( $apiResponse,, ) = $this->doApiRequestWithToken( $req, 
null, self::$users['wbeditor']->user );
+               // -- check the result 
------------------------------------------------
+               $this->assertArrayHasKey( 'success', $result, "Missing 
'success' marker in response." );
+               $this->assertResultHasEntityType( $result );
+               $this->assertArrayHasKey( 'entity', $result, "Missing 'entity' 
section in response." );
 
-               $this->assertResultSuccess( $apiResponse );
+               if( array_key_exists( $params['language'], $expected['value'] ) 
){
+                       $resAliases = self::flattenArray( 
$result['entity']['aliases'], 'language', 'value', true );
+                       $this->assertArrayHasKey( $params['language'], 
$resAliases );
+                       $this->assertArrayEquals( 
$expected['value'][$params['language']], $resAliases[ $params['language'] ] );
+               }
 
-               // check return value 
--------------------------------------------------
-               if ( $expected ) {
-                       $this->assertResultSuccess( $apiResponse );
-                       $this->assertResultHasKeyInPath( $apiResponse, 
'entity', 'aliases' );
+               // -- check any warnings 
----------------------------------------------
+               if( array_key_exists( 'warning', $expected ) ){
+                       $this->assertArrayHasKey( 'warnings', $result, "Missing 
'warnings' section in response." );
+                       $this->assertEquals( $expected['warning'], 
$result['warnings']['messages']['0']['name']);
+                       $this->assertArrayHasKey( 'html', 
$result['warnings']['messages'] );
+               }
 
-                       $aliases = self::flattenArray( 
$apiResponse['entity']['aliases'], 'language', 'value', true );
-                       $actual = isset( $aliases[ $langCode ] ) ? $aliases[ 
$langCode ] : array();
-
-                       $this->assertArrayEquals( $expected, $actual );
+               // -- check item in database 
-------------------------------------------
+               $dbEntity = $this->loadEntity( EntityTestHelper::getId( 'Empty' 
) );
+               if( count( $expected['value'] ) ){
+                       $this->assertArrayHasKey( 'aliases', $dbEntity );
+                       $dbAliases = self::flattenArray( $dbEntity['aliases'], 
'language', 'value', true );
+                       foreach( $expected['value'] as $valueLanguage => $value 
){
+                               $this->assertArrayEquals( $value, $dbAliases[ 
$valueLanguage ] );
+                       }
                } else {
-                       $this->assertFalse( !empty( 
$apiResponse['entity']['aliases'] ), "found aliases when there should be none" 
);
+                       $this->assertArrayNotHasKey( 'aliases', $dbEntity );
                }
 
-               // check item in database 
--------------------------------------------------
-               $item = $this->loadEntity( $id );
-
-               $aliases = self::flattenArray( $item['aliases'], 'language', 
'value', true );
-               $actual = isset( $aliases[ $langCode ] ) ? $aliases[ $langCode 
] : array();
-
-               $this->assertArrayEquals( $expected, $actual );
-
-               //TODO: we should have such checks for all API modules!
-               $this->assertRevisionSummary(
-                       array_merge( array( "wbsetaliases-$op", $langCode ), 
explode( '|', $value ) ),
-                       $apiResponse['entity']['lastrevid'] );
-       }
-
-       public function testSetAliases_length( ) {
-               $handle = 'Oslo';
-               $id = EntityTestHelper::getId( $handle );
-               $langCode = 'en';
-               $op = 'add';
-               $value = LangAttributeTestHelper::makeOverlyLongString();
-               $exception = 'UsageException';
-
-               // update the item 
----------------------------------------------------------------
-               $req = array(
-                       'id' => $id,
-                       'action' => 'wbsetaliases',
-                       'language' => $langCode,
-                       $op => $value
-               );
-
-               try {
-                       list( $apiResponse,, ) = $this->doApiRequestWithToken( 
$req, null, self::$users['wbeditor']->user );
-               } catch ( \Exception $e ) {
-                       if ( $exception !== null && ! $e instanceof 
\PHPUnit_Framework_AssertionFailedError ) {
-                               $this->assertTrue( is_a( $e, $exception ), "Not 
the expected exception" );
-                               return;
-                       }
-                       else {
-                               throw $e;
+               // -- check the edit summary 
--------------------------------------------
+               if( !array_key_exists( 'warning', $expected ) || 
$expected['warning'] != 'edit-no-change' ){
+                       $this->assertRevisionSummary( array( self::$testAction, 
$params['language'] ), $result['entity']['lastrevid'] );
+                       if( array_key_exists( 'summary', $params) ){
+                               $this->assertRevisionSummary( 
"/{$params['summary']}/" , $result['entity']['lastrevid'] );
                        }
                }
        }
 
-       public function testSetAliases_invalidId() {
-               $badId = 'xyz123+++';
+       public static function provideExceptionData() {
+               return array(
+                       // p => params, e => expected
 
-               $req = array(
-                       'id' => $badId,
-                       'action' => 'wbsetaliases',
-                       'language' => 'en',
-                       'set' => 'foo'
+                       // -- Test Exceptions -----------------------------
+                       array( //0
+                               'p' => array( 'language' => '', 'add' => '' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'unknown_language' ) ) ),
+                       array( //1
+                               'p' => array( 'language' => 'nl', 'set' => 
LangAttributeTestHelper::makeOverlyLongString() ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'failed-save' ) ) ),
+                       array( //2
+                               'p' => array( 'language' => 'pt', 'remove' => 
'normalValue' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'badtoken', 'message' => 'loss of session data' ) ) 
),
+                       array( //3
+                               'p' => array( 'id' => 'noANid', 'language' => 
'fr', 'add' => 'normalValue' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'no-such-entity-id', 'message' => 'No entity found' 
) ) ),
+                       array( //4
+                               'p' => array( 'site' => 'qwerty', 'language' => 
'pl', 'set' => 'normalValue' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'unknown_site', 'message' => "Unrecognized value 
for parameter 'site'" ) ) ),
+                       array( //5
+                               'p' => array( 'site' => 'enwiki', 'title' => 
'GhskiDYiu2nUd', 'language' => 'en', 'remove' => 'normalValue' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'no-such-entity-link', 'message' => 'No entity 
found matching site link' ) ) ),
+                       array( //6
+                               'p' => array( 'title' => 'Blub', 'language' => 
'en', 'add' => 'normalValue' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'param-illegal', 'message' => 'Either provide the 
item "id" or pairs' ) ) ),
+                       array( //7
+                               'p' => array( 'site' => 'enwiki', 'language' => 
'en', 'set' => 'normalValue' ),
+                               'e' => array( 'exception' => array( 'type' => 
'UsageException', 'code' => 'param-illegal', 'message' => 'Either provide the 
item "id" or pairs' ) ) ),
                );
+       }
 
-               $this->setExpectedException( 'UsageException' );
-               $this->doApiRequestWithToken( $req, null, 
self::$users['wbeditor']->user );
+       /**
+        * @dataProvider provideExceptionData
+        */
+       public function testSetLabelExceptions( $params, $expected ){
+               self::doTestSetLangAttributeExceptions( $params, $expected );
        }
 }
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/78078
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0ebd09eb1a4cd33927ffcee276f1adf441ed4b57
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to