Passed
Push — master ( 6f905d...2edd34 )
by Oleg
02:55
created

Get::generate()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 16
nc 1
nop 0
dl 0
loc 25
rs 8.8571
c 0
b 0
f 0
ccs 17
cts 17
cp 1
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DFCodeGeneration\Generator\Tests;
5
6
use Zend\Code\Generator\ClassGenerator;
7
use Zend\Code\Generator\FileGenerator;
8
use Zend\Code\Generator\MethodGenerator;
9
use Zend\Code\Generator\ParameterGenerator;
10
11
class Get extends AbstractTest
12
{
13 1
    public function generate(): string
14
    {
15 1
        $class = new ClassGenerator($this->getClassName());
16
17 1
        $class->addMethodFromGenerator(
18 1
            (new MethodGenerator('_before'))
19 1
                ->setParameter((new ParameterGenerator('I'))->setType('\ApiTester'))
20 1
                ->setBody($this->generateHaveInRepo())
21
        );
22
23 1
        $class->addMethodFromGenerator(
24 1
            (new MethodGenerator('getEntity'))
25 1
                ->setParameter((new ParameterGenerator('I'))->setType('\ApiTester'))
26 1
                ->setBody($this->getSuccessCase())
27
        );
28
29 1
        $class->addMethodFromGenerator(
30 1
            (new MethodGenerator('getNonExistingEntity'))
31 1
                ->setParameter((new ParameterGenerator('I'))->setType('\ApiTester'))
32 1
                ->setBody($this->getNonExistingCase())
33
        );
34
35 1
        return (new FileGenerator())
36 1
            ->setClass($class)
37 1
            ->generate();
38
    }
39
40 1
    private function getSuccessCase(): string
41
    {
42
        $body = <<<'BODY'
43 1
$I->wantTo('get %1$s');
44
$I->haveHttpHeader('Content-Type', 'application/json');
45
$I->sendGET('/%1$s/%2$d');
46
$I->seeResponseCodeIs(HttpCode::OK);
47
$I->seeResponseContainsJson([
48
    'success' => true,
49
    'data' => [
50
        '%1$s' => %3$s
51
    ]
52
]);
53
BODY;
54
55 1
        $provider = $this->getLatestProvider();
56
57 1
        return sprintf($body, $provider->getShortName(), $provider->getId(), var_export($provider->getPostParams(), true));
58
    }
59
60 1
    private function getNonExistingCase(): string
61
    {
62
        $body = <<<'BODY'
63 1
$I->wantTo('get non-existing %1$s');
64
$I->haveHttpHeader('Content-Type', 'application/json');
65
$I->sendGET('/%1$s/0');
66
$I->seeResponseCodeIs(HttpCode::NOT_FOUND);
67
$I->seeResponseContainsJson([
68
    'success' => false,
69
    'data' => [
70
        '%1$s' => null
71
    ]
72
]);
73
BODY;
74
75 1
        return sprintf($body, $this->getLatestProvider()->getShortName());
76
    }
77
78 1
    public function getClassName(): string
79
    {
80 1
        return 'Get' . $this->getLatestProvider()->getBaseName() . 'Cest';
81
    }
82
}
83