Completed
Push — master ( 055f1b...f72a4b )
by Pavel
52s
created

RpcTest::testController()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3.0067

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 15
ccs 10
cts 11
cp 0.9091
rs 9.4285
cc 3
eloc 10
nc 3
nop 2
crap 3.0067
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: batanov.pavel
5
 * Date: 16.05.2016
6
 * Time: 13:44
7
 */
8
9
namespace Bankiru\Api\Rpc\Tests;
10
11
use Bankiru\Api\Rpc\Exception\InvalidMethodParametersException;
12
use Bankiru\Api\Rpc\Routing\Exception\MethodNotFoundException;
13
use Bankiru\Api\Rpc\Tests\Fixtures\Kernel;
14
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
15
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
16
17
class RpcTest extends WebTestCase
18
{
19
    public function getArgumentVariants()
20
    {
21
        return [
22
            'missing all'                         => [[], false],
23
            'missing array'                       => [['noDefault' => 1], false],
24
            'not an array'                        => [['noDefault' => 1, 'array' => 2], false],
25
            'correct'                             => [['noDefault' => 1, 'array' => ['test1' => 2, 'abc']], true],
26
            'correct 2'                           => [['noDefault' => 1, 'array' => ['test', 'test2']], true],
27
            'correct w explicit default override' => [
28
                ['default' => 'new_value', 'noDefault' => 1, 'array' => []],
29
                true,
30
            ],
31
        ];
32
    }
33
34
    /**
35
     * @dataProvider getArgumentVariants
36
     *
37
     * @param array $args
38
     * @param bool  $valid
39
     *
40
     * @throws InvalidMethodParametersException
41
     * @throws \Error
42
     */
43 6
    public function testController(array $args, $valid)
44
    {
45 6
        $client = self::createClient();
46
        try {
47 6
            $client->request(
48 6
                'POST',
49 6
                '/test/',
50 6
                array_replace(['method' => 'test/method',], $args)
51 6
            );
52 6
        } catch (InvalidMethodParametersException $e) {
53 3
            if ($valid) {
54
                throw $e;
55
            }
56
        }
57 6
    }
58
59
    public function getExceptionTestData()
60
    {
61
        return [
62
            'unknown method'  => [
63
                '/not_found_endpoint/',
64
                ['method' => 'test/method', 'arg' => 1],
65
                NotFoundHttpException::class,
66
            ],
67
            'uknown endpoint' => [
68
                '/test/',
69
                ['method' => 'unknown/method', 'arg' => 1],
70
                MethodNotFoundException::class,
71
            ],
72
        ];
73
    }
74
75
    /**
76
     * @dataProvider getExceptionTestData
77
     *
78
     * @param string $endpoint
79
     * @param array  $args
80
     * @param string $exception FQCN
81
     */
82 2
    public function testException($endpoint, $args, $exception)
83
    {
84 2
        $this->setExpectedExceptionRegExp($exception);
85 2
        $client = self::createClient();
86
87 2
        $client->request(
88 2
            'POST',
89 2
            $endpoint,
90
            $args
91 2
        );
92
    }
93
94
    protected static function getKernelClass()
95
    {
96
        return Kernel::class;
97
    }
98
}
99