private function orderAndSearchMultiTest($withSearch = false, $searchableType = null)
{
$queryConfiguration = QueryConfigurationBuilder::create()->start(0)->length(4)->drawCall(1)->columnOrder('name', 'asc')->columnOrder('id', 'desc');
if ($withSearch) {
$queryConfiguration = $queryConfiguration->searchValue('blah');
if ($searchableType == Searchable::REGEX()) {
$queryConfiguration = $queryConfiguration->searchRegex(true);
}
}
$queryConfiguration = $queryConfiguration->build();
$columnConfiguration = [];
$columnConfiguration[] = ColumnConfigurationBuilder::create()->name('id')->searchable(Searchable::NONE())->build();
$columnConfiguration[] = ColumnConfigurationBuilder::create()->name('name')->searchable($searchableType)->build();
// Set up mock item
$queryBuilder = $this->setupMockQueryBuilder();
$queryBuilder->shouldReceive('skip')->with(0);
$queryBuilder->shouldReceive('limit')->with(4);
$queryBuilder->shouldReceive('count')->withNoArgs();
if ($withSearch) {
if ($searchableType == Searchable::REGEX()) {
$queryBuilder->shouldReceive('orWhere')->withArgs(["name", "REGEXP", "blah"])->once();
} elseif ($searchableType == Searchable::NORMAL()) {
$queryBuilder->shouldReceive('orWhere')->withArgs(["name", "LIKE", "%blah%"])->once();
}
}
$queryBuilder->shouldReceive('orderBy')->withArgs(["id", "desc"])->once();
$queryBuilder->shouldReceive('orderBy')->withArgs(["name", "asc"])->once();
$queryBuilder->shouldReceive('get')->withArgs([['id', 'name']])->once()->andReturn([]);
$provider = new QueryBuilderProvider($queryBuilder);
$provider->prepareForProcessing($queryConfiguration, $columnConfiguration);
$provider->process();
}