Passed
Pull Request — master (#9)
by Iakov
03:31
created

BuildCreateFormStepTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 53
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testRequiresBefore() 0 12 1
A testCanBeConstructed() 0 9 1
A testExecute() 0 23 1
1
<?php
2
3
namespace Kami\ApiCoreBundle\Tests\RequestProcessor\Step\Create;
4
5
use Doctrine\Common\Annotations\Reader;
6
use Kami\ApiCoreBundle\RequestProcessor\ProcessorResponse;
7
use Kami\ApiCoreBundle\RequestProcessor\Step\Common\GetEntityFromReflectionStep;
8
use Kami\ApiCoreBundle\RequestProcessor\Step\Common\GetReflectionFromRequestStep;
9
use Kami\ApiCoreBundle\RequestProcessor\Step\Common\ValidateResourceAccessStep;
10
use Kami\ApiCoreBundle\RequestProcessor\Step\Create\BuildCreateFormStep;
11
use Kami\ApiCoreBundle\Security\AccessManager;
12
use Kami\ApiCoreBundle\Tests\Entity\MyModel;
13
use PHPUnit\Framework\TestCase;
14
use Symfony\Component\Form\FormBuilderInterface;
15
use Symfony\Component\Form\FormFactoryInterface;
16
use Symfony\Component\Form\FormInterface;
17
use Symfony\Component\HttpFoundation\Request;
18
19
class BuildCreateFormStepTest extends TestCase
20
{
21
22
    public function testCanBeConstructed()
23
    {
24
        $formFactoryMock = $this->createMock(FormFactoryInterface::class);
25
        $accessManager = $this->createMock(AccessManager::class);
26
        $readerMock = $this->createMock(Reader::class);
27
28
        $step = new BuildCreateFormStep($formFactoryMock, $accessManager, $readerMock);
29
30
        $this->assertInstanceOf(BuildCreateFormStep::class, $step);
31
    }
32
33
34
    public function testExecute()
35
    {
36
        $formMock = $this->createMock(FormInterface::class);
37
        $formBuilderInterfaceMock = $this->createMock(FormBuilderInterface::class);
38
        $formBuilderInterfaceMock->expects($this->any())->method('add')->willReturn($formBuilderInterfaceMock);
39
        $formBuilderInterfaceMock->expects($this->any())->method('getForm')->willReturn($formMock);
40
        $request = new Request();
41
42
        $formFactoryMock = $this->createMock(FormFactoryInterface::class);
43
        $formFactoryMock->expects($this->any())->method('createNamedBuilder')->willReturn($formBuilderInterfaceMock);
44
        $accessManager = $this->createMock(AccessManager::class);
45
        $readerMock = $this->createMock(Reader::class);
46
47
        $readerMock->expects($this->any())->method('getPropertyAnnotation')->willReturn([]);
48
49
        $accessManager->expects($this->any())->method('canCreateProperty')->willReturn(true);
50
51
        $step = new BuildCreateFormStep($formFactoryMock, $accessManager, $readerMock);
52
        $step->setRequest($request);
53
        $step->setPreviousResponse(new ProcessorResponse($request, ['reflection' => new \ReflectionClass(MyModel::class)]));
54
        $response = $step->execute();
55
56
        $this->assertInstanceOf(FormInterface::class, $response->getData()['form']);
57
58
    }
59
60
    public function testRequiresBefore()
61
    {
62
        $formFactoryMock = $this->createMock(FormFactoryInterface::class);
63
        $accessManager = $this->createMock(AccessManager::class);
64
        $readerMock = $this->createMock(Reader::class);
65
66
        $step = new BuildCreateFormStep($formFactoryMock, $accessManager, $readerMock);
67
        $this->assertEquals([
68
            ValidateResourceAccessStep::class,
69
            GetEntityFromReflectionStep::class,
70
            GetReflectionFromRequestStep::class
71
        ], $step->requiresBefore());
72
    }
73
}