Skip to content

Commit 7ab32e7

Browse files
authored
Merge pull request #70 from leo108/v1
Make PluginManager respect plugin traits used by request & connector's parent class
2 parents 26955c2 + 20c98cd commit 7ab32e7

File tree

5 files changed

+21
-8
lines changed

5 files changed

+21
-8
lines changed

src/Traits/ManagesPlugins.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace Sammyjo20\Saloon\Traits;
44

5-
use ReflectionClass;
6-
75
trait ManagesPlugins
86
{
97
/**
@@ -24,8 +22,8 @@ private function loadPlugins(): void
2422
// any options. E.g if they have the "hasBody" interface, we need to add the
2523
// body to the request.
2624

27-
$connectorTraits = (new ReflectionClass($this->request->getConnector()))->getTraits();
28-
$requestTraits = (new ReflectionClass($this->request))->getTraits();
25+
$connectorTraits = class_uses_recursive($this->request->getConnector());
26+
$requestTraits = class_uses_recursive($this->request);
2927

3028
$this->scanTraits($connectorTraits, 'connector')
3129
->scanTraits($requestTraits, 'request');
@@ -46,15 +44,15 @@ private function scanTraits(array $traits, string $type): self
4644
}
4745

4846
foreach ($traits as $trait) {
49-
$pluginName = $trait->getShortName();
47+
$pluginName = class_basename($trait);
5048

5149
if (in_array($pluginName, $this->plugins, true)) {
5250
continue;
5351
}
5452

5553
$bootName = 'boot' . $pluginName;
5654

57-
if ($trait->hasMethod($bootName) === false) {
55+
if (method_exists($trait, $bootName) === false) {
5856
continue;
5957
}
6058

tests/Feature/MockRequestTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
use Sammyjo20\Saloon\Http\MockResponse;
44
use Sammyjo20\Saloon\Clients\MockClient;
55
use Sammyjo20\Saloon\Http\SaloonRequest;
6-
use Sammyjo20\Saloon\Tests\Fixtures\Mocking\CallableMockResponse;
76
use Sammyjo20\Saloon\Tests\Fixtures\Requests\UserRequest;
87
use Sammyjo20\Saloon\Tests\Fixtures\Requests\ErrorRequest;
98
use Sammyjo20\Saloon\Tests\Fixtures\Connectors\TestConnector;
9+
use Sammyjo20\Saloon\Tests\Fixtures\Mocking\CallableMockResponse;
1010
use Sammyjo20\Saloon\Exceptions\SaloonNoMockResponsesProvidedException;
1111
use Sammyjo20\Saloon\Tests\Fixtures\Connectors\QueryParameterConnector;
1212
use Sammyjo20\Saloon\Tests\Fixtures\Requests\DifferentServiceUserRequest;

tests/Fixtures/Mocking/CallableMockResponse.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Sammyjo20\Saloon\Http\MockResponse;
66
use Sammyjo20\Saloon\Http\SaloonRequest;
7-
use Sammyjo20\Saloon\Http\SaloonResponse;
87

98
class CallableMockResponse
109
{
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Sammyjo20\Saloon\Tests\Fixtures\Requests;
4+
5+
class SubRequest extends UserRequestWithBootPlugin
6+
{
7+
}

tests/Unit/PluginTest.php

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

33
use Sammyjo20\Saloon\Managers\RequestManager;
4+
use Sammyjo20\Saloon\Tests\Fixtures\Requests\SubRequest;
45
use Sammyjo20\Saloon\Tests\Fixtures\Requests\UserRequestWithBootPlugin;
56

67
test('a plugin boot method has access to the request', function () {
@@ -10,3 +11,11 @@
1011
expect($requestManager->getHeaders())->toHaveKey('X-Plugin-User-Id', 1);
1112
expect($requestManager->getHeaders())->toHaveKey('X-Plugin-Group-Id', 2);
1213
});
14+
15+
test('sub-request does not need to use plugins', function () {
16+
$requestManager = new RequestManager(new SubRequest(1, 2));
17+
$requestManager->hydrate();
18+
19+
expect($requestManager->getHeaders())->toHaveKey('X-Plugin-User-Id', 1);
20+
expect($requestManager->getHeaders())->toHaveKey('X-Plugin-Group-Id', 2);
21+
});

0 commit comments

Comments
 (0)