Skip to content

Commit

Permalink
Added label filter example
Browse files Browse the repository at this point in the history
Added support for request filters array keys "(?values[]=)"
Added test for request filter array values
  • Loading branch information
bumbummen99 committed Jan 11, 2019
1 parent 899ec8d commit 0edbdfb
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 6 deletions.
6 changes: 5 additions & 1 deletion src/Abstracts/Search.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,11 @@ public function addRequestFilters( Request $request )
if ( substr( $filterNameRaw, 0, strlen($this->requestFilterPrefix) ) === $this->requestFilterPrefix )
{
$filterName = substr( $filterNameRaw, strlen($this->requestFilterPrefix) );
$this->addFilter( $filterName, $value );
if (is_array($value))
foreach($value as $v)
$this->addFilter( $filterName, $v );
else
$this->addFilter( $filterName, $value );
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ public function up()
{
Schema::create('examplemodel', function (Blueprint $table) {
$table->increments('id');

$table->string('name');
$table->boolean('label_one')->default(false);
$table->boolean('label_two')->default(false);

$table->timestamps();
});
}
Expand Down
22 changes: 22 additions & 0 deletions src/Filters/ExampleModel/HasLabel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace ModelSearch\Filters\ExampleModel;

use ModelSearch\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;


class HasLabel implements Filter
{
/**
* Apply a given search value to the builder instance.
*
* @param Builder $builder
* @param mixed $value
* @return Builder $builder
*/
public static function apply(Builder $builder, $value)
{
return $builder->where( 'label_' . $value, true );
}
}
41 changes: 36 additions & 5 deletions tests/ModelSearchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ protected function setUp()
$exampleModel->name = 'Test';
$exampleModel->save();
}

foreach(range(1, 4) as $index) {
$exampleModel = new ExampleModel();
$exampleModel->name = 'Labels';
$exampleModel->label_one = true;
$exampleModel->label_two = true;
$exampleModel->save();
}
}

/** @test */
Expand Down Expand Up @@ -91,8 +99,6 @@ public function it_can_sort_models_with_a_special_filter()
$search = new ModelSearch( ExampleModel::class );
$search->addFilter('SortBy', 'id');
$result = $search->result();

$this->assertEquals($result->count(), 10);

$predictedIndex = 1;
foreach( $result as $exampleModel ) {
Expand All @@ -107,10 +113,8 @@ public function it_can_sort_models_with_a_special_filter_dec()
$search = new ModelSearch( ExampleModel::class );
$search->addFilter('SortBy', 'idDesc');
$result = $search->result();

$this->assertEquals($result->count(), 10);

$predictedIndex = 10;
$predictedIndex = 14;
foreach( $result as $exampleModel ) {
$this->assertEquals($exampleModel->id, $predictedIndex);
$predictedIndex--; //decrease index
Expand Down Expand Up @@ -154,6 +158,33 @@ public function it_can_add_filters_from_request()
}
}

/** @test */
public function it_can_add_filters_from_request_array_value()
{
$request = new \Illuminate\Http\Request();
$request->merge([
'filter_has_label' => [
'one',
'two'
],
]);

$this->assertEquals(true, $request->has('filter_has_label'));
$filterValues = $request->get('filter_has_label');
$this->assertEquals(true, in_array('one', $filterValues) );
$this->assertEquals(true, in_array('two', $filterValues) );

$search = new ModelSearch( ExampleModel::class );
$search->addRequestFilters( $request );
$result = $search->result();

$this->assertEquals($result->count(), 4);
foreach( $result as $exampleModel ) {
$this->assertEquals(true, $exampleModel->label_one);
$this->assertEquals(true, $exampleModel->label_two);
}
}

/** @test */
public function it_can_change_request_filter_prefix_during_runtime()
{
Expand Down

0 comments on commit 0edbdfb

Please sign in to comment.