Skip to content

Commit 5654d47

Browse files
committed
tests: update to use Pest
1 parent 6f8b413 commit 5654d47

12 files changed

+279
-290
lines changed

tests/Fake/FilterQueryFake.php

Lines changed: 0 additions & 17 deletions
This file was deleted.

tests/Fake/SecondTestModelFilter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Worksome\Filters\Tests\Fake;
46

57
use Worksome\Filters\ModelFilter;

tests/Fake/TestModel.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Worksome\Filters\Tests\Fake;
46

57
use Illuminate\Database\Eloquent\Model;

tests/Fake/TestModelFilter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Worksome\Filters\Tests\Fake;
46

57
use Worksome\Filters\ModelFilter;

tests/Feature/FacadeTest.php

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,32 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Worksome\Filters\Tests\Feature;
46

57
use Illuminate\Contracts\Config\Repository;
6-
use Illuminate\Support\Facades\Facade;
78
use Worksome\Filters\Filter;
89
use Worksome\Filters\FilterQuery;
910
use Worksome\Filters\Tests\Fake\TestModel;
1011
use Worksome\Filters\Tests\Fake\TestModelFilter;
11-
use Worksome\Filters\Tests\TestCase;
12-
13-
class FacadeTest extends TestCase
14-
{
15-
protected function setUp(): void
16-
{
17-
parent::setUp();
18-
Facade::setFacadeApplication([FilterQuery::class => new FilterQuery($this->app->make(Repository::class))]);
19-
}
20-
21-
/** @test */
22-
public function it_returns_an_instance_of_filter_query()
23-
{
24-
$this->assertInstanceOf(FilterQuery::class, Filter::model('dummy'));
25-
}
26-
27-
/** @test */
28-
public function it_can_be_called_statically()
29-
{
30-
$input = ['name' => 'one'];
31-
$filtered_instance = $filtered = (new FilterQuery($this->app->make(Repository::class)))
32-
->model(TestModel::class)
33-
->apply(TestModelFilter::class)
34-
->input($input)
35-
->get();
36-
$filtered_static = Filter::model(TestModel::class)
37-
->apply(TestModelFilter::class)
38-
->input($input)
39-
->get();
40-
41-
$this->assertEquals($filtered_instance, $filtered_static);
42-
}
43-
}
12+
13+
it('returns an instance of filter query', function () {
14+
expect(Filter::model('dummy'))->toBeInstanceOf(FilterQuery::class);
15+
});
16+
17+
it('can be called statically', function () {
18+
$input = ['name' => 'one'];
19+
20+
$filteredInstance = (new FilterQuery($this->app->make(Repository::class)))
21+
->model(TestModel::class)
22+
->apply(TestModelFilter::class)
23+
->input($input)
24+
->get();
25+
26+
$filteredStatic = Filter::model(TestModel::class)
27+
->apply(TestModelFilter::class)
28+
->input($input)
29+
->get();
30+
31+
expect($filteredStatic)->toEqual($filteredInstance);
32+
});

tests/Feature/FilterQueryTest.php

Lines changed: 116 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Worksome\Filters\Tests\Feature;
46

