Skip to content

Commit 6b60816

Browse files
jenkins-botGerrit Code Review
authored andcommitted
Merge "REST: Add SiteLinksReadModelConverter"
2 parents 6986666 + e3f3f9c commit 6b60816

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php declare( strict_types=1 );
2+
3+
namespace Wikibase\Repo\RestApi\Infrastructure;
4+
5+
use SiteLookup;
6+
use Wikibase\DataModel\SiteLink;
7+
use Wikibase\DataModel\SiteLinkList;
8+
use Wikibase\Repo\RestApi\Domain\ReadModel\SiteLink as SiteLinkReadModel;
9+
use Wikibase\Repo\RestApi\Domain\ReadModel\SiteLinks;
10+
11+
/**
12+
* @license GPL-2.0-or-later
13+
*/
14+
class SiteLinksReadModelConverter {
15+
16+
private SiteLookup $siteLookup;
17+
18+
public function __construct( SiteLookup $siteLookup ) {
19+
$this->siteLookup = $siteLookup;
20+
}
21+
22+
public function convert( SiteLinkList $siteLinkList ): SiteLinks {
23+
return new SiteLinks(
24+
...array_map(
25+
fn( SiteLink $siteLink ) => new SiteLinkReadModel(
26+
$siteLink->getSiteId(),
27+
$siteLink->getPageName(),
28+
$siteLink->getBadges(),
29+
$this->buildUrl( $siteLink->getSiteId(), $siteLink->getPageName() )
30+
),
31+
array_values( $siteLinkList->toArray() )
32+
)
33+
);
34+
}
35+
36+
private function buildUrl( string $site, string $title ): string {
37+
$site = $this->siteLookup->getSite( $site );
38+
39+
return $site->getPageUrl( $title );
40+
}
41+
42+
}
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\Infrastructure;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Site;
7+
use SiteLookup;
8+
use Wikibase\DataModel\Entity\ItemId;
9+
use Wikibase\DataModel\SiteLink;
10+
use Wikibase\DataModel\SiteLinkList;
11+
use Wikibase\Repo\RestApi\Domain\ReadModel\SiteLink as SiteLinkReadModel;
12+
use Wikibase\Repo\RestApi\Infrastructure\SiteLinksReadModelConverter;
13+
14+
/**
15+
* @covers \Wikibase\Repo\RestApi\Infrastructure\SiteLinksReadModelConverter
16+
*
17+
* @group Wikibase
18+
*
19+
* @license GPL-2.0-or-later
20+
*/
21+
class SiteLinksReadModelConverterTest extends TestCase {
22+
23+
private const EN_WIKI_URL_PREFIX = 'https://en.wikipedia.org/wiki/';
24+
private const DE_WIKI_URL_PREFIX = 'https://de.wikipedia.org/wiki/';
25+
26+
public function testConvert(): void {
27+
$enSiteLink = new SiteLink( 'enwiki', 'potato' );
28+
$deSiteLink = new SiteLink( 'dewiki', 'Kartoffel', [ new ItemId( 'Q123' ) ] );
29+
30+
$readModel = $this->newConverter()->convert(
31+
new SiteLinkList( [ $enSiteLink, $deSiteLink ] )
32+
);
33+
34+
$this->assertEquals(
35+
new SiteLinkReadModel(
36+
$enSiteLink->getSiteId(),
37+
$enSiteLink->getPageName(),
38+
$enSiteLink->getBadges(),
39+
self::EN_WIKI_URL_PREFIX . $enSiteLink->getPageName()
40+
),
41+
$readModel[0]
42+
);
43+
$this->assertEquals(
44+
new SiteLinkReadModel(
45+
$deSiteLink->getSiteId(),
46+
$deSiteLink->getPageName(),
47+
$deSiteLink->getBadges(),
48+
self::DE_WIKI_URL_PREFIX . $deSiteLink->getPageName()
49+
),
50+
$readModel[1]
51+
);
52+
}
53+
54+
private function newConverter(): SiteLinksReadModelConverter {
55+
$enSite = new Site();
56+
$enSite->setLinkPath( self::EN_WIKI_URL_PREFIX . '$1' );
57+
$deSite = new Site();
58+
$deSite->setLinkPath( self::DE_WIKI_URL_PREFIX . '$1' );
59+
60+
$siteLookup = $this->createStub( SiteLookup::class );
61+
$siteLookup->method( 'getSite' )->willReturnMap( [
62+
[ 'enwiki', $enSite ],
63+
[ 'dewiki', $deSite ],
64+
] );
65+
66+
return new SiteLinksReadModelConverter( $siteLookup );
67+
}
68+
69+
}

0 commit comments

Comments
 (0)