Skip to content

Commit

Permalink
filter tests
Browse files Browse the repository at this point in the history
  • Loading branch information
iamgergo committed Jan 26, 2024
1 parent 73b87af commit ca97f18
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/Filters/Select.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function getValue(Request $request): mixed
{
$default = parent::getValue($request);

return $this->multiple ? Arr::wrap($default) : $default;
return $this->isMultiple() ? Arr::wrap($default) : $default;
}

/**
Expand All @@ -39,6 +39,14 @@ public function multiple(bool $value = true): static
return $this;
}

/**
* Determine if the filter is multiple.
*/
public function isMultiple(): bool
{
return $this->multiple;
}

/**
* {@inheritdoc}
*/
Expand All @@ -49,6 +57,6 @@ public function toField(): Field
return $this->options($request);
}))
->value(fn (Request $request): mixed => $this->getValue($request))
->multiple($this->multiple);
->multiple($this->isMultiple());
}
}
63 changes: 63 additions & 0 deletions tests/Filters/FilterTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

namespace Cone\Root\Tests\Filters;

use Cone\Root\Filters\Filter;
use Cone\Root\Tests\TestCase;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

class FilterTest extends TestCase
{
protected Filter $filter;

public function setUp(): void
{
parent::setUp();

$this->filter = new class() extends Filter
{
public function __construct()
{
$this->setKey('foo');
}

public function getName(): string
{
return 'Test Filter';
}

public function apply(Request $request, Builder $query, mixed $value): Builder
{
return $query;
}
};
}

public function test_a_filter_has_keys(): void
{
$this->assertSame('foo', $this->filter->getKey());
$this->assertSame('foo', $this->filter->getRequestKey());
}

public function test_a_filter_has_name(): void
{
$this->assertSame('Test Filter', $this->filter->getName());
}

public function test_a_filter_resolves_value_from_request(): void
{
$this->app['request']->merge(['foo' => 'value']);

$this->assertSame(
'value', $this->filter->getValue($this->app['request'])
);
}

public function test_a_filter_can_be_active(): void
{
$this->app['request']->merge(['foo' => 'value']);

$this->assertTrue($this->filter->isActive($this->app['request']));
}
}
64 changes: 64 additions & 0 deletions tests/Filters/SelectFilterTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

namespace Cone\Root\Tests\Filters;

use Cone\Root\Filters\Select;
use Cone\Root\Tests\TestCase;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

class SelectFilterTest extends TestCase
{
protected Select $filter;

public function setUp(): void
{
parent::setUp();

$this->filter = new class() extends Select
{
public function __construct()
{
$this->setKey('foo');
}

public function apply(Request $request, Builder $query, mixed $value): Builder
{
return $query;
}

public function options(Request $request): array
{
return [
'test' => 'value',
'foo' => 'bar',
];
}
};
}

public function test_a_select_filter_has_options(): void
{
$this->assertSame(
['test' => 'value', 'foo' => 'bar'],
$this->filter->options($this->app['request'])
);
}

public function test_a_select_filter_can_have_multiple_values(): void
{
$this->app['request']->merge(['foo' => 'value']);

$this->assertFalse($this->filter->isMultiple());
$this->assertSame(
'value', $this->filter->getValue($this->app['request'])
);

$this->filter->multiple();

$this->assertTrue($this->filter->isMultiple());
$this->assertSame(
['value'], $this->filter->getValue($this->app['request'])
);
}
}

0 comments on commit ca97f18

Please sign in to comment.