Failed Conditions
Push — master ( 481507...cfb9d3 )
by
unknown
12:41
created

ServerTest::resultToArray()   A

Complexity

Conditions 5
Paths 12

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 11
nc 12
nop 2
dl 0
loc 20
rs 9.6111
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AppTest\Api;
6
7
use Application\Api\Server;
8
use Application\Model\User;
9
use ApplicationTest\Traits\TestWithTransaction;
10
use PHPUnit\Framework\TestCase;
11
use Zend\Diactoros\ServerRequest;
12
use Zend\Expressive\Session\Session;
13
use Zend\Expressive\Session\SessionMiddleware;
14
15
class ServerTest extends TestCase
16
{
17
    use TestWithTransaction;
18
19
    /**
20
     * @dataProvider providerQuery
21
     *
22
     * @param null|string $user
23
     * @param ServerRequest $request
24
     * @param array $expected
25
     */
26
    public function testQuery(?string $user, ServerRequest $request, array $expected): void
27
    {
28
        User::setCurrent(_em()->getRepository(User::class)->getByLogin($user));
29
30
        // Use this flag to easily debug API test issues
31
        $debug = false;
32
33
        // Configure server
34
        $server = new Server($debug);
35
36
        // Execute query
37
        $result = $server->execute($request);
38
39
        $actual = $this->resultToArray($result, $debug);
40
41
        if ($debug) {
0 ignored issues
show
introduced by
The condition $debug is always false.
Loading history...
42
            ve($actual);
43
            unset($actual['errors'][0]['trace']);
44
        }
45
46
        self::assertEquals($expected, $actual);
47
    }
48
49
    public function providerQuery(): array
50
    {
51
        $data = [];
52
        foreach (glob('tests/data/query/*.php') as $file) {
53
            $name = str_replace('-', ' ', basename($file, '.php'));
54
            $user = preg_replace('/\d/', '', explode(' ', $name)[0]);
55
            if ($user === 'anonymous') {
56
                $user = null;
57
            }
58
59
            $args = require $file;
60
61
            // Convert arg into request
62
            $request = new ServerRequest();
63
            $args[0] = $request
64
                ->withMethod('POST')
65
                ->withHeader('content-type', ['application/json'])
66
                ->withParsedBody($args[0])
67
                ->withAttribute(SessionMiddleware::SESSION_ATTRIBUTE, new Session([]));
68
69
            array_unshift($args, $user);
70
            $data[$name] = $args;
71
        }
72
73
        return $data;
74
    }
75
76
    /**
77
     * @param ExecutionResult|ExecutionResult[] $result
78
     * @param bool $debug
79
     *
80
     * @return array
81
     */
82
    private function resultToArray($result, bool $debug): array
83
    {
84
        $isSingle = !is_array($result);
85
        if ($isSingle) {
86
            $result = [$result];
87
        }
88
89
        foreach ($result as &$one) {
90
            $one = $one->toArray();
91
            if ($debug) {
92
                ve($one);
93
                unset($one['errors'][0]['trace']);
94
            }
95
        }
96
97
        if ($isSingle) {
98
            $result = reset($result);
99
        }
100
101
        return $result;
102
    }
103
}
104