252 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			252 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| use Chumper\Datatable\Columns\FunctionColumn;
 | |
| use Chumper\Datatable\Engines\BaseEngine;
 | |
| use Chumper\Datatable\Engines\EngineInterface;
 | |
| use Chumper\Datatable\Engines\QueryEngine;
 | |
| use Illuminate\Support\Collection;
 | |
| 
 | |
| class QueryEngineTest extends PHPUnit_Framework_TestCase {
 | |
| 
 | |
|     /**
 | |
|      * @var QueryEngine
 | |
|      */
 | |
|     public $c;
 | |
| 
 | |
|     /**
 | |
|      * @var \Mockery\Mock
 | |
|      */
 | |
|     public $builder;
 | |
| 
 | |
|     public function setUp()
 | |
|     {
 | |
| 
 | |
|         Config::shouldReceive('get')->zeroOrMoreTimes()->with("chumper.datatable.engine")->andReturn(
 | |
|             array(
 | |
|                 'exactWordSearch' => false,
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $this->builder = Mockery::mock('Illuminate\Database\Query\Builder');
 | |
| 
 | |
|         $this->c = new QueryEngine($this->builder);
 | |
|     }
 | |
| 
 | |
|     public function testOrder()
 | |
|     {
 | |
|         $this->builder->shouldReceive('orderBy')->with('id', BaseEngine::ORDER_ASC);
 | |
| 
 | |
|         Input::merge(
 | |
|             array(
 | |
|                 'iSortCol_0' => 0,
 | |
|                 'sSortDir_0' => 'asc'
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         //--
 | |
| 
 | |
|         $this->builder->shouldReceive('orderBy')->with('id', BaseEngine::ORDER_DESC);
 | |
| 
 | |
|         Input::merge(
 | |
|             array(
 | |
|                 'iSortCol_0' => 0,
 | |
|                 'sSortDir_0' => 'desc'
 | |
|             )
 | |
|         );
 | |
| 
 | |
|     }
 | |
| 
 | |
|     public function testSearch()
 | |
|     {
 | |
|         $this->builder->shouldReceive('where')->withAnyArgs()->andReturn($this->builder);
 | |
|         $this->builder->shouldReceive('get')->once()->andReturn(new Collection($this->getRealArray()));
 | |
|         $this->builder->shouldReceive('count')->twice()->andReturn(10);
 | |
|         $this->builder->shouldReceive('orderBy')->withAnyArgs()->andReturn($this->builder);
 | |
| 
 | |
|         $this->c = new QueryEngine($this->builder);
 | |
| 
 | |
|         $this->addRealColumns($this->c);
 | |
|         $this->c->searchColumns('foo');
 | |
| 
 | |
|         Input::merge(
 | |
|             array(
 | |
|                 'sSearch' => 'test'
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $test = json_decode($this->c->make()->getContent());
 | |
|         $test = $test->aaData;
 | |
|     }
 | |
| 
 | |
|     public function testSkip()
 | |
|     {
 | |
|         $this->builder->shouldReceive('skip')->once()->with(1)->andReturn($this->builder);
 | |
|         $this->builder->shouldReceive('get')->once()->andReturn(new Collection($this->getRealArray()));
 | |
|         $this->builder->shouldReceive('count')->twice()->andReturn(10);
 | |
|         $this->builder->shouldReceive('orderBy')->withAnyArgs()->andReturn($this->builder);
 | |
| 
 | |
|         $this->c = new QueryEngine($this->builder);
 | |
| 
 | |
|         $this->addRealColumns($this->c);
 | |
| 
 | |
|         Input::merge(
 | |
|             array(
 | |
|                 'iDisplayStart' => 1,
 | |
|                 'sSearch' => null
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $this->c->searchColumns('foo');
 | |
| 
 | |
|         $test = json_decode($this->c->make()->getContent());
 | |
|         $test = $test->aaData;
 | |
|     }
 | |
| 
 | |
|     public function testTake()
 | |
|     {
 | |
|         $this->builder->shouldReceive('take')->once()->with(1)->andReturn($this->builder);
 | |
|         $this->builder->shouldReceive('get')->once()->andReturn(new Collection($this->getRealArray()));
 | |
|         $this->builder->shouldReceive('count')->twice()->andReturn(10);
 | |
|         $this->builder->shouldReceive('orderBy')->withAnyArgs()->andReturn($this->builder);
 | |
| 
 | |
|         $this->c = new QueryEngine($this->builder);
 | |
| 
 | |
|         $this->addRealColumns($this->c);
 | |
| 
 | |
|         Input::merge(
 | |
|             array(
 | |
|                 'iDisplayLength' => 1,
 | |
|                 'sSearch' => null,
 | |
|                 'iDisplayStart' => null
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $this->c->searchColumns('foo');
 | |
| 
 | |
|         $test = json_decode($this->c->make()->getContent());
 | |
|         $test = $test->aaData;
 | |
|     }
 | |
| 
 | |
|     public function testComplex()
 | |
|     {
 | |
| 
 | |
| 
 | |
|         $this->builder->shouldReceive('get')->andReturn(new Collection($this->getRealArray()));
 | |
|         $this->builder->shouldReceive('where')->withAnyArgs()->andReturn($this->builder);
 | |
|         $this->builder->shouldReceive('count')->times(8)->andReturn(10);
 | |
| 
 | |
|         $engine = new QueryEngine($this->builder);
 | |
| 
 | |
|         $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',$test));
 | |
|         $this->assertTrue($this->arrayHasKeyValue('foo','Taylor',$test));
 | |
| 
 | |
|         //Test2
 | |
|         $engine = new QueryEngine($this->builder);
 | |
| 
 | |
|         $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',$test));
 | |
|         $this->assertTrue($this->arrayHasKeyValue('foo','Taylor',$test));
 | |
| 
 | |
|         //test3
 | |
|         $engine = new QueryEngine($this->builder);
 | |
| 
 | |
|         $this->addRealColumns($engine);
 | |
|         $engine->searchColumns('foo','bar');
 | |
|         $engine->setAliasMapping();
 | |
| 
 | |
|         Input::replace(
 | |
|             array(
 | |
|                 'sSearch' => 'tay',
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $test = json_decode($engine->make()->getContent());
 | |
|         $test = $test->aaData;
 | |
| 
 | |
|         $this->assertTrue($this->arrayHasKeyValue('foo','Nils',$test));
 | |
|         $this->assertTrue($this->arrayHasKeyValue('foo','Taylor',$test));
 | |
| 
 | |
|         //test4
 | |
|         $engine = new QueryEngine($this->builder);
 | |
| 
 | |
|         $this->addRealColumns($engine);
 | |
|         $engine->searchColumns('foo','bar');
 | |
|         $engine->setAliasMapping();
 | |
| 
 | |
|         Input::replace(
 | |
|             array(
 | |
|                 'sSearch' => '0',
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $test = json_decode($engine->make()->getContent());
 | |
|         $test = $test->aaData;
 | |
| 
 | |
|         $this->assertTrue($this->arrayHasKeyValue('foo','Nils',$test));
 | |
|         $this->assertTrue($this->arrayHasKeyValue('foo','Taylor',$test));
 | |
|     }
 | |
| 
 | |
|     protected function tearDown()
 | |
|     {
 | |
|         Mockery::close();
 | |
|     }
 | |
| 
 | |
|     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 arrayHasKeyValue($key,$value,$array)
 | |
|     {
 | |
|         $array = array_pluck($array,$key);
 | |
|         foreach ($array as $val)
 | |
|         {
 | |
|             if(str_contains($val, $value))
 | |
|                 return true;
 | |
|         }
 | |
|         return false;
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 | 
