コード例 #1
0
 /**
  * @dataProvider entityIdProvider
  */
 public function testGetGuid(EntityId $id)
 {
     $guidGen = new GuidGenerator();
     $this->assertIsGuidForId($guidGen->newGuid($id), $id);
     $this->assertIsGuidForId($guidGen->newGuid($id), $id);
     $this->assertIsGuidForId($guidGen->newGuid($id), $id);
 }
 public function invalidArgumentProvider()
 {
     $item = new Item(new ItemId('Q42'));
     $guidGenerator = new GuidGenerator();
     $validGuid = $guidGenerator->newGuid($item->getId());
     $validRank = 1;
     $args = array();
     $args[] = array(123, $validRank);
     $args[] = array($validGuid, ':-)');
     return $args;
 }
コード例 #3
0
 public function invalidArgumentProvider()
 {
     $item = new Item(new ItemId('Q42'));
     $guidGenerator = new GuidGenerator();
     $validClaimGuid = $guidGenerator->newGuid($item->getId());
     $validSnak = new PropertyValueSnak(7201010, new StringValue('o_O'));
     $validSnakHash = $validSnak->getHash();
     $args = array();
     $args[] = array(123, $validSnak, $validSnakHash);
     $args[] = array('', $validSnak, $validSnakHash);
     $args[] = array($validClaimGuid, $validSnak, 123);
     return $args;
 }
コード例 #4
0
 public function invalidArgumentProvider()
 {
     $item = new Item(new ItemId('Q42'));
     $guidGenerator = new GuidGenerator();
     $validClaimGuid = $guidGenerator->newGuid($item->getId());
     $snaks = new SnakList();
     $snaks[] = new PropertyValueSnak(7201010, new StringValue('o_O'));
     $validReference = new Reference($snaks);
     $validReferenceHash = $validReference->getHash();
     $args = array();
     $args[] = array(123, $validReference, $validReferenceHash);
     $args[] = array('', $validReference, $validReferenceHash);
     $args[] = array($validClaimGuid, $validReference, 123);
     $args[] = array($validClaimGuid, $validReference, $validReferenceHash, 'string');
     return $args;
 }
コード例 #5
0
 /**
  * @param Item $item
  *
  * @return Item
  */
 private function addStatementsAndSave(Item $item)
 {
     $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
     $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_NEW);
     if (!isset(self::$propertyId)) {
         self::$propertyId = $this->getNewProperty('string')->getId();
     }
     /** @var Statement[] $statements */
     $statements = array(new Statement(new PropertyNoValueSnak(self::$propertyId)), new Statement(new PropertyNoValueSnak(self::$propertyId)), new Statement(new PropertySomeValueSnak(self::$propertyId)), new Statement(new PropertyValueSnak(self::$propertyId, new StringValue('o_O'))));
     foreach ($statements as $statement) {
         $guidGenerator = new GuidGenerator();
         $statement->setGuid($guidGenerator->newGuid($item->getId()));
         $item->getStatements()->addStatement($statement);
     }
     $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_UPDATE);
     return $item;
 }
コード例 #6
0
 public function testRequests()
 {
     $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
     foreach ($this->statementProvider() as $statement) {
         $item = new Item();
         $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_NEW);
         $guidGenerator = new GuidGenerator();
         $statement->setGuid($guidGenerator->newGuid($item->getId()));
         $item->getStatements()->addStatement($statement);
         $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_UPDATE);
         $this->assertInternalType('string', $statement->getGuid());
         $qualifiers = $statement->getQualifiers();
         if (count($qualifiers) === 0) {
             $this->makeInvalidRequest($statement->getGuid(), array('~=[,,_,,]:3'), 'no-such-qualifier');
         } else {
             $hashes = array_map(function (Snak $qualifier) {
                 return $qualifier->getHash();
             }, iterator_to_array($qualifiers));
             $this->makeValidRequest($statement->getGuid(), $hashes);
         }
     }
 }
コード例 #7
0
 /**
  * @see ChangeOp::apply
  *
  * @param Entity $entity
  * @param Summary|null $summary
  *
  * @throws ChangeOpException
  */
 public function apply(Entity $entity, Summary $summary = null)
 {
     if ($this->statement->getGuid() === null) {
         $this->statement->setGuid($this->guidGenerator->newGuid($entity->getId()));
     }
     $guid = $this->guidParser->parse($this->statement->getGuid());
     if ($this->guidValidator->validate($guid->getSerialization()) === false) {
         throw new ChangeOpException("Claim does not have a valid GUID");
     } elseif (!$entity->getId()->equals($guid->getEntityId())) {
         throw new ChangeOpException("Claim GUID invalid for given entity");
     }
     $this->applyClaimToEntity($entity, $summary);
 }
