public function itemProvider() { $emptyItem = new Item(new ItemId('Q1')); $item = new Item(new ItemId('Q11')); $item->setDescription('en', 'ohi there'); $item->setLabel('de', 'o_O'); $item->setAliases('nl', array('foo', 'bar')); $item2 = new Item(new ItemId('Q12')); $item2->setLabel('de', 'o_O'); $item2->setLabel('en', 'O_o'); $item2->setAliases('nl', array('daaaah')); $redirect = new EntityRedirect(new ItemId('Q11'), new ItemId('Q21')); $redirect2 = new EntityRedirect(new ItemId('Q11'), new ItemId('Q22')); $insTags = array('has <td>label / de</td>' => array('tag' => 'td', 'content' => 'label / de'), 'has <ins>foo</ins>' => array('tag' => 'ins', 'content' => 'foo'), 'has <td>aliases / nl / 0</td>' => array('tag' => 'td', 'content' => 'aliases / nl / 0'), 'has <ins>bar</ins>' => array('tag' => 'ins', 'content' => 'bar'), 'has <td>description / en</td>' => array('tag' => 'td', 'content' => 'description / en'), 'has <ins>ohi there</ins>' => array('tag' => 'ins', 'content' => 'ohi there')); $delTags = array('has <td>label / de</td>' => array('tag' => 'td', 'content' => 'label / de'), 'has <del>foo</del>' => array('tag' => 'del', 'content' => 'foo'), 'has <td>aliases / nl / 0</td>' => array('tag' => 'td', 'content' => 'aliases / nl / 0'), 'has <del>bar</del>' => array('tag' => 'del', 'content' => 'bar'), 'has <td>description / en</td>' => array('tag' => 'td', 'content' => 'description / en'), 'has <del>ohi there</del>' => array('tag' => 'del', 'content' => 'ohi there')); $changeTags = array('has <td>label / en</td>' => array('tag' => 'td', 'content' => 'label / en'), 'has <ins>O_o</ins>' => array('tag' => 'ins', 'content' => 'O_o'), 'has <td>aliases / nl / 0</td>' => array('tag' => 'td', 'content' => 'aliases / nl / 0'), 'has <ins>daaaah</ins>' => array('tag' => 'ins', 'content' => 'daaaah'), 'has <td>aliases / nl / 1</td>' => array('tag' => 'td', 'content' => 'aliases / nl / 1'), 'has <del>foo</del>' => array('tag' => 'del', 'content' => 'foo'), 'has <td>aliases / nl / 2</td>' => array('tag' => 'td', 'content' => 'aliases / nl / 2'), 'has <del>bar</del>' => array('tag' => 'del', 'content' => 'bar'), 'has <td>description / en</td>' => array('tag' => 'td', 'content' => 'description / en'), 'has <del>ohi there</del>' => array('tag' => 'del', 'content' => 'ohi there')); $fromRedirTags = array('has <td>label / de</td>' => array('tag' => 'td', 'content' => 'label / de'), 'has <ins>foo</ins>' => array('tag' => 'ins', 'content' => 'foo'), 'has <td>redirect</td>' => array('tag' => 'td', 'content' => 'redirect'), 'has <del>Q21</del>' => array('tag' => 'del', 'content' => 'Q21')); $toRedirTags = array('has <td>label / de</td>' => array('tag' => 'td', 'content' => 'label / de'), 'has <del>foo</del>' => array('tag' => 'del', 'content' => 'foo'), 'has <td>redirect</td>' => array('tag' => 'td', 'content' => 'redirect'), 'has <ins>Q21</ins>' => array('tag' => 'ins', 'content' => 'Q21')); $changeRedirTags = array('has <td>redirect</td>' => array('tag' => 'td', 'content' => 'redirect'), 'has <del>Q21</del>' => array('tag' => 'del', 'content' => 'Q21'), 'has <ins>Q22</del>' => array('tag' => 'ins', 'content' => 'Q22')); $empty = ItemContent::newFromItem($emptyItem); $itemContent = ItemContent::newFromItem($item); $itemContent2 = ItemContent::newFromItem($item2); $redirectContent = ItemContent::newFromRedirect($redirect, Title::newFromText($redirect->getEntityId()->getSerialization())); $redirectContent2 = ItemContent::newFromRedirect($redirect2, Title::newFromText($redirect2->getEntityId()->getSerialization())); return array('empty' => array($empty, $empty, array('empty' => '/^$/')), 'same' => array($itemContent, $itemContent, array('empty' => '/^$/')), 'from emtpy' => array($empty, $itemContent, $insTags), 'to empty' => array($itemContent, $empty, $delTags), 'changed' => array($itemContent, $itemContent2, $changeTags), 'to redirect' => array($itemContent, $redirectContent, $toRedirTags), 'from redirect' => array($redirectContent, $itemContent, $fromRedirTags), 'redirect changed' => array($redirectContent, $redirectContent2, $changeRedirTags)); }
private function getBadgeItem() { $item = new Item(new ItemId('Q17')); $item->setLabel('de', 'exzellent'); $item->setLabel('en', 'featured'); return $item; }
/** * @return EntityRevisionLookup */ private function getEntityRevisionLookup() { $repo = new MockRepository(); $offsets = array('Q1' => 1100, 'Q2' => 1200); foreach ($offsets as $qid => $offset) { // entity 1, revision 1111 $entity1 = new Item(new ItemId($qid)); $entity1->setLabel('en', 'ORIGINAL'); $entity1->getSiteLinkList()->addNewSiteLink('enwiki', 'Original'); $repo->putEntity($entity1, $offset + 11); // entity 1, revision 1112 $entity1->setLabel('de', 'HINZUGEFÜGT'); $repo->putEntity($entity1, $offset + 12); // entity 1, revision 1113 $entity1->setLabel('nl', 'Addiert'); $repo->putEntity($entity1, $offset + 13); // entity 1, revision 1114 $entity1->getSiteLinkList()->addNewSiteLink('dewiki', 'Testen'); $repo->putEntity($entity1, $offset + 14); // entity 1, revision 1117 $entity1->getSiteLinkList()->setSiteLink(new SiteLink('enwiki', 'Spam', array(new ItemId('Q12345')))); $repo->putEntity($entity1, $offset + 17); // entity 1, revision 1118 $entity1->getSiteLinkList()->setSiteLink(new SiteLink('enwiki', 'Spam', array(new ItemId('Q54321')))); $repo->putEntity($entity1, $offset + 18); } return $repo; }
private function setUpEntities() { global $wgUser; static $setup = false; if ($setup) { return; } $setup = true; $store = WikibaseRepo::getDefaultInstance()->getStore()->getEntityStore(); // remove entities we care about $idsToDelete = array(new ItemId('Q404'), new ItemId('Q23'), new PropertyId('P404')); foreach ($idsToDelete as $id) { try { $store->deleteEntity($id, 'test', $wgUser); } catch (StorageException $ex) { // ignore } } // Set up Q23 $item = new Item(new ItemId('Q23')); $item->getFingerprint()->setLabel('en', 'George Washington'); // Set up P42 $property = new Property(new PropertyId('P42'), null, 'string'); $store->saveEntity($item, 'testing', $wgUser, EDIT_NEW); $store->saveEntity($property, 'testing', $wgUser, EDIT_NEW); }
/** * @dataProvider termProvider */ public function testRebuildSearchKey($languageCode, $termText, $searchText, $matches) { /* @var TermSqlIndex $termCache */ $termCache = WikibaseRepo::getDefaultInstance()->getStore()->getTermIndex(); // make term in item $item = new Item(new ItemId('Q42')); $item->setLabel($languageCode, $termText); // save term $termCache->clear(); $termCache->saveTermsOfEntity($item); // remove search key $dbw = wfGetDB(DB_MASTER); $dbw->update($termCache->getTableName(), array('term_search_key' => ''), array(), __METHOD__); // rebuild search key $builder = new TermSearchKeyBuilder($termCache); $builder->setRebuildAll(true); $builder->rebuildSearchKey(); // remove search key $term = new TermIndexEntry(); $term->setLanguage($languageCode); $term->setText($searchText); $options = array('caseSensitive' => false); $obtainedTerms = $termCache->getMatchingTerms(array($term), TermIndexEntry::TYPE_LABEL, Item::ENTITY_TYPE, $options); $this->assertEquals($matches ? 1 : 0, count($obtainedTerms)); if ($matches) { $obtainedTerm = array_shift($obtainedTerms); $this->assertEquals($termText, $obtainedTerm->getText()); } }
public function entityProvider() { $empty = new Item(new ItemId('Q1')); $simple = new Item(new ItemId('Q1')); $simple->setLabel('en', 'Test'); return array('Property' => array(Property::newFromType('string'), null), 'empty' => array($empty, null), 'empty json' => array($empty, CONTENT_FORMAT_JSON), 'simple' => array($simple, null), 'simple json' => array($simple, CONTENT_FORMAT_JSON), 'simple php' => array($simple, CONTENT_FORMAT_SERIALIZED)); }
/** * @dataProvider itemProvider */ public function testGivenEmptyDiffItemRemainsUnchanged(Item $item) { $patcher = new EntityPatcher(); $patchedEntity = $item->copy(); $patcher->patchEntity($patchedEntity, new ItemDiff()); $this->assertEquals($item, $patchedEntity); }
/** * @return EntityRevision[] */ public static function getEntityRevisions() { $item = new Item(new ItemId('Q42')); $item->setLabel('en', 'Raarrr!'); $itemRev = new EntityRevision($item, 4242, '20131211100908'); return array($itemRev); }
/** * @return EntityDocument[] */ protected function getKnownEntities() { $q1 = new Item(new ItemId('Q1')); $q1->setLabel('en', 'label:Q1/en'); $q1->setLabel('de', 'label:Q1/de'); $q1->setDescription('en', 'description:Q1/en'); $q1->setDescription('de', 'description:Q1/de'); $q1->setAliases('en', array('alias:Q1/en#1')); $q1->setAliases('de', array('alias:Q1/de#1', 'alias:Q1/de#2')); $q2 = new Item(new ItemId('Q2')); $q2->setLabel('en', 'label:Q2/en'); $q2->setLabel('de', 'label:Q2/de'); $q2->setAliases('en', array('alias:Q2/en#1')); $q2->setAliases('de', array('alias:Q2/de#1', 'alias:Q2/de#2')); $p2 = Property::newFromType('string'); $p2->setId(new PropertyId('P2')); $p2->setLabel('en', 'label:P2/en'); $p2->setLabel('de', 'label:P2/de'); $p2->setDescription('en', 'description:P2/en'); $p2->setDescription('de', 'description:P2/de'); $p2->setAliases('en', array('alias:P2/en#1')); $p2->setAliases('de', array('alias:P2/de#1', 'alias:P2/de#2')); $p3 = Property::newFromType('string'); $p3->setId(new PropertyId('P3')); $p3->setLabel('en', 'label:P3/en'); $p3->setLabel('de', 'label:P3/de'); $p3->setDescription('en', 'description:P3/en'); $p3->setDescription('de', 'description:P3/de'); return array($q1, $q2, $p2, $p3); }
/** * @param EntityId|Item|Property $target * * @throws UnexpectedValueException * @return EntityId|SiteLink * * @todo Fix duplicated code */ private function getEntityIdentifierFromTarget($target) { if ($target instanceof Item || $target instanceof Property) { return $target->getId(); } else { return $target; } }
/** * Get a SiteLink for a specific item and site * * @param Item $item * @param string $globalId * * @return SiteLink|null */ private function getSiteLink($item, $globalId) { try { return $item->getSiteLinkList()->getBySiteId($globalId); } catch (OutOfBoundsException $e) { return null; } }
protected function makeEntity(EntityId $id, array $statements = array()) { $item = new Item($id); $item->setLabel('en', "label:{$id}"); $item->setDescription('en', "description:{$id}"); $item->setStatements(new StatementList($statements)); return $item; }
/** * @param Item $item * * @return string */ public function generate(Item $item) { $fingerprintGenerator = new FingerprintSearchTextGenerator(); $text = $fingerprintGenerator->generate($item->getFingerprint()); foreach ($item->getSiteLinkList()->toArray() as $siteLink) { $text .= "\n" . $siteLink->getPageName(); } return trim($text, "\n"); }
public function testGivenUntrimmedPageName_generateDoesNotTrim() { $item = new Item(); $item->getFingerprint()->setLabel('en', ' untrimmed label '); $item->getSiteLinkList()->addNewSiteLink('enwiki', ' untrimmed pageName '); $generator = new ItemSearchTextGenerator(); $text = $generator->generate($item); $this->assertSame(" untrimmed label \n untrimmed pageName ", $text); }
private function addStatements(Item $item) { $statement = new Statement(new PropertyValueSnak(42, new StringValue('kittens'))); $statement->setGuid('first guid'); $item->getStatements()->addStatement($statement); $statement = new Statement(new PropertyNoValueSnak(23)); $statement->setGuid('second guid'); $item->getStatements()->addStatement($statement); }
public function testGivenKnownItemId_itemLabelIsReturned() { $item = new Item(new ItemId('Q1337')); $item->getFingerprint()->setAliasGroup('en', ['foo', 'bar', 'baz']); $this->testEnvironment->insertItem($item); $client = $this->createClient(); $client->request('GET', '/items/Q1337/aliases'); $this->assertSuccessResponse(['foo', 'bar', 'baz'], $client->getResponse()); }
public function testPatchesLabels() { $item = new Item(); $item->getFingerprint()->setLabel('en', 'foo'); $item->getFingerprint()->setLabel('de', 'bar'); $patch = new ItemDiff(array('label' => new Diff(array('en' => new DiffOpChange('foo', 'spam'), 'nl' => new DiffOpAdd('baz'))))); $patchedItem = $this->getPatchedItem($item, $patch); $this->assertSame(array('en' => 'spam', 'de' => 'bar', 'nl' => 'baz'), $patchedItem->getFingerprint()->getLabels()->toTextArray()); }
private function fingerprintCaseToEntityCase(array $fingerprintCase, ItemId $id) { $fingerprint = reset($fingerprintCase); $item = new Item($id); $item->setFingerprint($fingerprint); $entityCase = $fingerprintCase; $entityCase[0] = $item; return $entityCase; }
private function createEntity($label) { $entity = new Item(); $entity->setLabel('en', $label); $store = WikibaseRepo::getDefaultInstance()->getEntityStore(); $rev = $store->saveEntity($entity, 'GetEntitiesRedirectTest', $GLOBALS['wgUser'], EDIT_NEW); $id = $rev->getEntity()->getId(); return $id; }
public function testSuggestByItem() { $item = new Item(new ItemId('Q42')); $snak = new PropertySomeValueSnak(new PropertyId('P1')); $guid = 'claim0'; $item->getStatements()->addNewStatement($snak, null, null, $guid); $res = $this->suggester->suggestByItem($item, 100, 0.0, 'item'); $this->assertEquals(new PropertyId('p2'), $res[0]->getPropertyId()); $this->assertEquals(new PropertyId('p3'), $res[1]->getPropertyId()); }
public function testConstructionDiffContainsAddOperations() { $item = new Item(); $item->getFingerprint()->setLabel('en', 'foo'); $item->getSiteLinkList()->addNewSiteLink('bar', 'baz'); $differ = new ItemDiffer(); $diff = $differ->getConstructionDiff($item); $this->assertEquals(new Diff(array('en' => new DiffOpAdd('foo'))), $diff->getLabelsDiff()); $this->assertEquals(new Diff(array('bar' => new Diff(array('name' => new DiffOpAdd('baz'))))), $diff->getSiteLinkDiff()); }
public function testItemSerializerWithOptionObjectsForMaps() { $serializer = $this->buildSerializer(true); $item = new Item(); $item->addSiteLink(new SiteLink('enwiki', 'Nyan Cat')); $sitelinks = new \stdClass(); $sitelinks->enwiki = array('site' => 'enwiki', 'title' => 'Nyan Cat', 'badges' => array()); $serial = array('type' => 'item', 'labels' => array(), 'descriptions' => array(), 'aliases' => array(), 'claims' => array(), 'sitelinks' => $sitelinks); $this->assertEquals($serial, $serializer->serialize($item)); }
public function getEntityProvider() { $q10 = new ItemId('Q10'); $q11 = new ItemId('Q11'); $item10 = new Item($q10); $item10->setLabel('en', 'ten'); $repo = new MockRepository(); $repo->putEntity($item10); return array('found' => array($repo, $q10, $q10), 'not found' => array($repo, $q11, null)); }
/** * @depends testGivenKnownItemId_itemIsReturned */ public function testDataIsOrderedByStatementId() { $item = new Item(new ItemId('Q1')); $item->getStatements()->addNewStatement(new PropertyValueSnak(new PropertyId('P1337'), new StringValue('kittens'))); $item->getStatements()->addNewStatement(new PropertyValueSnak(new PropertyId('P23'), new StringValue('cats'))); $item->getStatements()->addNewStatement(new PropertyValueSnak(new PropertyId('P42'), new StringValue('bunnies'))); $this->testEnvironment->insertItem($item); $client = $this->createClient(); $client->request('GET', '/items/Q1'); $this->assertSame(['P23', 'P42', 'P1337'], array_keys(json_decode($client->getResponse()->getContent(), true)['data'])); }
/** * @return EntityRevision[] */ protected function getTestRevisions() { $entities = array(); $item = new Item(new ItemId('Q42')); $entities[11] = new EntityRevision($item, 11, '20130101001100'); $item = new Item(new ItemId('Q42')); $item->setLabel('en', "Foo"); $entities[12] = new EntityRevision($item, 12, '20130101001200'); $prop = Property::newFromType("string"); $prop->setId(753); $entities[13] = new EntityRevision($prop, 13, '20130101001300'); return $entities; }
/** * @param EntityId $id * * @throws InvalidArgumentException * @return Item|Property */ protected function makeEntity(EntityId $id) { if ($id instanceof ItemId) { $entity = new Item($id); $entity->getSiteLinkList()->addNewSiteLink('test', 'Foo'); } elseif ($id instanceof PropertyId) { $entity = new Property($id, null, 'wibblywobbly'); } else { throw new InvalidArgumentException('Unsupported entity type ' . $id->getEntityType()); } $entity->setLabel('en', 'label:' . $id->getSerialization()); return $entity; }
/** * Creates a new item and returns its id. * * @return string */ private function createNewItem() { $item = new Item(); // add data and check if it is shown in the form $item->setLabel('de', 'foo'); $item->setDescription('de', 'foo'); $item->setAliases('de', array('foo')); // save the item $store = WikibaseRepo::getDefaultInstance()->getEntityStore(); $store->saveEntity($item, "testing", $GLOBALS['wgUser'], EDIT_NEW | EntityContent::EDIT_IGNORE_CONSTRAINTS); // return the id return $item->getId()->getSerialization(); }
/** * @param ItemId[] $links * * @return SiteLinkLookup */ private function getSiteLinkLookup(array $links) { $siteLinkLookup = new HashSiteLinkStore(); foreach ($links as $pageId => $itemId) { $pageName = self::PAGE_NAME_PREFIX . $pageId; $item = new Item($itemId); $item->getSiteLinkList()->addNewSiteLink('testwiki', $pageName); $item->getSiteLinkList()->addNewSiteLink('badwiki', $pageName); $item->getSiteLinkList()->addNewSiteLink('sadwiki', 'Other stuff'); $siteLinkLookup->saveLinksOfItem($item); } return $siteLinkLookup; }
public function testGetStatementFromEntity() { $helper = $this->getNewInstance(); $item = new Item(new ItemId('Q42')); $snak = new PropertyValueSnak(2754236, new StringValue('test')); $statement = new Statement($snak); $statement->setGuid('q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F'); $item->getStatements()->addStatement($statement); $guid = $statement->getGuid(); $this->assertEquals($statement, $helper->getStatementFromEntity($guid, $item)); $this->setExpectedException('\\UsageException'); $helper->getStatementFromEntity('q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0N', $item); }
private function getLinksInDiffFormat(Item $item) { $links = array(); /** * @var SiteLink $siteLink */ foreach ($item->getSiteLinkList() as $siteLink) { $links[$siteLink->getSiteId()] = array('name' => $siteLink->getPageName(), 'badges' => array_map(function (ItemId $id) { return $id->getSerialization(); }, $siteLink->getBadges())); } return $links; }