public function testAll()
 {
     $obj = new ExtJSGetAllRequestCreator();
     $obj->addFilter(new Filter("property", "1"));
     $obj->addSorter(new Sorter("propertyToSort"));
     $obj->addAdditionalFilter(AdditionalFilter::create("propertyOfAdditFilter", "string", "someString"));
     $obj->setLimit(5);
     $obj->setPage(2);
     $obj->setStart(2);
     $arr = $obj->asArray();
     $this->assertEquals(5, $arr['limit']);
     $this->assertEquals(2, $arr['page']);
     $this->assertEquals(2, $arr['start']);
     $additionalFilters = json_decode($arr['additional_filter']);
     $this->assertCount(1, $additionalFilters);
     $this->assertEquals("propertyOfAdditFilter", $additionalFilters[0]->field);
     $this->assertEquals("string", $additionalFilters[0]->type);
     $this->assertEquals("someString", $additionalFilters[0]->value);
     $sorts = json_decode($arr['sort']);
     $this->assertCount(1, $sorts);
     $this->assertEquals("propertyToSort", $sorts[0]->property);
     $filters = json_decode($arr['filter']);
     $this->assertCount(1, $filters);
     $this->assertEquals("property", $filters[0]->property);
     $this->assertEquals("1", $filters[0]->value);
 }
 /**
  * @param string $jsonString
  *
  * @return AdditionalFilter[]
  */
 public static function getAdditionalFiltersFromJSONString($jsonString)
 {
     return Helper::makeArrayOfObjectsFromJsonString($jsonString, ['value', 'field', 'type'], function ($rawObject) {
         $comparison = isset($rawObject->comparison) ? $rawObject->comparison : AdditionalFilter::CMP_EQ;
         /* Сделано из-за того, что при фильтрации по числам отправляются все три поля (gt, lt, eq) не зависимо от того, заполнены ли они все или нет */
         if ($rawObject->type == AdditionalFilter::TYPE_NUMERIC && is_string($rawObject->value) && strlen($rawObject->value) == 0) {
             return null;
         }
         return AdditionalFilter::create($rawObject->field, $rawObject->type, $rawObject->value, $comparison);
     }, 'AdditionalFilter');
 }
 private function createDataGathererForComparisonTest($valueForAdditionalFilter, $comparison)
 {
     $o = $this->createDataGatherer();
     $o->addSorters([new Sorter('id')]);
     $o->addAdditionalFilters([AdditionalFilter::create('id', AdditionalFilter::TYPE_NUMERIC, $valueForAdditionalFilter, $comparison)]);
     return $o;
 }
 /**
  * Тестирование фильтрации строк
  */
 protected function getAllWithAdditionalFilterString()
 {
     $qb = static::getEntityManager()->getRepository(self::$shortEntityName)->createQueryBuilder('z');
     $entity = $qb->select("z")->where($qb->expr()->neq("z.{$this->nameFieldName}", "''"))->setMaxResults(1)->getQuery()->getSingleResult();
     $entityNameFieldValue = $this->getEntityNameValue($entity);
     $additionalFilter = AdditionalFilter::create($this->nameFieldName, AdditionalFilter::TYPE_STRING, '');
     $requestData = (new ExtJSGetAllRequestCreator())->addAdditionalFilter($additionalFilter);
     $action = (new GetAllAction())->setRequestParams($requestData->asArray())->addResponseDataAsserterCallback(function ($responseData) use($entityNameFieldValue) {
         $this->assertResponseObjectForSuccess($responseData, true);
         foreach ($responseData->data as $row) {
             $this->assertTrue(strpos($row->{$this->nameFieldName}, $entityNameFieldValue) !== false);
         }
     });
     $this->initAction($action);
     $action->run();
 }
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage Значение переданное в AdditionalFilter ('Somertset') должно являться числом, т.к. тип фильтра числовой (TYPE_NUMERIC)
  */
 public function testThrowExceptionWhenTypeIsNumericButValueIsString()
 {
     AdditionalFilter::create('some', AdditionalFilter::TYPE_NUMERIC, 'Somertset');
 }