Skip to content

Commit d980e99

Browse files
authored
Merge pull request #8195 from kenjis/fix-FilterTestTrait
fix: FilterTestTrait Undefined variable $filterClasses
2 parents 7160f66 + e7bd962 commit d980e99

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

system/Test/FilterTestTrait.php

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -125,35 +125,42 @@ protected function getFilterCaller($filter, string $position): Closure
125125
throw new InvalidArgumentException('Invalid filter position passed: ' . $position);
126126
}
127127

128+
if ($filter instanceof FilterInterface) {
129+
$filterInstances = [$filter];
130+
}
131+
128132
if (is_string($filter)) {
129133
// Check for an alias (no namespace)
130134
if (strpos($filter, '\\') === false) {
131135
if (! isset($this->filtersConfig->aliases[$filter])) {
132136
throw new RuntimeException("No filter found with alias '{$filter}'");
133137
}
134138

135-
$filterClasses = $this->filtersConfig->aliases[$filter];
139+
$filterClasses = (array) $this->filtersConfig->aliases[$filter];
140+
} else {
141+
// FQCN
142+
$filterClasses = [$filter];
136143
}
137144

138-
$filterClasses = (array) $filterClasses;
139-
}
145+
$filterInstances = [];
140146

141-
foreach ($filterClasses as $class) {
142-
// Get an instance
143-
$filter = new $class();
147+
foreach ($filterClasses as $class) {
148+
// Get an instance
149+
$filter = new $class();
144150

145-
if (! $filter instanceof FilterInterface) {
146-
throw FilterException::forIncorrectInterface(get_class($filter));
151+
if (! $filter instanceof FilterInterface) {
152+
throw FilterException::forIncorrectInterface(get_class($filter));
153+
}
154+
155+
$filterInstances[] = $filter;
147156
}
148157
}
149158

150159
$request = clone $this->request;
151160

152161
if ($position === 'before') {
153-
return static function (?array $params = null) use ($filterClasses, $request) {
154-
foreach ($filterClasses as $class) {
155-
$filter = new $class();
156-
162+
return static function (?array $params = null) use ($filterInstances, $request) {
163+
foreach ($filterInstances as $filter) {
157164
$result = $filter->before($request, $params);
158165

159166
// @TODO The following logic is in Filters class.
@@ -177,10 +184,8 @@ protected function getFilterCaller($filter, string $position): Closure
177184

178185
$response = clone $this->response;
179186

180-
return static function (?array $params = null) use ($filterClasses, $request, $response) {
181-
foreach ($filterClasses as $class) {
182-
$filter = new $class();
183-
187+
return static function (?array $params = null) use ($filterInstances, $request, $response) {
188+
foreach ($filterInstances as $filter) {
184189
$result = $filter->after($request, $response, $params);
185190

186191
// @TODO The following logic is in Filters class.

tests/system/Test/FilterTestTraitTest.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function testGetCallerInvalidPosition(): void
6363
$this->getFilterCaller('test-customfilter', 'banana');
6464
}
6565

66-
public function testCallerSupportArray(): void
66+
public function testCallerSupportsArray(): void
6767
{
6868
$this->filtersConfig->aliases['test-customfilter'] = [Customfilter::class];
6969

@@ -73,6 +73,22 @@ public function testCallerSupportArray(): void
7373
$this->assertSame('http://hellowworld.com', $result->getBody());
7474
}
7575

76+
public function testCallerSupportsClassname(): void
77+
{
78+
$caller = $this->getFilterCaller(Customfilter::class, 'before');
79+
$result = $caller();
80+
81+
$this->assertSame('http://hellowworld.com', $result->getBody());
82+
}
83+
84+
public function testCallerSupportsFilterInstance(): void
85+
{
86+
$caller = $this->getFilterCaller(new Customfilter(), 'before');
87+
$result = $caller();
88+
89+
$this->assertSame('http://hellowworld.com', $result->getBody());
90+
}
91+
7692
public function testCallerUsesClonedInstance(): void
7793
{
7894
$caller = $this->getFilterCaller('test-customfilter', 'before');

0 commit comments

Comments
 (0)