Jeroen De Dauw has submitted this change and it was merged.
Change subject: Improvements to ChangeOpSiteLink and its test
......................................................................
Improvements to ChangeOpSiteLink and its test
Change-Id: Ie2b2aea6442ad104a24a9e74fea360c0855d74e3
---
M repo/includes/api/EditEntity.php
M repo/includes/changeop/ChangeOpSiteLink.php
M repo/tests/phpunit/includes/changeop/ChangeOpSiteLinkTest.php
3 files changed, 53 insertions(+), 52 deletions(-)
Approvals:
Daniel Kinzler: Looks good to me, approved
jenkins-bot: Verified
diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php
index 466cb98..52c45b0 100644
--- a/repo/includes/api/EditEntity.php
+++ b/repo/includes/api/EditEntity.php
@@ -337,7 +337,7 @@
}
if ( array_key_exists( 'remove', $arg ) ||
$arg['title'] === "" ) {
- $siteLinksChangeOps[] = new ChangeOpSiteLink(
$linkSite, null );
+ $siteLinksChangeOps[] = new ChangeOpSiteLink(
$globalSiteId, null );
} else {
$linkPage = $linkSite->normalizePageName(
Utils::trimWhitespace( $arg['title'] ) );
@@ -346,7 +346,7 @@
$this->dieUsage( $this->msg(
'wikibase-api-no-external-page' )->text(), 'add-sitelink-failed' );
}
- $siteLinksChangeOps[] = new ChangeOpSiteLink(
$linkSite, $linkPage );
+ $siteLinksChangeOps[] = new ChangeOpSiteLink(
$globalSiteId, $linkPage );
}
}
diff --git a/repo/includes/changeop/ChangeOpSiteLink.php
b/repo/includes/changeop/ChangeOpSiteLink.php
index b6dbe9b..6e9165a 100644
--- a/repo/includes/changeop/ChangeOpSiteLink.php
+++ b/repo/includes/changeop/ChangeOpSiteLink.php
@@ -4,6 +4,7 @@
use InvalidArgumentException;
use Site;
+use Wikibase\DataModel\SimpleSiteLink;
/**
* Class for sitelink change operation
@@ -35,32 +36,36 @@
/**
* @since 0.4
*
- * @var Site
+ * @var string
*/
- protected $linkSite;
+ protected $siteId;
/**
* @since 0.4
*
* @var string|null
*/
- protected $linkPage;
+ protected $pageName;
/**
* @since 0.4
*
- * @param Site $linkSite
- * @param string|null $linkPage
+ * @param string $siteId
+ * @param string|null $pageName Null in case the link with the provided
siteId should be removed
*
* @throws InvalidArgumentException
*/
- public function __construct( Site $linkSite, $linkPage ) {
- if ( !is_string( $linkPage ) && $linkPage !==null ) {
+ public function __construct( $siteId, $pageName ) {
+ if ( !is_string( $siteId ) ) {
+ throw new InvalidArgumentException( '$siteId needs to
be a string' );
+ }
+
+ if ( !is_string( $pageName ) && $pageName !==null ) {
throw new InvalidArgumentException( '$linkPage needs to
be a string|null' );
}
- $this->linkSite = $linkSite;
- $this->linkPage = $linkPage;
+ $this->siteId = $siteId;
+ $this->pageName = $pageName;
}
/**
@@ -70,15 +75,18 @@
*
* @param Entity $entity
*
- * @return SiteLink|bool
+ * @throws InvalidArgumentException
*/
public function apply( Entity $entity ) {
- if ( $this->linkPage === null ) {
- $entity->removeSiteLink( $this->linkSite->getGlobalId()
);
- return true; // don't show an error when the sitelink
we try to remove does not exist
- } else {
- $siteLink = new SiteLink( $this->linkSite,
$this->linkPage );
- return $entity->addSiteLink( $siteLink,'set' );
+ if ( !( $entity instanceof Item ) ) {
+ throw new InvalidArgumentException( 'ChangeOpSiteLink
can only be applied to Item instances' );
+ }
+
+ if ( $this->pageName === null ) {
+ $entity->removeSiteLink( $this->siteId );
+ }
+ else {
+ $entity->addSimpleSiteLink( new SimpleSiteLink(
$this->siteId, $this->pageName ) );
}
}
diff --git a/repo/tests/phpunit/includes/changeop/ChangeOpSiteLinkTest.php
b/repo/tests/phpunit/includes/changeop/ChangeOpSiteLinkTest.php
index 31467fe..544daa5 100644
--- a/repo/tests/phpunit/includes/changeop/ChangeOpSiteLinkTest.php
+++ b/repo/tests/phpunit/includes/changeop/ChangeOpSiteLinkTest.php
@@ -2,8 +2,10 @@
namespace Wikibase\Test;
+use Site;
use Wikibase\ChangeOpSiteLink;
-use Wikibase\ItemContent;
+use Wikibase\DataModel\SimpleSiteLink;
+use Wikibase\Item;
use InvalidArgumentException;
use Wikibase\SiteLink;
@@ -39,39 +41,36 @@
*/
class ChangeOpSiteLinkTest extends \PHPUnit_Framework_TestCase {
- public function invalidConstructorProvider() {
- $args = array();
- $args[] = array( $this->getSite( 'enwiki' ), 1234 );
-
- return $args;
- }
-
/**
* @dataProvider invalidConstructorProvider
* @expectedException InvalidArgumentException
- *
- * @param Site $linkSite
- * @param string|null $aliases
*/
- public function testInvalidConstruct( $linkSite, $linkPage ) {
- $changeOpSiteLink = new ChangeOpSiteLink( $linkSite, $linkPage
);
+ public function testConstructorWithInvalidArguments( $siteId, $linkPage
) {
+ new ChangeOpSiteLink( $siteId, $linkPage );
+ }
+
+ public function invalidConstructorProvider() {
+ $argLists = array();
+
+ $argLists[] = array( 'enwiki', 1234 );
+ $argLists[] = array( 1234, 'Berlin' );
+
+ return $argLists;
}
public function changeOpSiteLinkProvider() {
- $enWiki = $this->getSite( 'enwiki' );
- $deWiki = $this->getSite( 'dewiki' );
- $existingSiteLinks = array( new SiteLink( $deWiki, 'Berlin' ) );
- $enSiteLink = new SiteLink( $enWiki, 'Berlin' );
+ $existingSiteLinks = array( new SimpleSiteLink( 'dewiki',
'Berlin' ) );
+ $enSiteLink = new SimpleSiteLink( 'enwiki', 'Berlin' );
- $item = ItemContent::newEmpty();
- $entity = $item->getEntity();
+ $item = Item::newEmpty();
+
foreach ( $existingSiteLinks as $siteLink ) {
- $entity->addSiteLink( $siteLink );
+ $item->addSimpleSiteLink( $siteLink );
}
$args = array();
- $args[] = array ( clone $entity, new ChangeOpSiteLink( $enWiki,
'Berlin' ), array_merge( $existingSiteLinks, array ( $enSiteLink ) ) );
- $args[] = array ( clone $entity, new ChangeOpSiteLink( $deWiki,
null ), array() );
+ $args[] = array ( clone $item, new ChangeOpSiteLink( 'enwiki',
'Berlin' ), array_merge( $existingSiteLinks, array ( $enSiteLink ) ) );
+ $args[] = array ( clone $item, new ChangeOpSiteLink( 'dewiki',
null ), array() );
return $args;
}
@@ -79,23 +78,17 @@
/**
* @dataProvider changeOpSiteLinkProvider
*
- * @param Entity $entity
+ * @param Item $entity
* @param ChangeOpSiteLink $changeOpSiteLink
- * @param string $expectedSiteLinks
+ * @param SimpleSiteLink[] $expectedSiteLinks
*/
- public function testApply( $entity, $changeOpSiteLink,
$expectedSiteLinks ) {
+ public function testApply( Item $entity, ChangeOpSiteLink
$changeOpSiteLink, array $expectedSiteLinks ) {
$changeOpSiteLink->apply( $entity );
+
$this->assertEquals(
- SiteLink::siteLinksToArray( $expectedSiteLinks ),
- SiteLink::siteLinksToArray( $entity->getSiteLinks() )
+ $expectedSiteLinks,
+ $entity->getSimpleSiteLinks()
);
- }
-
- protected function getSite( $globalId ) {
- $site = new \MediaWikiSite();
- $site->setGlobalId( $globalId );
-
- return $site;
}
}
--
To view, visit https://gerrit.wikimedia.org/r/67506
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie2b2aea6442ad104a24a9e74fea360c0855d74e3
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits