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());
 }
Beispiel #17
0
 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());
 }
Beispiel #21
0
 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);
 }
Beispiel #30
0
 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;
 }