328 lines
8.7 KiB
PHP
328 lines
8.7 KiB
PHP
<?php
|
|
|
|
use Chumper\Datatable\Columns\FunctionColumn;
|
|
use Chumper\Datatable\Engines\CollectionEngine;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\Input;
|
|
use Orchestra\Testbench\TestCase;
|
|
use Illuminate\Support\Facades\Config;
|
|
|
|
class CollectionEngineTest extends TestCase {
|
|
|
|
/**
|
|
* @var CollectionEngine
|
|
*/
|
|
public $c;
|
|
|
|
/**
|
|
* @var \Mockery\Mock
|
|
*/
|
|
public $collection;
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $input;
|
|
|
|
protected function getEnvironmentSetUp($app)
|
|
{
|
|
$app['config']->set('chumper.datatable.engine', array(
|
|
'exactWordSearch' => false,
|
|
));
|
|
}
|
|
|
|
public function setUp()
|
|
{
|
|
|
|
parent::setUp();
|
|
|
|
$this->collection = Mockery::mock('Illuminate\Support\Collection');
|
|
$this->c = new CollectionEngine($this->collection);
|
|
}
|
|
|
|
public function testOrder()
|
|
{
|
|
$should = array(
|
|
array(
|
|
'id' => 'eoo'
|
|
),
|
|
array(
|
|
'id' => 'foo'
|
|
)
|
|
);
|
|
|
|
Input::replace(
|
|
array(
|
|
'iSortCol_0' => 0,
|
|
'sSortDir_0' => 'asc',
|
|
)
|
|
);
|
|
|
|
$engine = new CollectionEngine(new Collection($this->getTestArray()));
|
|
$engine->addColumn(new FunctionColumn('id', function($model){return $model['id'];}));
|
|
$engine->setAliasMapping();
|
|
$this->assertEquals($should, $engine->getArray());
|
|
|
|
Input::merge(
|
|
array(
|
|
'iSortCol_0' => 0,
|
|
'sSortDir_0' => 'desc'
|
|
)
|
|
);
|
|
|
|
$should2 = array(
|
|
array(
|
|
'id' => 'foo'
|
|
),
|
|
array(
|
|
'id' => 'eoo'
|
|
)
|
|
);
|
|
|
|
$this->assertEquals($should2, $engine->getArray());
|
|
|
|
}
|
|
|
|
public function testSearch()
|
|
{
|
|
// Facade expection
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 'eoo'
|
|
)
|
|
);
|
|
|
|
$engine = new CollectionEngine(new Collection($this->getTestArray()));
|
|
$engine->addColumn($this->getTestColumns());
|
|
$engine->searchColumns('id');
|
|
$engine->setAliasMapping();
|
|
|
|
$should = '{"aaData":[{"id":"eoo"}],"sEcho":0,"iTotalRecords":2,"iTotalDisplayRecords":1}';
|
|
$actual = $engine->make()->getContent();
|
|
|
|
$this->assertEquals($should,$actual);
|
|
//------------------TEST 2-----------------
|
|
// search in outputed data
|
|
$engine = new CollectionEngine(new Collection(array(array('foo', 'foo2', 'foo3'),array('bar', 'bar2', 'bar3'))));
|
|
$engine->addColumn(new FunctionColumn('bla', function($row){return $row[0]." - ".$row[1];}));
|
|
$engine->addColumn(new FunctionColumn('1', function($row){return $row[2];}));
|
|
$engine->addColumn(new FunctionColumn('bla3', function($row){return $row[0]." - ".$row[2];}));
|
|
$engine->searchColumns("bla",1);
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 'foo2'
|
|
)
|
|
);
|
|
|
|
$should = array(
|
|
array(
|
|
'bla' => 'foo - foo2',
|
|
'1' => 'foo3',
|
|
'bla3' => 'foo - foo3'
|
|
)
|
|
);
|
|
|
|
$response = json_decode($engine->make()->getContent());
|
|
$this->assertEquals(json_encode($should), json_encode((array)($response->aaData)));
|
|
|
|
//------------------TEST 3-----------------
|
|
// search in initial data
|
|
// TODO: Search in initial data columns?
|
|
|
|
$engine = new CollectionEngine(new Collection(array(array('foo', 'foo2', 'foo3'),array('bar', 'bar2', 'bar3'))));
|
|
$engine->addColumn(new FunctionColumn('bla3', function($row){return $row[0]." - ".$row[2];}));
|
|
$engine->addColumn(new FunctionColumn('1', function($row){return $row[1];}));
|
|
$engine->searchColumns("bla3",1);
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 'foo2'
|
|
)
|
|
);
|
|
|
|
$should = array(
|
|
array(
|
|
'bla3' => 'foo - foo3',
|
|
'1' => 'foo2'
|
|
)
|
|
);
|
|
|
|
$response = json_decode($engine->make()->getContent());
|
|
$this->assertEquals(json_encode($should), json_encode($response->aaData));
|
|
}
|
|
|
|
public function testSkip()
|
|
{
|
|
$engine = new CollectionEngine(new Collection($this->getTestArray()));
|
|
|
|
$engine->addColumn($this->getTestColumns());
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'iDisplayStart' => 1
|
|
)
|
|
);
|
|
|
|
$should = array(
|
|
array(
|
|
'id' => 'eoo',
|
|
)
|
|
);
|
|
$this->assertEquals($should, $engine->getArray());
|
|
}
|
|
|
|
public function testTake()
|
|
{
|
|
Input::replace(
|
|
array(
|
|
'iDisplayLength' => 1
|
|
)
|
|
);
|
|
|
|
$engine = new CollectionEngine(new Collection($this->getTestArray()));
|
|
$engine->addColumn($this->getTestColumns());
|
|
$engine->setAliasMapping();
|
|
$engine->make();
|
|
|
|
$should = array(
|
|
array(
|
|
'id' => 'foo',
|
|
)
|
|
);
|
|
$this->assertEquals($should, $engine->getArray());
|
|
}
|
|
|
|
public function testComplex()
|
|
{
|
|
$engine = new CollectionEngine(new Collection($this->getRealArray()));
|
|
$this->addRealColumns($engine);
|
|
$engine->searchColumns('foo','bar');
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 't'
|
|
)
|
|
);
|
|
|
|
$test = json_decode($engine->make()->getContent());
|
|
$test = $test->aaData;
|
|
|
|
$this->assertTrue($this->arrayHasKeyValue('foo','Nils',(array) $test));
|
|
$this->assertTrue($this->arrayHasKeyValue('foo','Taylor',(array) $test));
|
|
|
|
//Test2
|
|
$engine = new CollectionEngine(new Collection($this->getRealArray()));
|
|
$this->addRealColumns($engine);
|
|
$engine->searchColumns('foo','bar');
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 'plasch'
|
|
)
|
|
);
|
|
|
|
$test = json_decode($engine->make()->getContent());
|
|
$test = $test->aaData;
|
|
|
|
$this->assertTrue($this->arrayHasKeyValue('foo','Nils',(array) $test));
|
|
$this->assertFalse($this->arrayHasKeyValue('foo','Taylor',(array) $test));
|
|
|
|
//test3
|
|
$engine = new CollectionEngine(new Collection($this->getRealArray()));
|
|
$this->addRealColumns($engine);
|
|
$engine->searchColumns('foo','bar');
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 'tay'
|
|
)
|
|
);
|
|
|
|
$test = json_decode($engine->make()->getContent());
|
|
$test = $test->aaData;
|
|
|
|
|
|
|
|
$this->assertFalse($this->arrayHasKeyValue('foo','Nils',(array) $test));
|
|
$this->assertTrue($this->arrayHasKeyValue('foo','Taylor',(array) $test));
|
|
|
|
//test4
|
|
$engine = new CollectionEngine(new Collection($this->getRealArray()));
|
|
$this->addRealColumns($engine);
|
|
$engine->searchColumns('foo','bar');
|
|
$engine->setAliasMapping();
|
|
|
|
Input::replace(
|
|
array(
|
|
'sSearch' => 'O'
|
|
)
|
|
);
|
|
|
|
$test = json_decode($engine->make()->getContent());
|
|
$test = $test->aaData;
|
|
|
|
$this->assertFalse($this->arrayHasKeyValue('foo','Nils',(array) $test));
|
|
$this->assertTrue($this->arrayHasKeyValue('foo','Taylor',(array) $test));
|
|
|
|
}
|
|
|
|
public function tearDown()
|
|
{
|
|
Mockery::close();
|
|
}
|
|
|
|
private function getTestArray()
|
|
{
|
|
return array(
|
|
array(
|
|
'id' => 'foo'
|
|
),
|
|
array(
|
|
'id' => 'eoo'
|
|
)
|
|
);
|
|
}
|
|
private function getRealArray()
|
|
{
|
|
return array(
|
|
array(
|
|
'name' => 'Nils Plaschke',
|
|
'email'=> 'github@nilsplaschke.de'
|
|
),
|
|
array(
|
|
'name' => 'Taylor Otwell',
|
|
'email'=> 'taylorotwell@gmail.com'
|
|
)
|
|
);
|
|
}
|
|
|
|
private function addRealColumns($engine)
|
|
{
|
|
$engine->addColumn(new FunctionColumn('foo', function($m){return $m['name'];}));
|
|
$engine->addColumn(new FunctionColumn('bar', function($m){return $m['email'];}));
|
|
}
|
|
|
|
private function getTestColumns()
|
|
{
|
|
return new FunctionColumn('id', function($row){return $row['id'];});
|
|
}
|
|
|
|
private function arrayHasKeyValue($key,$value,$array)
|
|
{
|
|
$array = array_pluck($array,$key);
|
|
foreach ($array as $val)
|
|
{
|
|
if(str_contains($val, $value))
|
|
return true;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
} |