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