Skip to content

Commit 72f1fd4

Browse files
REST: Implement ItemAliasesRetriever
Bug: T330896 Change-Id: Ica45d44f0f8fa8ee2341f3cdbd29947066691b3e
1 parent b80ad32 commit 72f1fd4

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php declare( strict_types=1 );
2+
3+
namespace Wikibase\Repo\RestApi\DataAccess;
4+
5+
use Wikibase\DataAccess\PrefetchingTermLookup;
6+
use Wikibase\DataModel\Entity\ItemId;
7+
use Wikibase\DataModel\Term\TermTypes;
8+
use Wikibase\Lib\ContentLanguages;
9+
use Wikibase\Repo\RestApi\Domain\ReadModel\Aliases;
10+
use Wikibase\Repo\RestApi\Domain\ReadModel\AliasesInLanguage;
11+
use Wikibase\Repo\RestApi\Domain\Services\ItemAliasesRetriever;
12+
13+
/**
14+
* @license GPL-2.0-or-later
15+
*/
16+
class PrefetchingTermLookupAliasesRetriever implements ItemAliasesRetriever {
17+
18+
private PrefetchingTermLookup $prefetchingTermLookup;
19+
private ContentLanguages $termLanguages;
20+
21+
public function __construct( PrefetchingTermLookup $prefetchingTermLookup, ContentLanguages $termLanguages ) {
22+
$this->prefetchingTermLookup = $prefetchingTermLookup;
23+
$this->termLanguages = $termLanguages;
24+
}
25+
26+
public function getAliases( ItemId $itemId ): ?Aliases {
27+
$this->prefetchingTermLookup->prefetchTerms(
28+
[ $itemId ],
29+
[ TermTypes::TYPE_ALIAS ],
30+
$this->termLanguages->getLanguages()
31+
);
32+
33+
$aliases = new Aliases();
34+
35+
foreach ( $this->termLanguages->getLanguages() as $lang ) {
36+
$prefetchedAliases = $this->prefetchingTermLookup->getPrefetchedAliases( $itemId, $lang );
37+
38+
if ( $prefetchedAliases ) {
39+
$aliases[$lang] = new AliasesInLanguage( $lang, $prefetchedAliases );
40+
}
41+
}
42+
43+
return $aliases;
44+
}
45+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php declare( strict_types=1 );
2+
3+
namespace Wikibase\Repo\RestApi\Domain\Services;
4+
5+
use Wikibase\DataModel\Entity\ItemId;
6+
use Wikibase\Repo\RestApi\Domain\ReadModel\Aliases;
7+
8+
/**
9+
* @license GPL-2.0-or-later
10+
*/
11+
interface ItemAliasesRetriever {
12+
13+
public function getAliases( ItemId $itemId ): ?Aliases;
14+
15+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php declare( strict_types=1 );
2+
3+
namespace Wikibase\Repo\Tests\RestApi\DataAccess;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Wikibase\DataAccess\PrefetchingTermLookup;
7+
use Wikibase\DataAccess\Tests\FakePrefetchingTermLookup;
8+
use Wikibase\DataModel\Entity\ItemId;
9+
use Wikibase\Lib\StaticContentLanguages;
10+
use Wikibase\Repo\RestApi\DataAccess\PrefetchingTermLookupAliasesRetriever;
11+
use Wikibase\Repo\RestApi\Domain\ReadModel\Aliases;
12+
use Wikibase\Repo\RestApi\Domain\ReadModel\AliasesInLanguage;
13+
14+
/**
15+
* @covers \Wikibase\Repo\RestApi\DataAccess\PrefetchingTermLookupAliasesRetriever
16+
*
17+
* @group Wikibase
18+
*
19+
* @license GPL-2.0-or-later
20+
*/
21+
class PrefetchingTermLookupAliasesRetrieverTest extends TestCase {
22+
23+
private const ALL_TERM_LANGUAGES = [ 'de', 'en', 'ar' ];
24+
private const ITEM_ID = 'Q123';
25+
26+
public function testGetAliases(): void {
27+
$itemId = new ItemId( self::ITEM_ID );
28+
$fakePrefetchingTermLookup = new FakePrefetchingTermLookup();
29+
30+
$aliasesRetriever = new PrefetchingTermLookupAliasesRetriever(
31+
$fakePrefetchingTermLookup,
32+
new StaticContentLanguages( self::ALL_TERM_LANGUAGES )
33+
);
34+
35+
$aliases = $aliasesRetriever->getAliases( $itemId );
36+
37+
$aliasesReadModel = new Aliases(
38+
new AliasesInLanguage( 'de', [ 'Q123 de alias 1', 'Q123 de alias 2' ] ),
39+
new AliasesInLanguage( 'en', [ 'Q123 en alias 1', 'Q123 en alias 2' ] ),
40+
new AliasesInLanguage( 'ar', [ 'Q123 ar alias 1', 'Q123 ar alias 2' ] ),
41+
);
42+
43+
$this->assertEquals( $aliasesReadModel, $aliases );
44+
}
45+
46+
public function testGetAliasesForSpecificLanguages(): void {
47+
$itemId = new ItemId( self::ITEM_ID );
48+
$languages = [ 'en', 'de' ];
49+
50+
$prefetchingTermLookup = $this->createStub( PrefetchingTermLookup::class );
51+
$prefetchingTermLookup->method( 'getPrefetchedAliases' )
52+
->willReturnMap( [
53+
[ $itemId, 'en', [ 'Q123 en alias 1', 'Q123 en alias 2' ] ],
54+
[ $itemId, 'de', false ],
55+
] );
56+
57+
$aliasesRetriever = new PrefetchingTermLookupAliasesRetriever(
58+
$prefetchingTermLookup,
59+
new StaticContentLanguages( $languages )
60+
);
61+
62+
$aliases = $aliasesRetriever->getAliases( $itemId );
63+
64+
$this->assertCount( 1, $aliases );
65+
$this->assertArrayHasKey( 'en', $aliases );
66+
$this->assertArrayNotHasKey( 'de', $aliases );
67+
}
68+
69+
}

0 commit comments

Comments
 (0)