protected function setUp() { parent::setUp(); if (!defined('WB_VERSION')) { $this->markTestSkipped("Skipping because WikibaseClient does not have '\n\t\t\t\t. 'a local site link table."); } $this->tablesUsed[] = 'wb_items_per_site'; $siteLinkTable = new SiteLinkTable('wb_items_per_site', false); $siteLinks = new SiteLinkList(array(new SiteLink('dewiki', 'Katze'), new SiteLink('enwiki', 'Kitten'), new SiteLink('eswiki', 'Gato'))); $item = new Item(new ItemId('Q9'), null, $siteLinks); $siteLinkTable->saveLinksOfItem($item); }
public function testUpdateLinksOfItem() { // save initial links $item = new Item(new ItemId('Q177')); $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Foo'); $item->getSiteLinkList()->addNewSiteLink('dewiki', 'Bar'); $item->getSiteLinkList()->addNewSiteLink('svwiki', 'Börk'); $this->siteLinkTable->saveLinksOfItem($item); // modify links, and save again $item->getSiteLinkList()->removeLinkWithSiteId('enwiki'); $item->getSiteLinkList()->addNewSiteLink('enwiki', 'F**K'); $item->getSiteLinkList()->removeLinkWithSiteId('dewiki'); $item->getSiteLinkList()->addNewSiteLink('nlwiki', 'GrooK'); $this->siteLinkTable->saveLinksOfItem($item); // check that the update worked correctly $actualLinks = $this->siteLinkTable->getSiteLinksForItem($item->getId()); $expectedLinks = $item->getSiteLinkList()->toArray(); $missingLinks = array_udiff($expectedLinks, $actualLinks, array($this->siteLinkTable, 'compareSiteLinks')); $extraLinks = array_udiff($actualLinks, $expectedLinks, array($this->siteLinkTable, 'compareSiteLinks')); $this->assertEmpty($missingLinks, 'Missing links'); $this->assertEmpty($extraLinks, 'Extra links'); }
/** * Rebuilds EntityPerPageTable for specified pages * * @param ItemId[] $itemIds * * @return int */ private function rebuildSiteLinks(array $itemIds) { $this->entityPrefetcher->prefetch($itemIds); $c = 0; foreach ($itemIds as $itemId) { if (!$itemId instanceof ItemId) { // Just in case someone is using a EntityIdPager which doesn't filter non-Items continue; } $item = $this->entityLookup->getEntity($itemId); if (!$item) { continue; } $ok = $this->siteLinkTable->saveLinksOfItem($item); if (!$ok) { $this->report('Saving sitelinks for Item ' . $item->getId()->getSerialization() . ' failed'); } $c++; } // Wait for the slaves, just in case we e.g. hit a range of ids which need a lot of writes. wfWaitForSlaves(); return $c; }