Skip to content

Commit baf204e

Browse files
committed
test: extract AbstractFilterTest
1 parent c440e2f commit baf204e

File tree

4 files changed

+78
-143
lines changed

4 files changed

+78
-143
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Tests\Authentication\Filters;
4+
5+
use CodeIgniter\Config\Factories;
6+
use CodeIgniter\Test\FeatureTestTrait;
7+
use Config\Services;
8+
use Tests\Support\TestCase;
9+
10+
/**
11+
* @internal
12+
*/
13+
abstract class AbstractFilterTest extends TestCase
14+
{
15+
use FeatureTestTrait;
16+
17+
protected $namespace;
18+
protected string $alias;
19+
protected string $classname;
20+
21+
protected function setUp(): void
22+
{
23+
$_SESSION = [];
24+
25+
Services::reset(true);
26+
27+
parent::setUp();
28+
29+
// Register our filter
30+
$this->registerFilter();
31+
32+
// Add a test route that we can visit to trigger.
33+
$this->addRoutes();
34+
}
35+
36+
private function registerFilter(): void
37+
{
38+
$filterConfig = config('Filters');
39+
40+
$filterConfig->aliases[$this->alias] = $this->classname;
41+
42+
Factories::injectMock('filters', 'filters', $filterConfig);
43+
}
44+
45+
private function addRoutes(): void
46+
{
47+
$routes = service('routes');
48+
49+
$routes->group(
50+
'/',
51+
['filter' => $this->alias],
52+
static function ($routes): void {
53+
$routes->get('protected-route', static function (): void {
54+
echo 'Protected';
55+
});
56+
}
57+
);
58+
$routes->get('open-route', static function (): void {
59+
echo 'Open';
60+
});
61+
$routes->get('login', 'AuthController::login', ['as' => 'login']);
62+
63+
Services::injectMock('routes', $routes);
64+
}
65+
}

tests/Authentication/Filters/ChainFilterTest.php

Lines changed: 3 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,21 @@
22

33
namespace Tests\Authentication\Filters;
44

5-
use CodeIgniter\Config\Factories;
65
use CodeIgniter\Shield\Entities\AccessToken;
76
use CodeIgniter\Shield\Filters\ChainAuth;
87
use CodeIgniter\Test\DatabaseTestTrait;
9-
use CodeIgniter\Test\FeatureTestTrait;
10-
use Config\Services;
118
use Tests\Support\FakeUser;
12-
use Tests\Support\TestCase;
139

