Skip to content

Commit

Permalink
add product-payload class (#111)
Browse files Browse the repository at this point in the history
  • Loading branch information
wachterjohannes authored Jan 28, 2021
1 parent 5689792 commit 429f08c
Show file tree
Hide file tree
Showing 8 changed files with 355 additions and 1 deletion.
56 changes: 56 additions & 0 deletions Payload/ProductPayload.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
namespace Sulu\Bundle\SyliusConsumerBundle\Payload;

use Sulu\Bundle\SyliusConsumerBundle\Common\Payload;
use Sulu\Exception\FeatureNotImplementedException;

class ProductPayload
{
Expand All @@ -38,6 +39,61 @@ public function getCode(): string
return $this->code;
}

public function isEnabled(): bool
{
return $this->payload->getBoolValue('enabled');
}

public function getMainTaxonId(): int
{
return $this->payload->getIntValue('mainTaxonId');
}

/**
* @return int[]
*/
public function getTaxonIds(): array
{
return array_map(function (array $taxon) {
return $taxon['taxonId'];
}, $this->payload->getArrayValue('productTaxons'));
}

/**
* @return ProductTranslationPayload[]
*/
public function getTranslations(): array
{
$translations = [];
foreach ($this->payload->getArrayValue('translations') as $translationPayload) {
$translation = new ProductTranslationPayload($translationPayload);
$translations[$translation->getLocale()] = $translation;
}

return $translations;
}

/**
* @return ProductVariantPayload[]
*/
public function getVariants(): array
{
$variants = [];
foreach ($this->payload->getArrayValue('variants') as $variantPayload) {
$variants[] = new ProductVariantPayload($variantPayload['code'], $variantPayload);
}

return $variants;
}

/**
* @return mixed[]
*/
public function getImages(): array
{
throw new FeatureNotImplementedException('Images are not implemented');
}

public function getPayload(): Payload
{
return $this->payload;
Expand Down
75 changes: 75 additions & 0 deletions Payload/ProductTranslationPayload.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) MASSIVE ART WebServices GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\SyliusConsumerBundle\Payload;

use Sulu\Bundle\SyliusConsumerBundle\Common\Payload;
use Sulu\Component\Localization\Localization;

class ProductTranslationPayload
{
/**
* @var Payload
*/
private $payload;

public function __construct(array $payload)
{
$this->payload = new Payload($payload);
}

public function getLocale(): string
{
return $this->getLocalization()->getLocale();
}

public function getLocalization(): Localization
{
return Localization::createFromString($this->payload->getStringValue('locale'), Localization::LCID);
}

public function getName(): string
{
return $this->payload->getStringValue('name');
}

public function getSlug(): string
{
return $this->payload->getStringValue('slug');
}

public function getDescription(): string
{
return $this->payload->getStringValue('description');
}

public function getShortDescription(): string
{
return $this->payload->getStringValue('shortDescription');
}

public function getMetaKeywords(): ?string
{
return $this->payload->getNullableStringValue('metaKeywords');
}

public function getMetaDescription(): ?string
{
return $this->payload->getNullableStringValue('metaDescription');
}

public function getPayload(): Payload
{
return $this->payload;
}
}
9 changes: 9 additions & 0 deletions Payload/TaxonPayload.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
namespace Sulu\Bundle\SyliusConsumerBundle\Payload;

use Sulu\Bundle\SyliusConsumerBundle\Common\Payload;
use Sulu\Exception\FeatureNotImplementedException;

class TaxonPayload
{
Expand Down Expand Up @@ -78,6 +79,14 @@ public function getTranslations(): array
return $translations;
}

/**
* @return mixed[]
*/
public function getImages(): array
{
throw new FeatureNotImplementedException('Images are not implemented');
}

public function getPayload(): Payload
{
return $this->payload;
Expand Down
2 changes: 2 additions & 0 deletions Resources/config/taxon_category_adapter.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="Sulu\Bundle\SyliusConsumerBundle\Repository\TaxonCategoryBridgeRepositoryInterface" alias="sulu.repository.taxon_category_bridge"/>

<service id="Sulu\Bundle\SyliusConsumerBundle\Adapter\TaxonCategoryAdapter">
<argument type="service" id="sulu.repository.taxon_category_bridge"/>
<argument type="service" id="sulu.repository.category"/>
Expand Down
2 changes: 1 addition & 1 deletion Resources/doc/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ sulu_sylius_consumer:
framework:
messenger:
transports:
sulu_sylius_transport: '%env(SYLIUS_MESSENGER_TRANSPORT_DSN)%'
sulu_sylius_transport: '%env(SULU_SYLIUS_MESSENGER_TRANSPORT_DSN)%'
buses:
sulu_sylius_producer.messenger_bus:
middleware:
Expand Down
64 changes: 64 additions & 0 deletions Tests/MockSyliusData.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,68 @@ final class MockSyliusData
],
'images' => [],
];

