Adrian Heine has uploaded a new change for review.

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

Change subject: Allow term boxes for entities without aliases
......................................................................

Allow term boxes for entities without aliases

Change-Id: Icd3f20aba399f82e810f6655e98ff077fd57cb04
---
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M view/src/EntityTermsView.php
M view/src/EntityViewPlaceholderExpander.php
M view/tests/phpunit/EntityTermsViewTest.php
M view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
5 files changed, 69 insertions(+), 23 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/86/277986/1

diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php 
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 2738d60..08e6c48 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -4,6 +4,7 @@
 
 use OutputPage;
 use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\Term\AliasesProvider;
 use Wikibase\Lib\ContentLanguages;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -164,7 +165,7 @@
                $entity = $this->entityRevisionLookup->getEntityRevision( 
$entityId, $revisionId )->getEntity();
                $labelsProvider = $entity;
                $descriptionsProvider = $entity;
-               $aliasesProvider = $entity;
+               $aliasesProvider = $entity instanceof AliasesProvider ? $entity 
: null;
 
                return new EntityViewPlaceholderExpander(
                        $this->templateFactory,
diff --git a/view/src/EntityTermsView.php b/view/src/EntityTermsView.php
index ff03585..54d10fd 100644
--- a/view/src/EntityTermsView.php
+++ b/view/src/EntityTermsView.php
@@ -171,7 +171,7 @@
        /**
         * @param LabelsProvider $labelsProvider
         * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider $aliasesProvider
+        * @param AliasesProvider|null $aliasesProvider
         * @param string[] $languageCodes The languages the user requested to 
be shown
         * @param Title|null $title
         *
@@ -180,7 +180,7 @@
        public function getEntityTermsForLanguageListView(
                LabelsProvider $labelsProvider,
                DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider,
+               AliasesProvider $aliasesProvider = null,
                array $languageCodes,
                Title $title = null
        ) {
@@ -208,7 +208,7 @@
        /**
         * @param LabelsProvider $labelsProvider
         * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider $aliasesProvider
+        * @param AliasesProvider|null $aliasesProvider
         * @param string $languageCode
         * @param Title|null $title
         *
@@ -217,7 +217,7 @@
        private function getEntityTermsForLanguageView(
                LabelsProvider $labelsProvider,
                DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider,
+               AliasesProvider $aliasesProvider = null,
                $languageCode,
                Title $title = null
        ) {
@@ -255,7 +255,7 @@
                                '',
                                ''
                        ),
-                       $this->getAliasesView( 
$aliasesProvider->getAliasGroups(), $languageCode ),
+                       $aliasesProvider ? $this->getAliasesView( 
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
                        ''
                );
        }
diff --git a/view/src/EntityViewPlaceholderExpander.php 
b/view/src/EntityViewPlaceholderExpander.php
index f100ea8..e6a6363 100644
--- a/view/src/EntityViewPlaceholderExpander.php
+++ b/view/src/EntityViewPlaceholderExpander.php
@@ -65,7 +65,7 @@
        private $descriptionsProvider;
 
        /**
-        * @var AliasesProvider
+        * @var AliasesProvider|null
         */
        private $aliasesProvider;
 
@@ -97,7 +97,7 @@
         * @param EntityIdParser $entityIdParser
         * @param LabelsProvider $labelsProvider
         * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider $aliasesProvider
+        * @param AliasesProvider|null $aliasesProvider
         * @param UserLanguageLookup $userLanguageLookup
         * @param ContentLanguages $termsLanguages
         * @param LanguageNameLookup $languageNameLookup
@@ -110,7 +110,7 @@
                $entityIdParser,
                LabelsProvider $labelsProvider,
                DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider,
+               AliasesProvider $aliasesProvider = null,
                UserLanguageLookup $userLanguageLookup,
                ContentLanguages $termsLanguages,
                LanguageNameLookup $languageNameLookup
diff --git a/view/tests/phpunit/EntityTermsViewTest.php 
b/view/tests/phpunit/EntityTermsViewTest.php
index f60bcf3..a3a8050 100644
--- a/view/tests/phpunit/EntityTermsViewTest.php
+++ b/view/tests/phpunit/EntityTermsViewTest.php
@@ -290,4 +290,32 @@
                $this->assertNotContains( '(wikibase-aliases-empty)', $html );
        }
 
