Completed
Push — master ( ead026...e06fe9 )
by Michał
302:23 queued 302:00
created

Bundle/CoreBundle/Fixture/TshirtProductFixture.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

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
namespace Sylius\Bundle\CoreBundle\Fixture;
13
14
use Sylius\Bundle\FixturesBundle\Fixture\AbstractFixture;
15
use Sylius\Component\Attribute\AttributeType\TextAttributeType;
16
use Sylius\Component\Resource\Repository\RepositoryInterface;
17
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
18
use Symfony\Component\OptionsResolver\OptionsResolver;
19
20
/**
21
 * @author Kamil Kokot <[email protected]>
22
 */
23
final class TshirtProductFixture extends AbstractFixture
24
{
25
    /**
26
     * @var TaxonFixture
27
     */
28
    private $taxonFixture;
29
30
    /**
31
     * @var RepositoryInterface
32
     */
33
    private $taxonRepository;
34
35
    /**
36
     * @var ProductAttributeFixture
37
     */
38
    private $productAttributeFixture;
39
40
    /**
41
     * @var ProductOptionFixture
42
     */
43
    private $productOptionFixture;
44
45
    /**
46
     * @var ProductArchetypeFixture
47
     */
48
    private $productArchetypeFixture;
49
50
    /**
51
     * @var ProductFixture
52
     */
53
    private $productFixture;
54
55
    /**
56
     * @var \Faker\Generator
57
     */
58
    private $faker;
59
60
    /**
61
     * @var OptionsResolver
62
     */
63
    private $optionsResolver;
64
65
    /**
66
     * @param TaxonFixture $taxonFixture
67
     * @param RepositoryInterface $taxonRepository
68
     * @param ProductAttributeFixture $productAttributeFixture
69
     * @param ProductOptionFixture $productOptionFixture
70
     * @param ProductArchetypeFixture $productArchetypeFixture
71
     * @param ProductFixture $productFixture
72
     */
73
    public function __construct(
74
        TaxonFixture $taxonFixture,
75
        RepositoryInterface $taxonRepository,
76
        ProductAttributeFixture $productAttributeFixture,
77
        ProductOptionFixture $productOptionFixture,
78
        ProductArchetypeFixture $productArchetypeFixture,
79
        ProductFixture $productFixture
80
    ) {
81
        $this->taxonFixture = $taxonFixture;
82
        $this->taxonRepository = $taxonRepository;
83
        $this->productAttributeFixture = $productAttributeFixture;
84
        $this->productOptionFixture = $productOptionFixture;
85
        $this->productArchetypeFixture = $productArchetypeFixture;
86
        $this->productFixture = $productFixture;
87
88
        $this->faker = \Faker\Factory::create();
89
        $this->optionsResolver =
90
            (new OptionsResolver())
91
                ->setRequired('amount')
92
                ->setAllowedTypes('amount', 'int')
93
        ;
94
    }
95
96
    /**
97
     * {@inheritdoc}
98
     */
99
    public function getName()
100
    {
101
        return 'tshirt_product';
102
    }
103
104
    /**
105
     * {@inheritdoc}
106
     */
107
    public function load(array $options)
108
    {
109
        $options = $this->optionsResolver->resolve($options);
110
111
        $this->taxonFixture->load(['custom' => [[
112
            'code' => 'category',
113
            'name' => 'Category',
114
            'children' => [
115
                [
116
                    'code' => 't_shirts',
117
                    'name' => 'T-Shirts',
118
                    'children' => [
119
                        [
120
                            'code' => 'mens_t_shirts',
121
                            'name' => 'Men',
122
                        ],
123
                        [
124
                            'code' => 'womens_t_shirts',
125
                            'name' => 'Women',
126
                        ],
127
                    ],
128
                ],
129
            ],
130
        ]]]);
131
132
        $this->productAttributeFixture->load(['custom' => [
133
            ['name' => 'T-Shirt brand', 'code' => 'TSHIRT-BRAND', 'type' => TextAttributeType::TYPE],
134
            ['name' => 'T-Shirt collection', 'code' => 'TSHIRT-COLLECTION', 'type' => TextAttributeType::TYPE],
135
            ['name' => 'T-Shirt material', 'code' => 'TSHIRT-MATERIAL', 'type' => TextAttributeType::TYPE],
136
        ]]);
137
138
        $this->productOptionFixture->load(['custom' => [
139
            [
140
                'name' => 'T-Shirt color',
141
                'code' => 'TSHIRT-COLOR',
142
                'values' => [
143
                    'TSHIRT-COLOR-RED' => 'Red',
144
                    'TSHIRT-COLOR-BLACK' => 'Black',
145
                    'TSHIRT-COLOR-WHITE' => 'White',
146
                ],
147
            ],
148
            [
149
                'name' => 'T-Shirt size',
150
                'code' => 'TSHIRT-SIZE',
151
                'values' => [
152
                    'TSHIRT-SIZE-S' => 'S',
153
                    'TSHIRT-SIZE-M' => 'M',
154
                    'TSHIRT-SIZE-L' => 'L',
155
                    'TSHIRT-SIZE-XL' => 'XL',
156
                    'TSHIRT-SIZE-XXL' => 'XXL',
157
                ],
158
            ],
159
        ]]);
160
161
        $this->productArchetypeFixture->load(['custom' => [
162
            [
163
                'name' => 'T-Shirt',
164
                'code' => 'TSHIRT',
165
                'product_attributes' => ['TSHIRT-brand', 'TSHIRT-COLLECTION', 'TSHIRT-MATERIAL'],
166
                'product_options' => ['TSHIRT-COLOR', 'TSHIRT-SIZE'],
167
            ],
168
        ]]);
169
170
        $products = [];
171
        for ($i = 0; $i < $options['amount']; ++$i) {
172
            $categoryTaxonCode = $this->faker->randomElement(['mens_t_shirts', 'womens_t_shirts']);
0 ignored issues
show
The call to randomElement() misses some required arguments starting with $'b'.
Loading history...
173
174
            $products[] = [
175
                'name' => sprintf('T-Shirt "%s"', $this->faker->word),
176
                'code' => $this->faker->uuid,
177
                'main_taxon' => $categoryTaxonCode,
178
                'product_archetype' => 'TSHIRT',
179
                'taxons' => [$categoryTaxonCode],
180
                'product_attributes' => [
181
                    'TSHIRT-brand' => $this->faker->randomElement(['Nike', 'Adidas', 'JKM-476 Streetwear', 'Potato', 'Centipede Wear']),
0 ignored issues
show
The call to randomElement() misses some required arguments starting with $'b'.
Loading history...
182
                    'TSHIRT-COLLECTION' => sprintf('Sylius %s %s', $this->faker->randomElement(['Summer', 'Winter', 'Spring', 'Autumn']), mt_rand(1995, 2012)),
0 ignored issues
show
The call to randomElement() misses some required arguments starting with $'b'.
Loading history...
183
                    'TSHIRT-MATERIAL' => $this->faker->randomElement(['Centipede', 'Wool', 'Centipede 10% / Wool 90%', 'Potato 100%']),
0 ignored issues
show
The call to randomElement() misses some required arguments starting with $'b'.
Loading history...
184
                ],
185
                'images' => [sprintf('%s/../Resources/fixtures/%s', __DIR__, 't-shirts.jpg')],
186
            ];
187
        }
188
189
        $this->productFixture->load(['custom' => $products]);
190
    }
191
192
    /**
193
     * {@inheritdoc}
194
     */
195
    protected function configureOptionsNode(ArrayNodeDefinition $optionsNode)
196
    {
197
        $optionsNode
198
            ->children()
199
                ->integerNode('amount')->isRequired()->min(0)->end()
200
        ;
201
    }
202
}
203