Issues (3641)

_support/PriceCartConnectorBusinessTester.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\PriceCartConnector;
9
10
use ArrayObject;
11
use Codeception\Actor;
12
use Codeception\Stub;
13
use Generated\Shared\DataBuilder\QuoteBuilder;
14
use Generated\Shared\Transfer\CartChangeTransfer;
15
use Generated\Shared\Transfer\CartPreCheckResponseTransfer;
16
use Generated\Shared\Transfer\CurrencyTransfer;
17
use Generated\Shared\Transfer\ItemTransfer;
18
use Generated\Shared\Transfer\MessageTransfer;
19
use Generated\Shared\Transfer\MoneyValueTransfer;
20
use Generated\Shared\Transfer\PriceProductTransfer;
21
use Generated\Shared\Transfer\ProductConcreteTransfer;
22
use Generated\Shared\Transfer\QuoteTransfer;
23
use Generated\Shared\Transfer\StoreTransfer;
24
use Spryker\Zed\Kernel\Container;
25
use Spryker\Zed\PriceCartConnector\Business\Builder\ItemIdentifierBuilder;
26
use Spryker\Zed\PriceCartConnector\Business\Builder\ItemIdentifierBuilderInterface;
27
use Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorBusinessFactory;
28
use Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorFacade;
29
use Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorFacadeInterface;
30
use Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartConnectorToCurrencyFacadeInterface;
31
use Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceInterface;
32
use Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceProductInterface;
33
use Spryker\Zed\PriceCartConnector\Dependency\Service\PriceCartConnectorToUtilEncodingServiceBridge;
34
use Spryker\Zed\PriceCartConnector\Dependency\Service\PriceCartConnectorToUtilEncodingServiceInterface;
35
use Spryker\Zed\PriceCartConnector\Dependency\Service\PriceCartConnectorToUtilTextServiceBridge;
36
use Spryker\Zed\PriceCartConnector\Dependency\Service\PriceCartConnectorToUtilTextServiceInterface;
37
use Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig;
38
use Spryker\Zed\PriceCartConnector\PriceCartConnectorDependencyProvider;
39
use SprykerTest\Zed\PriceCartConnector\Business\Fixture\PriceProductFacadeStub;
40
41
/**
42
 * @method void wantToTest($text)
43
 * @method void wantTo($text)
44
 * @method void execute($callable)
45
 * @method void expectTo($prediction)
46
 * @method void expect($prediction)
47
 * @method void amGoingTo($argumentation)
48
 * @method void am($role)
49
 * @method void lookForwardTo($achieveValue)
50
 * @method void comment($description)
51
 * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = null)
52
 * @method \Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorFacadeInterface getFacade()
53
 *
54
 * @SuppressWarnings(PHPMD)
55
 */