+       public function 
testGetEntityTermsForLanguageListView_noAliasesProvider() {
+               $title = $this->getMock( Title::class );
+               $title->expects( $this->once() )
+                       ->method( 'getLocalURL' )
+                       ->will( $this->returnValue( '<LOCALURL>' ) );
+
+               $item = new Item(
+                       new ItemId( 'Q1' ),
+                       $this->getFingerprint()
+               );
+               $view = $this->getEntityTermsView( 0, 1 );
+               $html = $view->getEntityTermsForLanguageListView( $item, $item, 
null, array( 'en' ), $title );
+
+               $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-language)', $html );
+               $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-label)', $html );
+               $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-description)', $html );
+               $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-aliases)', $html );
+
+               $this->assertContains( 
'wikibase-entitytermsforlanguageview-en', $html );
+               $this->assertContains( '&lt;LOCALURL&gt;', $html );
+               $this->assertContains( '&lt;LANGUAGENAME-en&gt;', $html );
+               $this->assertContains( '&lt;LABEL&gt;', $html );
+               $this->assertContains( '&lt;DESCRIPTION&gt;', $html );
+               $this->assertNotContains( '&lt;ALIAS1&gt;', $html );
+               $this->assertNotContains( '&lt;ALIAS2&gt;', $html );
+               $this->assertNotContains( '&amp;', $html, 'no double escaping' 
);
+       }
+
 }
diff --git a/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php 
b/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
index f24cd32..38b8f76 100644
--- a/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
+++ b/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Term\AliasesProvider;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\Lib\MediaWikiContentLanguages;
 use Wikibase\Lib\UserLanguageLookup;
@@ -35,10 +36,11 @@
         * @param User $user
         * @param Item $item
         * @param ItemId $itemId
+        * @param AliasesProvider|null $aliasesProvider
         *
         * @return EntityViewPlaceholderExpander
         */
-       private function newExpander( User $user, Item $item, ItemId $itemId ) {
+       private function newExpander( User $user, Item $item, ItemId $itemId, 
AliasesProvider $aliasesProvider = null ) {
                $templateFactory = TemplateFactory::getDefaultInstance();
 
                $title = $this->getMockBuilder( Title::class )
@@ -69,14 +71,14 @@
                        $idParser,
                        $item,
                        $item,
-                       $item,
+                       $aliasesProvider,
                        $userLanguages,
                        new MediaWikiContentLanguages(),
                        $languageNameLookup
                );
        }
 
-       private function getItem() {
+       public function getEntity() {
                $item = new Item( new ItemId( 'Q23' ) );
 
                $item->setLabel( 'en', 'Moskow' );
@@ -84,7 +86,16 @@
 
                $item->setDescription( 'de', 'Hauptstadt Russlands' );
 
-               return $item;
+               return [
+                       [
+                               $item,
+                               $item
+                       ],
+                       [
+                               $item,
+                               null
+                       ]
+               ];
        }
 
        /**
@@ -106,17 +117,21 @@
                return $user;
        }
 
-       public function testGetHtmlForPlaceholder() {
-               $item = $this->getItem();
-               $expander = $this->newExpander( $this->newUser(), $item, 
$item->getId() );
+       /**
+        * @dataProvider getEntity
+        */
+       public function testGetHtmlForPlaceholder( Item $item, AliasesProvider 
$aliasesProvider = null ) {
+               $expander = $this->newExpander( $this->newUser(), $item, 
$item->getId(), $aliasesProvider );
 
                $html = $expander->getHtmlForPlaceholder( 'termbox', 'Q23' );
                $this->assertInternalType( 'string', $html );
        }
 
-       public function testRenderTermBox() {
-               $item = $this->getItem();
-               $expander = $this->newExpander( $this->newUser(), $item, 
$item->getId() );
+       /**
+        * @dataProvider getEntity
+        */
+       public function testRenderTermBox( Item $item, AliasesProvider 
$aliasesProvider = null ) {
+               $expander = $this->newExpander( $this->newUser(), $item, 
$item->getId(), $aliasesProvider );
 
                // According to the mock objects, this should generate a term 
box for
                // 'de' and 'ru', since 'en' is already covered by the 
interface language.
@@ -132,14 +147,16 @@
                $this->assertContains( 
'wikibase-entitytermsforlanguageview-ru', $html );
        }
 
-       public function testGetExtraUserLanguages() {
-               $item = $this->getItem();
+       /**
+        * @dataProvider getEntity
+        */
+       public function testGetExtraUserLanguage( Item $item, AliasesProvider 
$aliasesProvider = null ) {
                $itemId = $item->getId();
 
-               $expander = $this->newExpander( $this->newUser( true ), $item, 
$itemId );
+               $expander = $this->newExpander( $this->newUser( true ), $item, 
$itemId, $aliasesProvider );
                $this->assertArrayEquals( array(), 
$expander->getExtraUserLanguages() );
 
-               $expander = $this->newExpander( $this->newUser(), $item, 
$itemId );
+               $expander = $this->newExpander( $this->newUser(), $item, 
$itemId, $aliasesProvider );
                $this->assertArrayEquals( array( 'de', 'ru' ), 
$expander->getExtraUserLanguages() );
        }
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icd3f20aba399f82e810f6655e98ff077fd57cb04
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <[email protected]>

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

Reply via email to