const PRODUCT = [
'id' => 1,
'code' => 'Everyday_white_basic_T_Shirt',
'enabled' => true,
'mainTaxonId' => 4,
'productTaxons' => [
[
'id' => 1,
'taxonId' => 2,
'position' => 0,
'customData' => [],
],
[
'id' => 2,
'taxonId' => 4,
'position' => 1,
'customData' => [],
],
],
'translations' => [
[
'locale' => 'en_US',
'name' => 'Everyday white basic T-Shirt',
'slug' => 'everyday-white-basic-t-shirt',
'description' => 'Quia nihil dignissimos expedita quia neque odio qui sunt. Nemo animi maxime rem qui quaerat eos. Eum ipsam aut aliquid cum et in sint.
Est cumque illum saepe aliquam est. Ullam impedit ipsa aut nostrum est sunt nesciunt. Ut sint saepe ullam sed dolorum atque eos accusamus.
Expedita voluptatum magnam est vitae voluptas eos. Maiores voluptatibus quos enim expedita voluptatibus aut. Non ducimus nesciunt voluptas deleniti.',
'shortDescription' => 'Sequi doloribus minus quis quibusdam. Architecto optio sit inventore quibusdam magni voluptatem. Non sed ex mollitia nisi nemo velit quidem.',
'metaKeywords' => null,
'metaDescription' => null,
'customData' => [],
],
],
'images' => [
[
'id' => 1,
'type' => 'main',
'path' => '23/d6/bab23ff05421d888c688112110c5.jpg',
'filename' => null,
'customData' => [],
],
],
'customData' => [],
'variants' => [
[
'id' => 1,
'code' => 'Everyday_white_basic_T_Shirt-variant-0',
'position' => 0,
'translations' => [
'en_US' => [
'locale' => 'en_US',
'id' => 1,
'name' => 'S',
],
],
'version' => 1,
'onHold' => 0,
'onHand' => 7,
],
],
];
}
69 changes: 69 additions & 0 deletions Tests/Unit/Payload/ProductPayloadTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) MASSIVE ART WebServices GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\SyliusConsumerBundle\Tests\Unit\Payload;

use PHPUnit\Framework\TestCase;
use Sulu\Bundle\SyliusConsumerBundle\Payload\ProductPayload;
use Sulu\Bundle\SyliusConsumerBundle\Tests\MockSyliusData;

class ProductPayloadTest extends TestCase
{
public function testGetCode(): void
{
$entity = new ProductPayload(MockSyliusData::PRODUCT['code'], MockSyliusData::PRODUCT);

$this->assertEquals(MockSyliusData::PRODUCT['code'], $entity->getCode());
}

public function testIsEnabled(): void
{
$entity = new ProductPayload(MockSyliusData::PRODUCT['code'], MockSyliusData::PRODUCT);

$this->assertTrue($entity->isEnabled());
}

public function testGetMainTaxonId(): void
{
$entity = new ProductPayload(MockSyliusData::PRODUCT['code'], MockSyliusData::PRODUCT);

$this->assertEquals(MockSyliusData::PRODUCT['mainTaxonId'], $entity->getMainTaxonId());
}

public function testGetTaxonIds(): void
{
$entity = new ProductPayload(MockSyliusData::PRODUCT['code'], MockSyliusData::PRODUCT);

$this->assertEquals([2, 4], $entity->getTaxonIds());
}

public function testGetTranslations(): void
{
$entity = new ProductPayload(MockSyliusData::PRODUCT['code'], MockSyliusData::PRODUCT);

$translations = $entity->getTranslations();
$this->assertCount(1, $translations);

$this->assertEquals(MockSyliusData::PRODUCT['translations'][0], $translations['en_us']->getPayload()->getData());
}

public function testGetVariants(): void
{
$entity = new ProductPayload(MockSyliusData::PRODUCT['code'], MockSyliusData::PRODUCT);

$variants = $entity->getVariants();
$this->assertCount(1, $variants);

$this->assertEquals(MockSyliusData::PRODUCT['variants'][0], $variants[0]->getPayload()->getData());
}
}
Loading

0 comments on commit 429f08c

Please sign in to comment.