/** * The method ::getRows should invoke row filtering. */ public function testGetRows() { $fieldValues = [1, 3]; $fieldName = "field" . (string) rand(); $rows = []; // Make one row for each of the field values foreach ($fieldValues as $fieldValue) { $rows[] = RowBuilder::begin()->addWritable(new Field([], [], 'literal', 'A literal field', $fieldValue), $fieldName)->build(); } $filter = FilterBuilder::begin()->setId("myFilter")->setType(Filter::TYPE_STATIC)->setFieldName($fieldName)->setCondition(FilterStatement::COND_GREATER_THAN)->setCriterion(2)->build(); $table = TableBuilder::begin()->setId("t" . (string) rand())->addRows($rows)->addFilter($filter)->build(); $this->assertEquals(1, sizeof($table->getRows())); }
public function testForcePaginationFilterToSoftPagination() { // This pagination filter should be able to execute by query, so it should remain // a hard pagination filter. $filter1 = FilterBuilder::begin()->setId("Filter1")->setType(Filter::TYPE_PAGINATION)->build(); // This filter will force a row sort because the field name is not // available to the query. $filter2 = FilterBuilder::begin()->setNextFilter($filter1)->setId("Filter2")->setType(Filter::TYPE_STATIC)->setFieldName("TestClass.MadeUpFieldToForceRowSort")->setCondition(FilterStatement::COND_SORT_DESC)->build(); // This pagination filter will be forced to be done by rows, which means // that it should designate itself as a soft pagination filter. $filter3 = FilterBuilder::begin()->setNextFilter($filter2)->setId("Filter3")->setType(Filter::TYPE_PAGINATION)->build(); // use MockQuery from FilterStatementTest $filter3->queryFilter(new MockQueryWrapper($this->query)); $filter3->rowFilter([]); $this->assertEquals(PaginationFilter::TYPE_HARD_PAGINATION, $filter1->getType()); $this->assertEquals(PaginationFilter::TYPE_SOFT_PAGINATION, $filter3->getType()); }
public function testVisitSelectFilter() { $writer = new HTMLWriter(); $handle = (string) rand(); $optionNames = ["s" . (string) rand(), "s" . (string) rand(), "s" . (string) rand()]; $optionFieldNames = [(string) rand(), (string) rand(), (string) rand()]; $optionConditions = [FilterStatement::COND_GREATER_THAN, FilterStatement::COND_CONTAINS, FilterStatement::COND_LESS_THAN]; $optionValues = [rand(), rand(), rand()]; $defaultOption = 1; $filter = FilterBuilder::begin()->setType(Filter::TYPE_SELECT)->setId($handle)->addOptions([$optionNames[0] => [$optionFieldNames[0], $optionConditions[0], $optionValues[0]], $optionNames[1] => [$optionFieldNames[1], $optionConditions[1], $optionValues[1]]])->addOptions([$optionNames[2] => [$optionFieldNames[2], $optionConditions[2], $optionValues[2]]])->setDefault($optionNames[$defaultOption])->build(); $result = $this->stripQuotes($filter->accept($writer)); // Assert that the result contains the container for our filter controls $this->assertContains("class=select-container data-handle-for={$handle}", $result); // Assert that each of the option names is presented foreach ($optionNames as $name) { $this->assertContains($name, $result); } }