/** * @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; }
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; }
/** * @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); }
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; }
/** * @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); }
/** * @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; }
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); } } }
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; }
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; }
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; }
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); }
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'); } }