Completed
Push — scalar-types/resource ( 4814fd )
by Kamil
23:02
created

DefaultFormBuilderSpec::it_is_initializable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
nc 1
cc 1
eloc 2
nop 0
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace spec\Sylius\Bundle\ResourceBundle\Doctrine\ORM\Form\Builder;
15
16
use Doctrine\DBAL\Types\Type;
17
use Doctrine\ORM\EntityManagerInterface;
18
use Doctrine\ORM\Mapping\ClassMetadataInfo;
19
use PhpSpec\ObjectBehavior;
20
use Prophecy\Argument;
21
use Sylius\Bundle\ResourceBundle\Doctrine\ORM\Form\Builder\DefaultFormBuilder;
22
use Sylius\Bundle\ResourceBundle\Form\Builder\DefaultFormBuilderInterface;
23
use Sylius\Component\Resource\Metadata\MetadataInterface;
24
use Symfony\Component\Form\FormBuilderInterface;
25
26
/**
27
 * @author Paweł Jędrzejewski <[email protected]>
28
 */
29
final class DefaultFormBuilderSpec extends ObjectBehavior
30
{
31
    function let(EntityManagerInterface $entityManager): void
32
    {
33
        $this->beConstructedWith($entityManager);
34
    }
35
36
    function it_is_a_default_form_builder(): void
37
    {
38
        $this->shouldImplement(DefaultFormBuilderInterface::class);
39
    }
40
41
    function it_does_not_support_entities_with_multiple_primary_keys(
42
        MetadataInterface $metadata,
43
        FormBuilderInterface $formBuilder,
44
        EntityManagerInterface $entityManager,
45
        ClassMetadataInfo $classMetadataInfo
46
    ): void {
47
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
48
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
49
        $classMetadataInfo->identifier = ['id', 'slug'];
50
51
        $this
52
            ->shouldThrow(\RuntimeException::class)
53
            ->during('build', [$metadata, $formBuilder, []])
54
        ;
55
    }
56
57
    function it_excludes_non_natural_identifier_from_the_field_list(
58
        MetadataInterface $metadata,
59
        FormBuilderInterface $formBuilder,
60
        EntityManagerInterface $entityManager,
61
        ClassMetadataInfo $classMetadataInfo
62
    ): void {
63
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
64
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
65
        $classMetadataInfo->fieldNames = ['id', 'name', 'description', 'enabled'];
66
        $classMetadataInfo->identifier = ['id'];
67
        $classMetadataInfo->isIdentifierNatural()->willReturn(false);
68
        $classMetadataInfo->getAssociationMappings()->willReturn([]);
69
70
        $classMetadataInfo->getTypeOfField('name')->willReturn(Type::STRING);
71
        $classMetadataInfo->getTypeOfField('description')->willReturn(Type::TEXT);
72
        $classMetadataInfo->getTypeOfField('enabled')->willReturn(Type::BOOLEAN);
73
74
        $formBuilder->add('id', Argument::cetera())->shouldNotBeCalled();
75
        $formBuilder->add('name', null, [])->shouldBeCalled();
76
        $formBuilder->add('description', null, [])->shouldBeCalled();
77
        $formBuilder->add('enabled', null, [])->shouldBeCalled();
78
79
        $this->build($metadata, $formBuilder, []);
80
    }
81
82
    function it_does_not_exclude_natural_identifier_from_the_field_list(
83
        MetadataInterface $metadata,
84
        FormBuilderInterface $formBuilder,
85
        EntityManagerInterface $entityManager,
86
        ClassMetadataInfo $classMetadataInfo
87
    ): void {
88
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
89
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
90
        $classMetadataInfo->fieldNames = ['id', 'name', 'description', 'enabled'];
91
        $classMetadataInfo->identifier = ['id'];
92
        $classMetadataInfo->isIdentifierNatural()->willReturn(true);
93
        $classMetadataInfo->getAssociationMappings()->willReturn([]);
94
95
        $classMetadataInfo->getTypeOfField('id')->willReturn(Type::INTEGER);
96
        $classMetadataInfo->getTypeOfField('name')->willReturn(Type::STRING);
97
        $classMetadataInfo->getTypeOfField('description')->willReturn(Type::TEXT);
98
        $classMetadataInfo->getTypeOfField('enabled')->willReturn(Type::BOOLEAN);
99
100
        $formBuilder->add('id', null, [])->shouldBeCalled();
101
        $formBuilder->add('name', null, [])->shouldBeCalled();
102
        $formBuilder->add('description', null, [])->shouldBeCalled();
103
        $formBuilder->add('enabled', null, [])->shouldBeCalled();
104
105
        $this->build($metadata, $formBuilder, []);
106
    }
107
108
    function it_uses_metadata_to_create_appropriate_fields(
109
        MetadataInterface $metadata,
110
        FormBuilderInterface $formBuilder,
111
        EntityManagerInterface $entityManager,
112
        ClassMetadataInfo $classMetadataInfo
113
    ): void {
114
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
115
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
116
        $classMetadataInfo->fieldNames = ['name', 'description', 'enabled'];
117
        $classMetadataInfo->isIdentifierNatural()->willReturn(true);
118
        $classMetadataInfo->getAssociationMappings()->willReturn([]);
119
120
        $classMetadataInfo->getTypeOfField('name')->willReturn(Type::STRING);
121
        $classMetadataInfo->getTypeOfField('description')->willReturn(Type::TEXT);
122
        $classMetadataInfo->getTypeOfField('enabled')->willReturn(Type::BOOLEAN);
123
124
        $formBuilder->add('name', null, [])->shouldBeCalled();
125
        $formBuilder->add('description', null, [])->shouldBeCalled();
126
        $formBuilder->add('enabled', null, [])->shouldBeCalled();
127
128
        $this->build($metadata, $formBuilder, []);
129
    }
130
131
    function it_uses_single_text_widget_for_datetime_field(
132
        MetadataInterface $metadata,
133
        FormBuilderInterface $formBuilder,
134
        EntityManagerInterface $entityManager,
135
        ClassMetadataInfo $classMetadataInfo
136
    ): void {
137
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
138
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
139
        $classMetadataInfo->fieldNames = ['name', 'description', 'enabled', 'publishedAt'];
140
        $classMetadataInfo->isIdentifierNatural()->willReturn(true);
141
        $classMetadataInfo->getAssociationMappings()->willReturn([]);
142
143
        $classMetadataInfo->getTypeOfField('name')->willReturn(Type::STRING);
144
        $classMetadataInfo->getTypeOfField('description')->willReturn(Type::TEXT);
145
        $classMetadataInfo->getTypeOfField('enabled')->willReturn(Type::BOOLEAN);
146
        $classMetadataInfo->getTypeOfField('publishedAt')->willReturn(Type::DATETIME);
147
148
        $formBuilder->add('name', null, [])->shouldBeCalled();
149
        $formBuilder->add('description', null, [])->shouldBeCalled();
150
        $formBuilder->add('enabled', null, [])->shouldBeCalled();
151
        $formBuilder->add('publishedAt', null, ['widget' => 'single_text'])->shouldBeCalled();
152
153
        $this->build($metadata, $formBuilder, []);
154
    }
155
156
    function it_also_creates_fields_for_relations_other_than_one_to_many(
157
        MetadataInterface $metadata,
158
        FormBuilderInterface $formBuilder,
159
        EntityManagerInterface $entityManager,
160
        ClassMetadataInfo $classMetadataInfo
161
    ): void {
162
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
163
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
164
        $classMetadataInfo->fieldNames = ['name', 'description', 'enabled', 'publishedAt'];
165
        $classMetadataInfo->isIdentifierNatural()->willReturn(true);
166
        $classMetadataInfo->getAssociationMappings()->willReturn([
167
            'category' => ['type' => ClassMetadataInfo::MANY_TO_ONE],
168
            'users' => ['type' => ClassMetadataInfo::ONE_TO_MANY],
169
        ]);
170
171
        $classMetadataInfo->getTypeOfField('name')->willReturn(Type::STRING);
172
        $classMetadataInfo->getTypeOfField('description')->willReturn(Type::TEXT);
173
        $classMetadataInfo->getTypeOfField('enabled')->willReturn(Type::BOOLEAN);
174
        $classMetadataInfo->getTypeOfField('publishedAt')->willReturn(Type::DATETIME);
175
176
        $formBuilder->add('name', null, [])->shouldBeCalled();
177
        $formBuilder->add('description', null, [])->shouldBeCalled();
178
        $formBuilder->add('enabled', null, [])->shouldBeCalled();
179
        $formBuilder->add('publishedAt', null, ['widget' => 'single_text'])->shouldBeCalled();
180
        $formBuilder->add('category', null, ['choice_label' => 'id'])->shouldBeCalled();
181
        $formBuilder->add('users', Argument::cetera())->shouldNotBeCalled();
182
183
        $this->build($metadata, $formBuilder, []);
184
    }
185
186
    function it_excludes_common_fields_like_createdAt_and_updatedAt(
0 ignored issues
show
Coding Style introduced by
function it_excludes_com...eatedAt_and_updatedAt() does not seem to conform to the naming convention (^(?:(?:[a-z]|__)[a-zA-Z0-9]*|[a-z][a-z0-9_]*)$).

This check examines a number of code elements and verifies that they conform to the given naming conventions.

You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.

Loading history...
187
        MetadataInterface $metadata,
188
        FormBuilderInterface $formBuilder,
189
        EntityManagerInterface $entityManager,
190
        ClassMetadataInfo $classMetadataInfo
191
    ): void {
192
        $metadata->getClass('model')->willReturn('AppBundle\Entity\Book');
193
        $entityManager->getClassMetadata('AppBundle\Entity\Book')->willReturn($classMetadataInfo);
194
        $classMetadataInfo->fieldNames = ['name', 'description', 'enabled', 'createdAt', 'updatedAt'];
195
        $classMetadataInfo->isIdentifierNatural()->willReturn(true);
196
        $classMetadataInfo->getAssociationMappings()->willReturn([]);
197
198
        $classMetadataInfo->getTypeOfField('name')->willReturn(Type::STRING);
199
        $classMetadataInfo->getTypeOfField('description')->willReturn(Type::TEXT);
200
        $classMetadataInfo->getTypeOfField('enabled')->willReturn(Type::BOOLEAN);
201
        $classMetadataInfo->getTypeOfField('createdAt')->willReturn(Type::DATETIME);
202
        $classMetadataInfo->getTypeOfField('updatedAt')->willReturn(Type::DATETIME);
203
204
        $formBuilder->add('name', null, [])->shouldBeCalled();
205
        $formBuilder->add('description', null, [])->shouldBeCalled();
206
        $formBuilder->add('enabled', null, [])->shouldBeCalled();
207
        $formBuilder->add('createdAt', Argument::cetera())->shouldNotBeCalled();
208
        $formBuilder->add('updatedAt', Argument::cetera())->shouldNotBeCalled();
209
210
        $this->build($metadata, $formBuilder, []);
211
    }
212
}
213