/**
* Validates an object
*
* @param stdClass $element object properties
* @param AbstractSpecObject $schema schema this object generated of api specification
*/
protected function checkObject($element, $schema)
{
if (isset($schema->sample)) {
$this->checkSample($element, $schema->sample);
return;
}
if (isset($schema->discriminator)) {
$discriminator = $schema->discriminator;
if (!property_exists($element, $discriminator)) {
$propName = $schema->getObjectName();
if (isset(static::$ignoreDiscriminatorValues[$propName]) && $discriminator == static::$ignoreDiscriminatorValues[$propName]) {
ApiTest::markTestIncomplete(sprintf('%s unexpected discriminator value', $discriminator));
} else {
$this->appendError($discriminator, ' unexpected discriminator value');
}
return;
}
$schema = $this->getConcreteTypes($schema, $element->{$discriminator});
if (!$schema) {
$this->appendError($element->{$discriminator}, ' unexpected concrete type value');
}
unset($schema->discriminator);
$this->check($element, $schema);
return;
}
$properties = $schema instanceof ApiEntity ? $schema->getProperties() : (array) $schema;
foreach ($element as $p => $value) {
if (isset($properties[$p])) {
$this->check($value, $properties[$p]);
} else {
$this->appendError($p, "this property don't exist in Api specifications");
}
}
return;
}