コード例 #8
0
 /**
  * @see ChangeOp::apply
  *
  * @param EntityDocument $entity
  * @param Summary|null $summary
  *
  * @throws ChangeOpException
  */
 public function apply(EntityDocument $entity, Summary $summary = null)
 {
     if (!$entity instanceof StatementListHolder) {
         throw new InvalidArgumentException('$entity must be a StatementListHolder');
     }
     if ($this->statement->getGuid() === null) {
         $this->statement->setGuid($this->guidGenerator->newGuid($entity->getId()));
     }
     $guid = $this->guidParser->parse($this->statement->getGuid());
     if ($this->guidValidator->validate($guid->getSerialization()) === false) {
         throw new ChangeOpException("Claim does not have a valid GUID");
     } elseif (!$entity->getId()->equals($guid->getEntityId())) {
         throw new ChangeOpException("Claim GUID invalid for given entity");
     }
     $this->applyStatementToEntity($entity, $summary);
 }
コード例 #9
0
 public function validateProvider()
 {
     $p11 = new PropertyId('P11');
     $q17 = new ItemId('Q17');
     //NOTE: the mock validator will consider the string "INVALID" to be invalid.
     $goodSnak = new PropertyValueSnak($p11, new StringValue('good'));
     $badSnak = new PropertyValueSnak($p11, new StringValue('INVALID'));
     $brokenSnak = new PropertyValueSnak($p11, new NumberValue(23));
     $guidGenerator = new GuidGenerator();
     $cases = array();
     $statement = new Statement($badSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $cases['invalid value in main snak'] = array($q17, $statement);
     $statement = new Statement($brokenSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $cases['mismatching value in main snak'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setQualifiers(new SnakList(array($badSnak)));
     $cases['bad snak in qualifiers'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setQualifiers(new SnakList(array($brokenSnak)));
     $cases['mismatching value in qualifier'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $reference = new Reference(new SnakList(array($badSnak)));
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setReferences(new ReferenceList(array($reference)));
     $cases['bad snak in reference'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $reference = new Reference(new SnakList(array($badSnak)));
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setReferences(new ReferenceList(array($reference)));
     $cases['mismatching value in reference'] = array($q17, $statement);
     return $cases;
 }
コード例 #10
0
 protected function getTestItem()
 {
     static $item = null;
     if (!$item) {
         $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
         $newItem = new Item();
         $store->saveEntity($newItem, '', $GLOBALS['wgUser'], EDIT_NEW);
         $prop = Property::newFromType('string');
         $propId = $this->makeProperty($prop)->getId();
         $snak = new PropertyValueSnak($propId, new StringValue('^_^'));
         $guidGenerator = new GuidGenerator();
         $guid = $guidGenerator->newGuid($newItem->getId());
         $newItem->getStatements()->addNewStatement($snak, null, null, $guid);
         $store->saveEntity($newItem, '', $GLOBALS['wgUser'], EDIT_UPDATE);
         $item = $newItem;
     }
     return $item;
 }
コード例 #11
0
 public function validateProvider()
 {
     $p11 = new PropertyId('P11');
     $q17 = new ItemId('Q17');
     //NOTE: the mock validator will consider the string "INVALID" to be invalid.
     $badSnak = new PropertyValueSnak($p11, new StringValue('INVALID'));
     $brokenSnak = new PropertyValueSnak($p11, new NumberValue(23));
     $guidGenerator = new GuidGenerator();
     $cases = array();
     $guid = $guidGenerator->newGuid($q17);
     $cases['bad snak value'] = array($q17, $guid, $badSnak);
     $guid = $guidGenerator->newGuid($q17);
     $cases['broken snak'] = array($q17, $guid, $brokenSnak);
     return $cases;
 }
コード例 #12
0
 private function newStatement(PropertyId $propertyId, DataValue $dataValue = null)
 {
     $guidGenerator = new GuidGenerator();
     if ($dataValue === null) {
         $snak = new PropertySomeValueSnak($propertyId);
     } else {
         $snak = new PropertyValueSnak($propertyId, $dataValue);
     }
     $guid = $guidGenerator->newGuid(new ItemId('Q64'));
     return new Statement($snak, null, null, $guid);
 }
コード例 #13
0
 public function testBadPropertyError()
 {
     $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
     $property = Property::newFromType('quantity');
     $property = $store->saveEntity($property, '', $GLOBALS['wgUser'], EDIT_NEW)->getEntity();
     $item = new Item();
     /** @var Item $item */
     $item = $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_NEW)->getEntity();
     $guidGenerator = new GuidGenerator();
     $statement = new Statement(new PropertyNoValueSnak($property->getId()));
     $statement->setGuid($guidGenerator->newGuid($item->getId()));
     $item->getStatements()->addStatement($statement);
     $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_UPDATE);
     // try to change the main snak's property
     $badProperty = Property::newFromType('string');
     $badProperty = $store->saveEntity($badProperty, '', $GLOBALS['wgUser'], EDIT_NEW)->getEntity();
     $badSerialization = array('id' => $statement->getGuid(), 'mainsnak' => array('snaktype' => 'novalue', 'property' => $badProperty->getId()->getSerialization()), 'type' => 'statement', 'rank' => 'normal');
     $params = array('action' => 'wbsetclaim', 'claim' => FormatJson::encode($badSerialization));
     try {
         $this->doApiRequestWithToken($params);
         $this->fail('Changed main snak property did not raise an error');
     } catch (UsageException $e) {
         $this->assertEquals('modification-failed', $e->getCodeString(), 'Changed main snak property');
     }
 }