Issues (3641)

Business/Manager/ProductManagerTest.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerTest\Zed\ProductCartConnector\Business\Manager;
9
10
use Codeception\Test\Unit;
11
use Generated\Shared\Transfer\CartChangeTransfer;
12
use Generated\Shared\Transfer\ItemTransfer;
13
use Generated\Shared\Transfer\LocaleTransfer;
14
use Generated\Shared\Transfer\ProductConcreteTransfer;
15
use Spryker\Zed\ProductCartConnector\Business\Expander\ProductExpander;
16
use Spryker\Zed\ProductCartConnector\Dependency\Facade\ProductCartConnectorToLocaleInterface;
17
use Spryker\Zed\ProductCartConnector\Dependency\Facade\ProductCartConnectorToProductInterface;
18
19
/**
20
 * Auto-generated group annotations
21
 *
22
 * @group SprykerTest
23
 * @group Zed
24
 * @group ProductCartConnector
25
 * @group Business
26
 * @group Manager
27
 * @group ProductManagerTest
28
 * Add your own group annotations below this line
29
 */
30
class ProductManagerTest extends Unit
31
{
32
    /**
33
     * @var string
34
     */
35
    public const CONCRETE_SKU = 'concrete sku';
36
37
    /**
38
     * @var string
39
     */
40
    public const ABSTRACT_SKU = 'abstract sku';
41
42
    /**
43
     * @var string
44
     */
45
    public const ID_PRODUCT_CONCRETE = 'id product concrete';
46
47
    /**
48
     * @var string
49
     */
50
    public const ID_PRODUCT_ABSTRACT = 'id product abstract';
51
52
    /**
53
     * @var string
54
     */
55
    public const PRODUCT_NAME = 'product name';
56
57
    /**
58
     * @return void
59
     */
60
    public function testExpandItemsMustAddProductIdToAllCartItems(): void
61
    {
62
        $changeTransfer = $this->getChangeTransfer();
63
64
        $productConcreteTransfer = new ProductConcreteTransfer();
65
        $productConcreteTransfer->setSku(static::CONCRETE_SKU);
66
        $productConcreteTransfer->setAbstractSku(static::ABSTRACT_SKU);
67
        $productConcreteTransfer->setFkProductAbstract(1);
68
69
        $productManager = $this->getProductManager($productConcreteTransfer, static::PRODUCT_NAME);
70
        $result = $productManager->expandItems($changeTransfer);
71
72
        $changedItemTransfer = $result->getItems()[0];
73
        $this->assertSame($productConcreteTransfer->getIdProductConcrete(), $changedItemTransfer->getId());
74
    }
75
76
    /**
77
     * @return void
78
     */
79
    public function testExpandItemsMustAddAbstractSkuToAllCartItems(): void
80
    {
81
        $changeTransfer = $this->getChangeTransfer();
82
83
        $productConcreteTransfer = new ProductConcreteTransfer();
84
        $productConcreteTransfer->setSku(static::CONCRETE_SKU);
85
        $productConcreteTransfer->setAbstractSku(static::ABSTRACT_SKU);
86
87
        $productConcreteTransfer->setFkProductAbstract(1);
88
89
        $productManager = $this->getProductManager($productConcreteTransfer, static::PRODUCT_NAME);
90
        $result = $productManager->expandItems($changeTransfer);
91
92
        $changedItemTransfer = $result->getItems()[0];
93
        $this->assertSame($productConcreteTransfer->getAbstractSku(), $changedItemTransfer->getAbstractSku());
94
    }
95
96
    /**
97
     * @return void
98
     */
99
    public function testExpandItemsMustAddAbstractIdToAllCartItems(): void
100
    {
101
        $changeTransfer = $this->getChangeTransfer();
102
103
        $productConcreteTransfer = new ProductConcreteTransfer();
104
        $productConcreteTransfer->setSku(static::CONCRETE_SKU);
105
        $productConcreteTransfer->setIdProductConcrete(static::ID_PRODUCT_ABSTRACT);
106
        $productConcreteTransfer->setFkProductAbstract(1);
107
        $productConcreteTransfer->setAbstractSku(static::ABSTRACT_SKU);
108
109
        $productManager = $this->getProductManager($productConcreteTransfer, static::PRODUCT_NAME);
110
        $result = $productManager->expandItems($changeTransfer);
111
112
        $changedItemTransfer = $result->getItems()[0];
113
        $this->assertSame($productConcreteTransfer->getFkProductAbstract(), $changedItemTransfer->getIdProductAbstract());
114
    }
115
116
    /**
117
     * @return \Generated\Shared\Transfer\CartChangeTransfer
118
     */
119
    private function getChangeTransfer(): CartChangeTransfer
120
    {
121
        $changeTransfer = new CartChangeTransfer();
122
        $itemTransfer = new ItemTransfer();
123
        $itemTransfer->setSku(static::CONCRETE_SKU);
124
        $changeTransfer->addItem($itemTransfer);
125
126
        return $changeTransfer;
127
    }
128
129
    /**
130
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $returnValue
131
     * @param string $localizedName
132
     *
133
     * @return \Spryker\Zed\ProductCartConnector\Business\Expander\ProductExpander
134
     */
135
    public function getProductManager(ProductConcreteTransfer $returnValue, string $localizedName): ProductExpander
136
    {
137
        $mockProductFacade = $this->getMockProductFacade();
138
139
        $mockProductFacade->expects($this->once())
0 ignored issues
show
The method expects() does not exist on Spryker\Zed\ProductCartC...ectorToProductInterface. ( Ignorable by Annotation )

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

139
        $mockProductFacade->/** @scrutinizer ignore-call */ 
140
                            expects($this->once())

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
140
            ->method('getRawProductConcreteTransfersByConcreteSkus')
141
            ->will($this->returnValue([$returnValue]));
142
143
        $mockProductFacade->expects($this->once())
144
            ->method('getLocalizedProductConcreteName')
145
            ->will($this->returnValue($localizedName));
146
147
        $mockLocaleFacade = $this->getMockLocaleFacade();
148
        $mockLocaleFacade->expects($this->once())
149
            ->method('getCurrentLocale')
150
            ->will($this->returnValue(new LocaleTransfer()));
151
152
        return new ProductExpander($mockLocaleFacade, $mockProductFacade);
153
    }
154
155
    /**
156
     * @return \Spryker\Zed\ProductCartConnector\Dependency\Facade\ProductCartConnectorToProductInterface|\PHPUnit\Framework\MockObject\MockObject
157
     */
158
    private function getMockProductFacade(): ProductCartConnectorToProductInterface
159
    {
160
        return $this->getMockBuilder(ProductCartConnectorToProductInterface::class)
161
            ->setMethods([
162
                'getProductConcrete',
163
                'getLocalizedProductConcreteName',
164
                'hasProductAbstract',
165
                'hasProductConcrete',
166
                'isProductConcreteActive',
167
                'getRawProductConcreteBySku',
168
                'getRawProductConcreteTransfersByConcreteSkus',
169
                'getProductUrls',
170
                'getRawProductAbstractTransfersByAbstractSkus',
171
                'getProductConcretesByCriteria',
172
            ])
173
            ->disableOriginalConstructor()
174
            ->getMock();
175
    }
176
177
    /**
178
     * @return \Spryker\Zed\ProductCartConnector\Dependency\Facade\ProductCartConnectorToLocaleInterface|\PHPUnit\Framework\MockObject\MockObject
179
     */
180
    private function getMockLocaleFacade(): ProductCartConnectorToLocaleInterface
181
    {
182
        return $this->getMockBuilder(ProductCartConnectorToLocaleInterface::class)
183
            ->setMethods(['getCurrentLocale'])
184
            ->disableOriginalConstructor()
185
            ->getMock();
186
    }
187
}
188