AnnotationTestBase::flattenControllerArray()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
/**
3
 * This file is part of the silex-annotation-provider package.
4
 * For the full copyright and license information, please view the LICENSE
5
 * file that was distributed with this source code.
6
 *
7
 * @license       MIT License
8
 * @copyright (c) 2018, Dana Desrosiers <[email protected]>
9
 */
10
11
namespace DDesrosiers\Test\SilexAnnotations;
12
13
use DDesrosiers\SilexAnnotations\AnnotationService;
14
use DDesrosiers\SilexAnnotations\AnnotationServiceProvider;
15
use PHPUnit\Framework\TestCase;
16
use Silex\Application;
17
use Silex\Route;
18
use Silex\Route\SecurityTrait;
19
use Symfony\Component\HttpFoundation\Response;
20
use Symfony\Component\HttpKernel\Client;
21
22
class AnnotationTestBase extends TestCase
23
{
24
    const GET_METHOD = 'GET';
25
    const POST_METHOD = 'POST';
26
    const PUT_METHOD = 'PUT';
27
    const DELETE_METHOD = 'DELETE';
28
29
    const STATUS_OK = 200;
30
    const STATUS_REDIRECT = 301;
31
    const STATUS_UNAUTHORIZED = 401;
32
    const STATUS_NOT_FOUND = 404;
33
    const STATUS_ERROR = 500;
34
35
    protected static $CONTROLLER_DIR;
36
37
    /** @var Application */
38
    protected $app;
39
40
    /** @var Client */
41
    protected $client;
42
43
    protected $clientOptions = array();
44
    protected $requestOptions = array();
45
46
    public function setup()
47
    {
48
        self::$CONTROLLER_DIR = __DIR__ . "/Controller";
49
        $this->app = new Application();
50
        $this->app['debug'] = true;
51
    }
52
53
    /**
54
     * @param array $options
55
     * @return AnnotationService
56
     */
57
    protected function registerProviders($options = []): AnnotationService
58
    {
59
        if (!isset($options['annot.controllers'])) {
60
            $options['annot.controllerDir'] = self::$CONTROLLER_DIR;
61
        }
62
63
        $this->app->register(new AnnotationServiceProvider(), $options);
64
        $this->app['route_class'] = SecurityRoute::class;
65
66
        return $this->app['annot'];
67
    }
68
69
    protected function getClient($annotationOptions = array())
70
    {
71
        if (!$this->app->offsetExists('annot')) {
72
            $this->registerProviders($annotationOptions);
73
        }
74
        $this->client = new Client($this->app, $this->clientOptions);
75
    }
76
77
    /**
78
     * @param       $method
79
     * @param       $uri
80
     * @param       $status
81
     * @param array $annotationOptions
82
     */
83
    protected function assertEndPointStatus($method, $uri, $status, $annotationOptions = array())
84
    {
85
        $this->assertStatus($this->makeRequest($method, $uri, $annotationOptions), $status);
0 ignored issues
show
Documentation introduced by
$this->makeRequest($meth...ri, $annotationOptions) is of type object|null, but the function expects a object<Symfony\Component\HttpFoundation\Response>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
86
    }
87
88
    /**
89
     * @param       $method
90
     * @param       $uri
91
     * @param array $annotationOptions
92
     * @return null|Response
93
     */
94
    protected function makeRequest($method, $uri, $annotationOptions = array()): ?Response
95
    {
96
        $_SERVER['REQUEST_URI'] = $uri;
97
        $this->getClient($annotationOptions);
98
        $this->client->request($method, $uri, array(), array(), $this->requestOptions);
99
        $response = $this->client->getResponse();
100
        return $response;
101
    }
102
103
    /**
104
     * @param Response $response
105
     * @param          $status
106
     */
107
    protected function assertStatus(Response $response, $status)
108
    {
109
        $this->assertEquals($status, $response->getStatusCode());
110
    }
111
112
    /**
113
     * @param $controllers
114
     * @return string[]
115
     */
116
    protected function flattenControllerArray($controllers): array
117
    {
118
        array_walk_recursive($controllers, function($a) use (&$flattened) { $flattened[] = $a; });
119
120
        return $flattened;
121
    }
122
}
123
124
class SecurityRoute extends Route
125
{
126
    use SecurityTrait;
127
}