56
class PriceCartConnectorBusinessTester extends Actor
57
{
58
    use _generated\PriceCartConnectorBusinessTesterActions;
59
60
    /**
61
     * @var string
62
     */
63
    protected const STORE_DE = 'DE';
64
65
    /**
66
     * @uses \Spryker\Shared\Price\PriceConfig::PRICE_MODE_GROSS
67
     *
68
     * @var string
69
     */
70
    protected const PRICE_MODE_GROSS = 'GROSS_MODE';
71
72
    /**
73
     * @var string
74
     */
75
    protected const TEST_SKU_1 = 'TEST_SKU_1';
76
77
    /**
78
     * @var string
79
     */
80
    protected const TEST_CURRENCY_1 = 'TCF';
81
82
    /**
83
     * @var string
84
     */
85
    protected const TEST_STORE_NAME = 'DE';
86
87
    /**
88
     * @var int
89
     */
90
    protected const TEST_ITEM_ID = 123;
91
92
    /**
93
     * @param array $itemsData
94
     * @param \Generated\Shared\Transfer\CurrencyTransfer $currencyTransfer
95
     *
96
     * @return \Generated\Shared\Transfer\QuoteTransfer
97
     */
98
    public function createQuoteWithItems(array $itemsData, CurrencyTransfer $currencyTransfer): QuoteTransfer
99
    {
100
        $storeTransfer = $this->haveStore([StoreTransfer::NAME => static::STORE_DE]);
101
        $itemsTransfers = $this->createItemTransfersBySkuAndPriceCollection($itemsData, $currencyTransfer, $storeTransfer);
102
103
        return (new QuoteBuilder([
104
            QuoteTransfer::STORE => $storeTransfer,
105
            QuoteTransfer::CURRENCY => $currencyTransfer,
106
            QuoteTransfer::PRICE_MODE => static::PRICE_MODE_GROSS,
107
        ]))->build()->setItems(new ArrayObject($itemsTransfers));
108
    }
109
110
    /**
111
     * @param array $itemsData
112
     * @param \Generated\Shared\Transfer\CurrencyTransfer $currencyTransfer
113
     * @param \Generated\Shared\Transfer\StoreTransfer $storeTransfer
114
     *
115
     * @return array<\Generated\Shared\Transfer\ItemTransfer>
116
     */
117
    protected function createItemTransfersBySkuAndPriceCollection(
118
        array $itemsData,
119
        CurrencyTransfer $currencyTransfer,
120
        StoreTransfer $storeTransfer
121
    ): array {
122
        $itemsTransfers = [];
123
        foreach ($itemsData as $sku => $itemPrice) {
124
            $productConcreteTransfer = $this->haveProduct([
125
                ProductConcreteTransfer::SKU => $sku,
126
                ProductConcreteTransfer::ABSTRACT_SKU => $sku,
127
            ]);
128
129
            if ($itemPrice !== null) {
130
                $this->havePriceProduct([
131
                    PriceProductTransfer::SKU_PRODUCT_ABSTRACT => $productConcreteTransfer->getAbstractSku(),
132
                    PriceProductTransfer::SKU_PRODUCT => $productConcreteTransfer->getSku(),
133
                    PriceProductTransfer::MONEY_VALUE => [
134
                        MoneyValueTransfer::NET_AMOUNT => $itemPrice,
135
                        MoneyValueTransfer::GROSS_AMOUNT => $itemPrice,
136
                        MoneyValueTransfer::STORE => $storeTransfer,
137
                        MoneyValueTransfer::CURRENCY => $currencyTransfer,
138
                    ],
139
                ]);
140
            }
141
142
            $itemsTransfers[] = (new ItemTransfer())->fromArray($productConcreteTransfer->toArray(), true);
143
        }
144
145
        return $itemsTransfers;
146
    }
147
148
    /**
149
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig $priceCartConnectorConfigMock
150
     * @param \Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceProductInterface $priceProductFacadeStub
151
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceInterface $priceFacadeMock
152
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartConnectorToCurrencyFacadeInterface $currencyFacadeMock
153
     *
154
     * @return \Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorFacadeInterface
155
     */
156
    public function createAndConfigurePriceCartConnectorFacade(
157
        PriceCartConnectorConfig $priceCartConnectorConfigMock,
158
        PriceCartToPriceProductInterface $priceProductFacadeStub,
159
        PriceCartToPriceInterface $priceFacadeMock,
160
        PriceCartConnectorToCurrencyFacadeInterface $currencyFacadeMock
161
    ): PriceCartConnectorFacadeInterface {
162
        $priceCartConnectorBusinessFactory = $this->createAndConfigurePriceCartConnectorBusinessFactory(
163
            $priceCartConnectorConfigMock,
164
            $priceProductFacadeStub,
165
            $priceFacadeMock,
166
            $currencyFacadeMock,
167
        );
168
169
        $priceCartConnectorFacade = $this->createPriceCartConnectorFacade();
170
        $priceCartConnectorFacade->setFactory($priceCartConnectorBusinessFactory);
171
172
        return $priceCartConnectorFacade;
173
    }
174
175
    /**
176
     * @return \Generated\Shared\Transfer\CartChangeTransfer
177
     */
178
    public function createCartChangeTransferWithItem(): CartChangeTransfer
179
    {
180
        $currencyTransfer = (new CurrencyTransfer())->setCode(static::TEST_CURRENCY_1);
181
        $storeTransfer = (new StoreTransfer())->setName(static::TEST_STORE_NAME);
182
183
        $quoteTransfer = (new QuoteTransfer())
184
            ->setCurrency($currencyTransfer)
185
            ->setStore($storeTransfer)
186
            ->setPriceMode(static::PRICE_MODE_GROSS);
187
188
        $itemTransfer = (new ItemTransfer())
189
            ->setSku(static::TEST_SKU_1)
190
            ->setId(static::TEST_ITEM_ID);
191
192
        return (new CartChangeTransfer())
193
            ->setQuote($quoteTransfer)
194
            ->addItem($itemTransfer);
195
    }
196
197
    /**
198
     * @return \Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceProductInterface
199
     */
200
    public function createPriceProductFacadeStub(): PriceCartToPriceProductInterface
201
    {
202
        return new PriceProductFacadeStub();
203
    }
204
205
    /**
206
     * @param \Generated\Shared\Transfer\CartPreCheckResponseTransfer $cartPreCheckResponseTransfer
207
     *
208
     * @return array<string>
209
     */
210
    public function getCartPreCheckResponseTransferMessages(CartPreCheckResponseTransfer $cartPreCheckResponseTransfer): array
211
    {
212
        return array_map(function (MessageTransfer $messageTransfer) {
213
            return $messageTransfer->getValue();
214
        }, $cartPreCheckResponseTransfer->getMessages()->getArrayCopy());
215
    }
216
217
    /**
218
     * @return \Spryker\Zed\PriceCartConnector\Dependency\Service\PriceCartConnectorToUtilEncodingServiceInterface
219
     */
220
    public function createPriceCartConnectorToUtilEncodingServiceBridge(): PriceCartConnectorToUtilEncodingServiceInterface
221
    {
222
        return new PriceCartConnectorToUtilEncodingServiceBridge(
223
            $this->getLocator()->utilEncoding()->service(),
224
        );
225
    }
226
227
    /**
228
     * @return \Spryker\Zed\PriceCartConnector\Dependency\Service\PriceCartConnectorToUtilTextServiceInterface
229
     */
230
    public function createPriceCartConnectorToUtilTextServiceBridge(): PriceCartConnectorToUtilTextServiceInterface
231
    {
232
        return new PriceCartConnectorToUtilTextServiceBridge(
233
            $this->getLocator()->utilText()->service(),
234
        );
235
    }
236
237
    /**
238
     * @param \Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig $priceCartConnectorConfig
239
     *
240
     * @return \Spryker\Zed\PriceCartConnector\Business\Builder\ItemIdentifierBuilderInterface
241
     */
242
    public function createItemIdentifierBuilder(PriceCartConnectorConfig $priceCartConnectorConfig): ItemIdentifierBuilderInterface
243
    {
244
        return new ItemIdentifierBuilder(
245
            $priceCartConnectorConfig,
246
            $this->createPriceCartConnectorToUtilEncodingServiceBridge(),
247
            $this->createPriceCartConnectorToUtilTextServiceBridge(),
248
        );
249
    }
250
251
    /**
252
     * @param list<string> $itemFieldsForIdentifier
253
     * @param bool $isZeroPriceEnabledForCartActions
254
     *
255
     * @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig
256
     */
257
    public function createPriceCartConnectorConfigMock(
258
        array $itemFieldsForIdentifier = [],
259
        bool $isZeroPriceEnabledForCartActions = false
260
    ): PriceCartConnectorConfig {
261
        return Stub::make(PriceCartConnectorConfig::class, [
262
            'getItemFieldsForIdentifier' => $itemFieldsForIdentifier,
263
            'isZeroPriceEnabledForCartActions' => $isZeroPriceEnabledForCartActions,
264
            'getItemFieldsForIsSameItemComparison' => [ItemTransfer::SKU],
265
        ]);
266
    }
267
268
    /**
269
     * @return \Spryker\Zed\Kernel\Container
270
     */
271
    protected function createContainer(): Container
272
    {
273
        return new Container();
274
    }
275
276
    /**
277
     * @param \Spryker\Zed\Kernel\Container $container
278
     * @param \Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceProductInterface $priceProductFacadeStub
279
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceInterface $priceFacadeMock
280
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartConnectorToCurrencyFacadeInterface $currencyFacadeMock
281
     *
282
     * @return \Spryker\Zed\Kernel\Container
283
     */
284
    protected function configureContainer(
285
        Container $container,
286
        PriceCartToPriceProductInterface $priceProductFacadeStub,
287
        PriceCartToPriceInterface $priceFacadeMock,
288
        PriceCartConnectorToCurrencyFacadeInterface $currencyFacadeMock
289
    ): Container {
290
        $container->set(PriceCartConnectorDependencyProvider::FACADE_PRICE_PRODUCT, function (Container $container) use ($priceProductFacadeStub) {
291
            return $priceProductFacadeStub;
292
        });
293
294
        $container->set(PriceCartConnectorDependencyProvider::FACADE_PRICE, function (Container $container) use ($priceFacadeMock) {
295
            return $priceFacadeMock;
296
        });
297
298
        $container->set(PriceCartConnectorDependencyProvider::FACADE_CURRENCY, function (Container $container) use ($currencyFacadeMock) {
299
            return $currencyFacadeMock;
300
        });
301
302
        $container->set(PriceCartConnectorDependencyProvider::PLUGINS_CART_ITEM_QUANTITY_COUNTER_STRATEGY, function (Container $container) {
303
            return [];
304
        });
305
306
        $container->set(PriceCartConnectorDependencyProvider::SERVICE_UTIL_TEXT, function (Container $container) {
307
            return $this->createPriceCartConnectorToUtilTextServiceBridge();
308
        });
309
310
        $container->set(PriceCartConnectorDependencyProvider::SERVICE_UTIL_ENCODING, function (Container $container) {
311
            return $this->createPriceCartConnectorToUtilEncodingServiceBridge();
312
        });
313
314
        return $container;
315
    }
316
317
    /**
318
     * @return \Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorBusinessFactory
319
     */
320
    protected function createPriceCartConnectorBusinessFactory(): PriceCartConnectorBusinessFactory
321
    {
322
        return new PriceCartConnectorBusinessFactory();
323
    }
324
325
    /**
326
     * @return \Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorFacadeInterface
327
     */
328
    protected function createPriceCartConnectorFacade(): PriceCartConnectorFacadeInterface
329
    {
330
        return new PriceCartConnectorFacade();
331
    }
332
333
    /**
334
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig $priceCartConnectorConfigMock
335
     * @param bool $isZeroPriceEnabledForCartActions
336
     *
337
     * @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig
338
     */
339
    protected function configurePriceCartConnectorConfigMock(
340
        PriceCartConnectorConfig $priceCartConnectorConfigMock,
341
        bool $isZeroPriceEnabledForCartActions
342
    ): PriceCartConnectorConfig {
343
        $priceCartConnectorConfigMock
344
            ->method('isZeroPriceEnabledForCartActions')
0 ignored issues
show
The method method() does not exist on Spryker\Zed\PriceCartCon...riceCartConnectorConfig. ( Ignorable by Annotation )

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

344
            ->/** @scrutinizer ignore-call */ 
345
              method('isZeroPriceEnabledForCartActions')

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...
345
            ->willReturn($isZeroPriceEnabledForCartActions);
346
347
        $priceCartConnectorConfigMock
348
            ->method('getItemFieldsForIsSameItemComparison')
349
            ->willReturn(['sku']);
350
351
        return $priceCartConnectorConfigMock;
352
    }
353
354
    /**
355
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\PriceCartConnectorConfig $priceCartConnectorConfigMock
356
     * @param \Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceProductInterface $priceProductFacadeStub
357
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartToPriceInterface $priceFacadeMock
358
     * @param \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\PriceCartConnector\Dependency\Facade\PriceCartConnectorToCurrencyFacadeInterface $currencyFacadeMock
359
     *
360
     * @return \Spryker\Zed\PriceCartConnector\Business\PriceCartConnectorBusinessFactory
361
     */
362
    protected function createAndConfigurePriceCartConnectorBusinessFactory(
363
        PriceCartConnectorConfig $priceCartConnectorConfigMock,
364
        PriceCartToPriceProductInterface $priceProductFacadeStub,
365
        PriceCartToPriceInterface $priceFacadeMock,
366
        PriceCartConnectorToCurrencyFacadeInterface $currencyFacadeMock
367
    ): PriceCartConnectorBusinessFactory {
368
        $container = $this->createContainer();
369
        $container = $this->configureContainer($container, $priceProductFacadeStub, $priceFacadeMock, $currencyFacadeMock);
370
371
        $priceCartConnectorBusinessFactory = $this->createPriceCartConnectorBusinessFactory();
372
        $priceCartConnectorBusinessFactory->setConfig($priceCartConnectorConfigMock);
373
        $priceCartConnectorBusinessFactory->setContainer($container);
374
375
        return $priceCartConnectorBusinessFactory;
376
    }
377
}
378