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;
 }
 public function testGetAllWithAdditFilterWithWrongField()
 {
     $field = 'wrong_id_field_name';
     $additionalFilter = AdditionalFilter::createWithOutValidate($field, AdditionalFilter::TYPE_NUMERIC, 1);
     $requestData = (new ExtJSGetAllRequestCreator())->addAdditionalFilter($additionalFilter);
     $action = (new GetAllAction())->setRequestParams($requestData->asArray())->addResponseDataAsserterCallback(function ($responseData) use($field) {
         $this->assertResponseObjectForSuccess($responseData, false);
         $this->assertObjectHasAttribute('message', $responseData);
         $this->assertStringStartsWith("AdditionalFilter пытается фильтровать сущность", $responseData->message, 'Сообщение об ошибке не корректно');
     });
     $this->initAction($action);
     $action->run();
 }
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage Значение переданное в AdditionalFilter ('Somertset') должно являться числом, т.к. тип фильтра числовой (TYPE_NUMERIC)
  */
 public function testThrowExceptionWhenTypeIsNumericButValueIsString()
 {
     AdditionalFilter::create('some', AdditionalFilter::TYPE_NUMERIC, 'Somertset');
 }