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