Since: 5.11 (03.12.2015)
Author: Andrii Penchuk (a.penchuk@scalr.com)
Inheritance: extends AbstractSpecObject
Esempio n. 1
0
 /**
  * Assert and check unique filterable properties from requested url
  *
  * @param string       $url          Request uri
  * @param ListResponse $apiResp      Schema current object generated of api specification
  * @param string       $saveDataPath Save url for child endpoints
  */
 public function assertFilterableProperties($url, $apiResp, $saveDataPath = null)
 {
     $entity = $apiResp->getObjectEntity();
     $objectName = $entity->getObjectName();
     /* @var $objectFilters FilterRule[] */
     $objectFilters = [];
     foreach ($this->assertGetEndpoint($url, $apiResp, [], true, static::$maxResults) as $object) {
         //get list of filterable properties
         $filterable = $entity->filterable;
         //handle filters with singular make logic
         if (isset($this->filterPropertyMap[$objectName])) {
             $rules = $this->filterPropertyMap[$objectName];
             foreach ($rules as $rule) {
                 $filterRule = new FilterRule();
                 foreach ($rule as $property) {
                     //when there is only part of the required fields - filter should be discarded
                     if (!isset($object->{$property})) {
                         $filterRule = null;
                         break;
                     }
                     $filterRule[$property] = $object->{$property};
                 }
                 if (count($filterRule)) {
                     $objectFilters[] = $filterRule;
                 }
                 //remove the fields included in complex filter from the list of filterable fields
                 $filterable = array_diff($filterable, $rule);
             }
         }
         foreach ($filterable as $property) {
             if (isset($object->{$property}) && !static::isRecursivelyEmpty($object->{$property})) {
                 $value = $object->{$property};
                 if (is_array($value) && isset($this->simpleFilterRules[$objectName]) && in_array($property, $this->simpleFilterRules[$objectName])) {
                     foreach ($value as $entry) {
                         $objectFilters[] = new FilterRule([$property => $entry]);
                     }
                 } else {
                     $objectFilters[] = new FilterRule([$property => $value]);
                 }
             }
         }
         if (!is_null($saveDataPath)) {
             $saveUrl = empty($this->pathMap[$objectName]) ? $saveDataPath : preg_replace($this->pathMap[$objectName]['pattern'], $this->pathMap[$objectName]['replace'], $saveDataPath);
             $this->saveUrlData($saveUrl, $object, $objectName);
         }
     }
     if (!empty($objectFilters)) {
         $objectFilters = array_unique($objectFilters, SORT_STRING);
         foreach ($objectFilters as $filter) {
             $listResult = $this->assertGetEndpoint($url, $apiResp, $filter->getFilters(), true, static::$maxResults);
             $this->assertNotEmpty($listResult);
             foreach ($listResult as $filtered) {
                 foreach ($filter as $property => $filterValue) {
                     if (isset($this->propertyAssertMap[$property])) {
                         $assert = $this->propertyAssertMap[$property];
                         if (method_exists($this, $assert)) {
                             $this->{$assert}($filterValue, $filtered->{$property}, "Property '{$property}' mismatch");
                         } else {
                             $this->markTestIncomplete(sprintf('% assertion does not exist', $assert));
                         }
                     } else {
                         $this->assertEquals($filterValue, $filtered->{$property}, "Property '{$property}' mismatch");
                     }
                 }
             }
         }
     }
 }
Esempio n. 2
0
 /**
  * Check filterable property in object
  *
  * @param string                      $url     api url
  * @param DetailResponse|ListResponse $apiResp schema current object generated of api specification
  * @param stdClass                    $object  api object
  */
 public function assertFilterableProperty($url, $apiResp, $object)
 {
     $entity = $apiResp->getObjectEntity();
     $filterable = $entity->filterable;
     if (isset($this->filterPropertyMap[$entity->getObjectName()])) {
         $filter = [];
         foreach ($this->filterPropertyMap[$entity->getObjectName()] as $property) {
             $filter[$property] = $object->{$property};
             unset($filterable[$property]);
         }
         $this->assertGetEndpoint($url, $apiResp, $filter, false);
     } else {
         foreach ($filterable as $property) {
             if (isset($object->{$property}) && !static::isRecursivelyEmpty($object->{$property})) {
                 $this->assertGetEndpoint($url, $apiResp, [$property => $object->{$property}], false);
             }
         }
     }
 }