Skip to content

Commit 687e580

Browse files
Merge pull request #15 from loevgaard/14-fixtures
Fixtures
2 parents dad5ede + 5a3b270 commit 687e580

11 files changed

Lines changed: 190 additions & 1 deletion

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Loevgaard\SyliusBarcodePlugin\Fixture;
6+
7+
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
8+
9+
/**
10+
* It can be used on some custom ProductVariantFixture
11+
* (which Sylius don't have)
12+
*/
13+
trait BarcodeAwareFixtureTrait
14+
{
15+
protected function configureChannelResourceNode(ArrayNodeDefinition $resourceNode): void
16+
{
17+
$resourceNode
18+
->children()
19+
->scalarNode('barcode')
20+
;
21+
}
22+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Loevgaard\SyliusBarcodePlugin\Fixture\Factory;
6+
7+
use Loevgaard\SyliusBarcodePlugin\Model\BarcodeAwareInterface;
8+
use Symfony\Component\OptionsResolver\OptionsResolver;
9+
10+
/**
11+
* It can be used on some custom ProductVariantExampleFactory
12+
* (which Sylius don't have)
13+
*/
14+
trait BarcodeAwareExampleFactoryTrait
15+
{
16+
protected function configureBarcodeOptions(OptionsResolver $resolver, int $chanceOfRandomBarcode = 90): void
17+
{
18+
$resolver
19+
->setDefault('barcode', static function (): string {
20+
static $faker;
21+
22+
if (null === $faker) {
23+
$faker = \Faker\Factory::create();
24+
}
25+
26+
return $faker->ean13;
27+
})
28+
->setAllowedTypes('barcode', ['null', 'string'])
29+
;
30+
}
31+
32+
protected function setBarcodeField(BarcodeAwareInterface $barcodeAware, array $resolvedOptions = []): void
33+
{
34+
$barcodeAware->setBarcode($resolvedOptions['barcode']);
35+
}
36+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Loevgaard\SyliusBarcodePlugin\Fixture\Factory;
6+
7+
use Sylius\Bundle\CoreBundle\Fixture\Factory\ProductExampleFactory as BaseProductExampleFactory;
8+
use Sylius\Component\Core\Model\ProductInterface;
9+
10+
class ProductExampleFactory extends BaseProductExampleFactory
11+
{
12+
use ProductExampleFactoryTrait;
13+
14+
public function create(array $options = []): ProductInterface
15+
{
16+
$product = parent::create($options);
17+
18+
$this->setRandomBarcodesToVariants($product);
19+
20+
return $product;
21+
}
22+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Loevgaard\SyliusBarcodePlugin\Fixture\Factory;
6+
7+
use Loevgaard\SyliusBarcodePlugin\Model\ProductVariantInterface as LoevgaardBarcodeProductVariantInterface;
8+
use Sylius\Component\Core\Model\ProductInterface;
9+
use Sylius\Component\Core\Model\ProductVariantInterface;
10+
use Webmozart\Assert\Assert;
11+
12+
trait ProductExampleFactoryTrait
13+
{
14+
protected function setRandomBarcodesToVariants(ProductInterface $product): void
15+
{
16+
static $faker;
17+
18+
if (null === $faker) {
19+
$faker = \Faker\Factory::create();
20+
}
21+
22+
/** @var ProductVariantInterface|LoevgaardBarcodeProductVariantInterface $variant */
23+
foreach ($product->getVariants() as $variant) {
24+
Assert::isInstanceOf($variant, LoevgaardBarcodeProductVariantInterface::class);
25+
26+
$variant->setBarcode($faker->ean13);
27+
}
28+
}
29+
}

src/Fixture/ProductFixture.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Loevgaard\SyliusBarcodePlugin\Fixture;
6+
7+
use Sylius\Bundle\CoreBundle\Fixture\ProductFixture as BaseProductFixture;
8+
9+
class ProductFixture extends BaseProductFixture
10+
{
11+
public function getName(): string
12+
{
13+
return 'loevgaard_sylius_barcode_product';
14+
}
15+
}

src/Resources/config/app/config.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,17 @@ framework:
33
buses:
44
loevgaard_sylius_barcode.command_bus: ~
55

6+
sylius_grid:
7+
grids:
8+
sylius_admin_product_variant:
9+
fields:
10+
code:
11+
position: 1
12+
barcode:
13+
type: string
14+
label: loevgaard_sylius_barcode.ui.barcode
15+
position: 2
16+
filters:
17+
barcode:
18+
type: string
19+
label: loevgaard_sylius_barcode.ui.barcode
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
sylius_fixtures:
2+
suites:
3+
default:
4+
fixtures:
5+
6+
cap_product_with_barcode:
7+
name: loevgaard_sylius_barcode_product
8+
options:
9+
custom:
10+
- name: 'Knitted burgundy winter cap with barcode'
11+
tax_category: 'other'
12+
channels:
13+
- 'FASHION_WEB'
14+
main_taxon: 'caps_with_pompons'
15+
taxons:
16+
- 'caps'
17+
- 'caps_with_pompons'
18+
product_attributes:
19+
cap_brand: 'You are breathtaking'
20+
cap_collection: 'Sylius Winter 2019'
21+
cap_material: '100% wool'
22+
images:
23+
- { path: '@SyliusCoreBundle/Resources/fixtures/caps/cap_01.jpg', type: 'main' }

src/Resources/config/services.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<import resource="services/checker.xml"/>
88
<import resource="services/command.xml"/>
99
<import resource="services/event_listener.xml"/>
10+
<import resource="services/fixture.xml"/>
1011
<import resource="services/form.xml"/>
1112
<import resource="services/messenger.xml"/>
1213
<import resource="services/validator.xml"/>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
9+
<service id="loevgaard_sylius_barcode.fixture.example_factory.product"
10+
class="Loevgaard\SyliusBarcodePlugin\Fixture\Factory\ProductExampleFactory"
11+
parent="sylius.fixture.example_factory.product">
12+
</service>
13+
14+
<service id="loevgaard_sylius_barcode.fixture.product"
15+
class="Loevgaard\SyliusBarcodePlugin\Fixture\ProductFixture"
16+
parent="sylius.fixture.product">
17+
<argument index="1" type="service" id="loevgaard_sylius_barcode.fixture.example_factory.product" />
18+
19+
<tag name="sylius_fixtures.fixture" />
20+
</service>
21+
22+
</services>
23+
</container>
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
loevgaard_sylius_barcode:
22
form:
33
product_variant:
4-
barcode: Barcode
4+
barcode: Barcode
5+
ui:
6+
barcode: Barcode

0 commit comments

Comments
 (0)