1410
/**
1511
* @internal
1612
*/
17-
final class ChainFilterTest extends TestCase
13+
final class ChainFilterTest extends AbstractFilterTest
1814
{
1915
use DatabaseTestTrait;
20-
use FeatureTestTrait;
2116
use FakeUser;
2217

23-
protected $namespace;
24-
25-
protected function setUp(): void
26-
{
27-
Services::reset(true);
28-
29-
parent::setUp();
30-
31-
$_SESSION = [];
32-
33-
// Register our filter
34-
$this->registerFilter();
35-
36-
// Add a test route that we can visit to trigger.
37-
$this->addRoutes();
38-
}
39-
40-
private function registerFilter(): void
41-
{
42-
$filterConfig = config('Filters');
43-
44-
$filterConfig->aliases['chain'] = ChainAuth::class;
45-
46-
Factories::injectMock('filters', 'filters', $filterConfig);
47-
}
48-
49-
private function addRoutes(): void
50-
{
51-
$routes = service('routes');
52-
53-
$routes->group('/', ['filter' => 'chain'], static function ($routes) {
54-
$routes->get('protected-route', static function () {
55-
echo 'Protected';
56-
});
57-
});
58-
$routes->get('open-route', static function () {
59-
echo 'Open';
60-
});
61-
$routes->get('login', 'AuthController::login', ['as' => 'login']);
62-
63-
Services::injectMock('routes', $routes);
64-
}
18+
protected string $alias = 'chain';
19+
protected string $classname = ChainAuth::class;
6520

6621
public function testFilterNotAuthorized(): void
6722
{

tests/Authentication/Filters/SessionFilterTest.php

Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,61 +2,19 @@
22

33
namespace Tests\Authentication\Filters;
44

5-
use CodeIgniter\Config\Factories;
65
use CodeIgniter\Shield\Filters\SessionAuth;
76
use CodeIgniter\Shield\Models\UserModel;
8-
use CodeIgniter\Test\FeatureTestTrait;
9-
use Config\Services;
10-
use Tests\Support\DatabaseTestCase;
7+
use CodeIgniter\Test\DatabaseTestTrait;
118

129
/**
1310
* @internal
1411
*/
15-
final class SessionFilterTest extends DatabaseTestCase
12+
final class SessionFilterTest extends AbstractFilterTest
1613
{
17-
use FeatureTestTrait;
14+
use DatabaseTestTrait;
1815

19-
protected $namespace;
20-
21-
protected function setUp(): void
22-
{
23-
$_SESSION = [];
24-
25-
Services::reset(true);
26-
27-
parent::setUp();
28-
29-
// Register our filter
30-
$this->registerFilter();
31-
32-
// Add a test route that we can visit to trigger.
33-
$this->addRoutes();
34-
}
35-
36-
private function registerFilter(): void
37-
{
38-
$filterConfig = config('Filters');
39-
40-
$filterConfig->aliases['sessionAuth'] = SessionAuth::class;
41-
42-
Factories::injectMock('filters', 'filters', $filterConfig);
43-
}
44-
45-
private function addRoutes(): void
46-
{
47-
$routes = service('routes');
48-
49-
$routes->group('/', ['filter' => 'sessionAuth'], static function ($routes): void {
50-
$routes->get('protected-route', static function (): void {
51-
echo 'Protected';
52-
});
53-
});
54-
$routes->get('open-route', static function (): void {
55-
echo 'Open';
56-
});
57-
$routes->get('login', 'AuthController::login', ['as' => 'login']);
58-
Services::injectMock('routes', $routes);
59-
}
16+
protected string $alias = 'sessionAuth';
17+
protected string $classname = SessionAuth::class;
6018

6119
public function testFilterNotAuthorized(): void
6220
{

tests/Authentication/Filters/TokenFilterTest.php

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,21 @@
22

33
namespace Tests\Authentication\Filters;
44

5-
use CodeIgniter\Config\Factories;
65
use CodeIgniter\Shield\Entities\AccessToken;
76
use CodeIgniter\Shield\Entities\User;
87
use CodeIgniter\Shield\Filters\TokenAuth;
98
use CodeIgniter\Shield\Models\UserModel;
10-
use CodeIgniter\Test\FeatureTestTrait;
11-
use Config\Services;
12-
use Tests\Support\DatabaseTestCase;
9+
use CodeIgniter\Test\DatabaseTestTrait;
1310

1411
/**
1512
* @internal
1613
*/
17-
final class TokenFilterTest extends DatabaseTestCase
14+
final class TokenFilterTest extends AbstractFilterTest
1815
{
19-
use FeatureTestTrait;
16+
use DatabaseTestTrait;
2017

21-
protected $namespace;
22-
23-
protected function setUp(): void
24-
{
25-
$_SESSION = [];
26-
27-
Services::reset(true);
28-
29-
parent::setUp();
30-
31-
// Register our filter
32-
$this->registerFilter();
33-
34-
// Add a test route that we can visit to trigger.
35-
$this->addRoutes();
36-
}
37-
38-
private function registerFilter(): void
39-
{
40-
$filterConfig = config('Filters');
41-
42-
$filterConfig->aliases['tokenAuth'] = TokenAuth::class;
43-
44-
Factories::injectMock('filters', 'filters', $filterConfig);
45-
}
46-
47-
private function addRoutes(): void
48-
{
49-
$routes = service('routes');
50-
51-
$routes->group('/', ['filter' => 'tokenAuth'], static function ($routes): void {
52-
$routes->get('protected-route', static function (): void {
53-
echo 'Protected';
54-
});
55-
});
56-
$routes->get('open-route', static function (): void {
57-
echo 'Open';
58-
});
59-
$routes->get('login', 'AuthController::login', ['as' => 'login']);
60-
61-
Services::injectMock('routes', $routes);
62-
}
18+
protected string $alias = 'tokenAuth';
19+
protected string $classname = TokenAuth::class;
6320

6421
public function testFilterNotAuthorized(): void
6522
{

0 commit comments

Comments
 (0)