assertSaveProductAbstract()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
c 0
b 0
f 0
dl 0
loc 14
rs 9.9666
cc 2
nc 2
nop 1
1
<?php
2
3
/**
4
 * This file is part of the Spryker Commerce OS.
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
declare(strict_types = 1);
9
10
namespace PyzTest\Zed\Product\Business;
11
12
use Generated\Shared\Transfer\PriceProductTransfer;
13
use Generated\Shared\Transfer\ProductAbstractTransfer;
14
use Generated\Shared\Transfer\ProductImageSetTransfer;
15
use Generated\Shared\Transfer\ProductImageTransfer;
16
17
/**
18
 * Auto-generated group annotations
19
 *
20
 * @group PyzTest
21
 * @group Zed
22
 * @group Product
23
 * @group Business
24
 * @group ProductAbstractManagerTest
25
 * Add your own group annotations below this line
26
 */
27
class ProductAbstractManagerTest extends ProductTestAbstract
28
{
29
    /**
30
     * @return void
31
     */
32
    public function testCreateProductAbstractShouldCreateProductAbstractAndTriggerPlugins(): void
33
    {
34
        $idProductAbstract = $this->productAbstractManager->createProductAbstract($this->productAbstractTransfer);
35
36
        $this->assertTrue($idProductAbstract > 0);
37
        $this->productAbstractTransfer->setIdProductAbstract($idProductAbstract);
38
        $this->assertCreateProductAbstract($this->productAbstractTransfer);
39
    }
40
41
    /**
42
     * @return void
43
     */
44
    public function testSaveProductAbstractShouldUpdateProductAbstractAndTriggerPlugins(): void
45
    {
46
        $idProductAbstract = $this->productAbstractManager->createProductAbstract($this->productAbstractTransfer);
47
        $this->productAbstractTransfer->setIdProductAbstract($idProductAbstract);
48
49
        foreach ($this->productAbstractTransfer->getLocalizedAttributes() as $localizedAttribute) {
50
            $localizedAttribute->setName(
51
                self::UPDATED_PRODUCT_ABSTRACT_NAME[$localizedAttribute->getLocale()->getLocaleName()],
52
            );
53
        }
54
55
        $idProductAbstract = $this->productAbstractManager->saveProductAbstract($this->productAbstractTransfer);
56
57
        $this->productAbstractTransfer->setIdProductAbstract($idProductAbstract);
58
        $this->assertSaveProductAbstract($this->productAbstractTransfer);
59
    }
60
61
    /**
62
     * @return void
63
     */
64
    public function testGetProductAbstractByIdShouldReturnFullyLoadedTransferObject(): void
65
    {
66
        $this->setupDefaultProducts();
67
68
        $productAbstract = $this->productAbstractManager->findProductAbstractById(
69
            $this->productAbstractTransfer->getIdProductAbstract(),
70
        );
71
72
        $this->assertReadProductAbstract($productAbstract);
0 ignored issues
show
Bug introduced by
It seems like $productAbstract can also be of type null; however, parameter $productAbstractTransfer of PyzTest\Zed\Product\Busi...rtReadProductAbstract() does only seem to accept Generated\Shared\Transfer\ProductAbstractTransfer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

72
        $this->assertReadProductAbstract(/** @scrutinizer ignore-type */ $productAbstract);
Loading history...
73
    }
74
75
    /**
76
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
77
     *
78
     * @return void
79
     */
80
    protected function assertCreateProductAbstract(ProductAbstractTransfer $productAbstractTransfer): void
81
    {
82
        $createdProductEntity = $this->productQueryContainer
83
            ->queryProductAbstract()
84
            ->filterByIdProductAbstract($productAbstractTransfer->getIdProductAbstract())
85
            ->findOne();
86
87
        $this->assertNotNull($createdProductEntity);
88
        $this->assertSame($productAbstractTransfer->getSku(), $createdProductEntity->getSku());
89
    }
90
91
    /**
92
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
93
     *
94
     * @return void
95
     */
96
    protected function assertSaveProductAbstract(ProductAbstractTransfer $productAbstractTransfer): void
97
    {
98
        $updatedProductEntity = $this->productQueryContainer
99
            ->queryProductAbstract()
100
            ->filterByIdProductAbstract($productAbstractTransfer->getIdProductAbstract())
101
            ->findOne();
102
103
        $this->assertNotNull($updatedProductEntity);
104
        $this->assertSame($this->productAbstractTransfer->getSku(), $updatedProductEntity->getSku());
105
106
        foreach ($productAbstractTransfer->getLocalizedAttributes() as $localizedAttribute) {
107
            $expectedProductName = self::UPDATED_PRODUCT_ABSTRACT_NAME[$localizedAttribute->getLocale()->getLocaleName()];
108
109
            $this->assertSame($expectedProductName, $localizedAttribute->getName());
110
        }
111
    }
112
113
    /**
114
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
115
     *
116
     * @return void
117
     */
118
    protected function assertReadProductAbstract(ProductAbstractTransfer $productAbstractTransfer): void
119
    {
120
        $this->assertProductPrice($productAbstractTransfer);
121
        $this->assertProductImages($productAbstractTransfer);
122
    }
123
124
    /**
125
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
126
     *
127
     * @return void
128
     */
129
    protected function assertProductPrice(ProductAbstractTransfer $productAbstractTransfer): void
130
    {
131
        foreach ($productAbstractTransfer->getPrices() as $priceProductTransfer) {
132
            $this->assertInstanceOf(PriceProductTransfer::class, $priceProductTransfer);
133
            $this->assertNotNull($priceProductTransfer->getMoneyValue()->getGrossAmount());
134
            $this->assertNotNull($priceProductTransfer->getPriceTypeName());
135
        }
136
    }
137
138
    /**
139
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
140
     *
141
     * @return void
142
     */
143
    protected function assertProductImages(ProductAbstractTransfer $productAbstractTransfer): void
144
    {
145
        /** @var array<\Generated\Shared\Transfer\ProductImageSetTransfer> $imageSetCollection */
146
        $imageSetCollection = (array)$productAbstractTransfer->getImageSets();
147
        $this->assertNotEmpty($imageSetCollection);
148
        $imageSet = $imageSetCollection[0];
149
        $this->assertInstanceOf(ProductImageSetTransfer::class, $imageSet);
150
        $this->assertNotNull($imageSet->getIdProductImageSet());
151
        $this->assertSame($productAbstractTransfer->getIdProductAbstract(), $imageSet->getIdProductAbstract());
152
153
        $productImageCollection = (array)$imageSet->getProductImages();
154
        $this->assertNotEmpty($imageSetCollection);
155
156
        /** @var \Generated\Shared\Transfer\ProductImageTransfer $productImage */
157
        $productImage = $productImageCollection[0];
158
        $this->assertInstanceOf(ProductImageTransfer::class, $productImage);
159
        $this->assertSame(self::IMAGE_URL_LARGE, $productImage->getExternalUrlLarge());
160
        $this->assertSame(self::IMAGE_URL_SMALL, $productImage->getExternalUrlSmall());
161
    }
162
}
163