57
use Illuminate\Contracts\Config\Repository;
@@ -10,133 +12,117 @@
1012
use Worksome\Filters\Tests\Fake\SecondTestModelFilter;
1113
use Worksome\Filters\Tests\Fake\TestModel;
1214
use Worksome\Filters\Tests\Fake\TestModelFilter;
13-
use Worksome\Filters\Tests\TestCase;
14-
15-
class FilterQueryTest extends TestCase
16-
{
17-
/** @test */
18-
public function it_filters_an_eloquent_model()
19-
{
20-
$filtered = (new FilterQuery($this->app->make(Repository::class)))
21-
->model(TestModel::class)
22-
->apply(TestModelFilter::class)
23-
->input([
24-
'name' => 'one',
25-
])
26-
->get();
27-
28-
$this->assertCount(1, $filtered);
29-
$this->assertEquals(TestModel::where('name', 'one')->first(), $filtered->first());
30-
}
31-
32-
/** @test */
33-
public function it_can_paginate_the_filter()
34-
{
35-
$filtered = (new FilterQuery($this->app->make(Repository::class)))
36-
->model(TestModel::class)
37-
->apply(TestModelFilter::class)
38-
->input([
39-
'even' => 1,
40-
])
41-
->paginateFilter(2);
42-
$this->assertCount(2, $filtered);
43-
}
44-
45-
/** @test */
46-
public function a_query_builder_can_be_passed_instead_of_model_class()
47-
{
48-
$query = TestModel::query()->limit(2);
49-
50-
$filtered = (new FilterQuery($this->app->make(Repository::class)))
51-
->query($query)
52-
->apply(TestModelFilter::class)
53-
->input([
54-
'even' => 1,
55-
])
56-
->get();
57-
$this->assertCount(2, $filtered);
58-
}
59-
60-
/** @test */
61-
public function it_can_simple_paginate_the_filter()
62-
{
63-
$filtered = (new FilterQuery($this->app->make(Repository::class)))
64-
->model(TestModel::class)
65-
->apply(TestModelFilter::class)
66-
->input([
67-
'even' => 1,
68-
])
69-
->simplePaginateFilter(2);
70-
$this->assertCount(2, $filtered);
71-
}
72-
73-
/** @test */
74-
public function it_returns_the_underlying_query_builder()
75-
{
76-
$query = (new FilterQuery($this->app->make(Repository::class)))
77-
->model(TestModel::class)
78-
->apply(TestModelFilter::class)
79-
->input([
80-
'name' => 'one',
81-
])
82-
->getQuery();
83-
$this->assertInstanceOf(Builder::class, $query);
84-
}
85-
86-
/** @test */
87-
public function the_get_method_is_the_same_as_query_builder_get()
88-
{
89-
$filter = (new FilterQuery($this->app->make(Repository::class)))
90-
->model(TestModel::class)
91-
->apply(TestModelFilter::class)
92-
->input([
93-
'name' => 'one',
94-
]);
95-
96-
$this->assertEquals($filter->getQuery()->get(), $filter->get());
97-
}
98-
99-
/** @test */
100-
public function it_throws_a_missing_required_filter_exception_if_no_filter_is_provided()
101-
{
102-
$this->expectException(MissingRequiredFilterException::class);
103-
(new FilterQuery($this->app->make(Repository::class)))
104-
->model(TestModel::class)
105-
->input([
106-
'name' => 'one',
107-
])
108-
->get();
109-
}
110-
111-
/** @test */
112-
public function it_throws_a_missing_required_model_or_query_exception_if_no_model_is_provided()
113-
{
114-
$this->expectException(MissingRequiredModelOrQueryException::class);
115-
116-
(new FilterQuery($this->app->make(Repository::class)))
117-
->apply(TestModelFilter::class)
118-
->input([
119-
'name' => 'one',
120-
])
121-
->get();
122-
}
123-
124-
/** @test */
125-
public function it_resets_the_query_on_filter_class_change()
126-
{
127-
$query = TestModel::query()->limit(2);
128-
129-
$filter = (new FilterQuery($this->app->make(Repository::class)))
130-
->query($query)
131-
->apply(TestModelFilter::class)
132-
->input([
133-
'even' => 1,
134-
]);
135-
$filter->get();
136-
$this->assertEquals($query, $filter->getQuery());
137-
138-
$filter->apply(TestModelFilter::class);
139-
$this->assertEquals($query, $filter->getQuery());
140-
$filter->apply(SecondTestModelFilter::class);
141-
}
142-
}
15+
16+
it('can filter an Eloquent model', function () {
17+
$filtered = (new FilterQuery($this->app->make(Repository::class)))
18+
->model(TestModel::class)
19+
->apply(TestModelFilter::class)
20+
->input([
21+
'name' => 'one',
22+
])
23+
->get();
24+
25+
expect($filtered)
26+
->toHaveCount(1)
27+
->first()->toEqual(TestModel::where('name', 'one')->first());
28+
});
29+
30+
it('can paginate the filter', function () {
31+
$filtered = (new FilterQuery($this->app->make(Repository::class)))
32+
->model(TestModel::class)
33+
->apply(TestModelFilter::class)
34+
->input([
35+
'even' => 1,
36+
])
37+
->paginateFilter(2);
38+
39+
expect($filtered)->toHaveCount(2);
40+
});
41+
42+
it('can pass a query builder instead of a model class', function () {
43+
$query = TestModel::query()->limit(2);
44+
45+
$filtered = (new FilterQuery($this->app->make(Repository::class)))
46+
->query($query)
47+
->apply(TestModelFilter::class)
48+
->input([
49+
'even' => 1,
50+
])
51+
->get();
52+
53+
expect($filtered)->toHaveCount(2);
54+
});
55+
56+
it('can simple paginate the filter', function () {
57+
$filtered = (new FilterQuery($this->app->make(Repository::class)))
58+
->model(TestModel::class)
59+
->apply(TestModelFilter::class)
60+
->input([
61+
'even' => 1,
62+
])
63+
->simplePaginateFilter(2);
64+
65+
expect($filtered)->toHaveCount(2);
66+
});
67+
68+
it('returns the underlying query builder', function () {
69+
$query = (new FilterQuery($this->app->make(Repository::class)))
70+
->model(TestModel::class)
71+
->apply(TestModelFilter::class)
72+
->input([
73+
'name' => 'one',
74+
])
75+
->getQuery();
76+
77+
expect($query)->toBeInstanceOf(Builder::class);
78+
});
79+
80+
it('has the same response for the get() method and the query builder get() method', function () {
81+
$filter = (new FilterQuery($this->app->make(Repository::class)))
82+
->model(TestModel::class)
83+
->apply(TestModelFilter::class)
84+
->input([
85+
'name' => 'one',
86+
]);
87+
88+
expect($filter->getQuery()->get())->toEqual($filter->get());
89+
});
90+
91+
it('throws a missing required filter exception if not filter is provided', function () {
92+
(new FilterQuery($this->app->make(Repository::class)))
93+
->model(TestModel::class)
94+
->input([
95+
'name' => 'one',
96+
])
97+
->get();
98+
})->throws(MissingRequiredFilterException::class);
99+
100+
it('throws a missing required model or query exception if no model is provided', function () {
101+
(new FilterQuery($this->app->make(Repository::class)))
102+
->apply(TestModelFilter::class)
103+
->input([
104+
'name' => 'one',
105+
])
106+
->get();
107+
})->throws(MissingRequiredModelOrQueryException::class);
108+
109+
it('can reset the model on filter class change', function () {
110+
$query = TestModel::query()->limit(2);
111+
112+
$filter = (new FilterQuery($this->app->make(Repository::class)))
113+
->query($query)
114+
->apply(TestModelFilter::class)
115+
->input([
116+
'even' => 1,
117+
]);
118+
119+
$filter->get();
120+
121+
expect($filter->getQuery())->toEqual($query);
122+
123+
$filter->apply(TestModelFilter::class);
124+
125+
expect($filter->getQuery())->toEqual($query);
126+
127+
$filter->apply(SecondTestModelFilter::class);
128+
});

0 commit comments

Comments
 (0)