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

Delete::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 Delete 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('deleteEntity'))
25 1
                ->setParameter((new ParameterGenerator('I'))->setType('\ApiTester'))
26 1
                ->setBody($this->getSuccessCase())
27
        );
28
29 1
        $class->addMethodFromGenerator(
30 1
            (new MethodGenerator('deleteNonExistingEntity'))
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('delete %1$s');
44
$I->haveHttpHeader('Content-Type', 'application/json');
45
$I->sendDELETE('/%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 1
        $provider = $this->getLatestProvider();
55
56 1
        return sprintf($body, $provider->getShortName(), $provider->getId(), var_export($provider->getPostParams(), true));
57
    }
58
59 1
    private function getNonExistingCase(): string
60
    {
61
        $body = <<<'BODY'
62 1
$I->wantTo('delete non-existing %1$s');
63
$I->haveHttpHeader('Content-Type', 'application/json');
64
$I->sendDELETE('/%1$s/0');
65
$I->seeResponseCodeIs(HttpCode::NOT_FOUND);
66
$I->seeResponseContainsJson([
67
    'success' => false,
68
    'data' => [
69
        '%1$s' => null
70
    ]
71
]);
72
BODY;
73
74 1
        return sprintf($body, $this->getLatestProvider()->getShortName());
75
    }
76
77 1
    public function getClassName(): string
78
    {
79 1
        return 'Delete' . $this->getLatestProvider()->getBaseName() . 'Cest';
80
    }
81
}
82