Failed Conditions
Push — master ( e0fde8...98a030 )
by
unknown
44:34 queued 15:21
created

createSspAssetQuoteItemAttachmentRequestTransfer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 10
rs 10
c 1
b 0
f 0
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 SprykerFeatureTest\Zed\SelfServicePortal\Business\Facade;
9
10
use ArrayObject;
11
use Codeception\Test\Unit;
12
use Generated\Shared\Transfer\CustomerTransfer;
13
use Generated\Shared\Transfer\ItemTransfer;
14
use Generated\Shared\Transfer\QuoteResponseTransfer;
15
use Generated\Shared\Transfer\QuoteTransfer;
16
use Generated\Shared\Transfer\SspAssetQuoteItemAttachmentRequestTransfer;
17
use Generated\Shared\Transfer\SspAssetTransfer;
18
use Spryker\Zed\Quote\Business\QuoteFacadeInterface;
19
use SprykerFeature\Zed\SelfServicePortal\Business\Asset\Quote\QuoteItemFinderInterface;
20
use SprykerFeature\Zed\SelfServicePortal\Business\Asset\Quote\SspAssetQuoteItemSetter;
21
use SprykerFeature\Zed\SelfServicePortal\Business\Asset\Quote\SspAssetQuoteItemSetterInterface;
22
use SprykerFeature\Zed\SelfServicePortal\Business\SelfServicePortalBusinessFactory;
23
use SprykerFeature\Zed\SelfServicePortal\Business\SelfServicePortalFacade;
24
use SprykerFeatureTest\Zed\SelfServicePortal\SelfServicePortalBusinessTester;
25
26
/**
27
 * Auto-generated group annotations
28
 *
29
 * @group SprykerFeatureTest
30
 * @group Zed
31
 * @group SelfServicePortal
32
 * @group Business
33
 * @group Facade
34
 * @group AttachSspAssetToQuoteItemFacadeTest
35
 * Add your own group annotations below this line
36
 */
37
class AttachSspAssetToQuoteItemFacadeTest extends Unit
38
{
39
    /**
40
     * @var string
41
     */
42
    protected const TEST_SSP_ASSET_REFERENCE = 'TEST_ASSET_001';
43
44
    /**
45
     * @var string
46
     */
47
    protected const TEST_SKU = 'TEST_SKU_001';
48
49
    /**
50
     * @var string
51
     */
52
    protected const TEST_GROUP_KEY = 'TEST_GROUP_001';
53
54
    /**
55
     * @var int
56
     */
57
    protected const TEST_QUOTE_ID = 1;
58
59
    /**
60
     * @var string
61
     */
62
    protected const TEST_CUSTOMER_REFERENCE = 'CUSTOMER_001';
63
64
    protected SelfServicePortalBusinessTester $tester;
65
66
    protected QuoteTransfer $quoteTransfer;
67
68
    protected StoreTransfer $storeTransfer;
69
70
    protected function setUp(): void
71
    {
72
        parent::setUp();
73
        $this->quoteTransfer = $this->tester->havePersistentQuote([
74
            QuoteTransfer::CUSTOMER => $this->tester->haveCustomer(),
75
        ]);
76
    }
77
78
    protected function tearDown(): void
79
    {
80
        parent::tearDown();
81
    }
82
83
    public function testAttachSspAssetToQuoteItemSuccess(): void
84
    {
85
        // Arrange
86
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
87
        $expectedQuoteResponseTransfer = $this->createSuccessfulQuoteResponseTransfer();
88
89
        $sspAssetQuoteItemSetterMock = $this->createSspAssetQuoteItemSetterMock();
90
        $sspAssetQuoteItemSetterMock->method('setSspAssetToQuoteItem')
0 ignored issues
show
Bug introduced by
The method method() does not exist on SprykerFeature\Zed\SelfS...uoteItemSetterInterface. ( Ignorable by Annotation )

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

90
        $sspAssetQuoteItemSetterMock->/** @scrutinizer ignore-call */ 
91
                                      method('setSspAssetToQuoteItem')

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...
91
            ->with($sspAssetQuoteItemAttachmentRequestTransfer)
92
            ->willReturn($expectedQuoteResponseTransfer);
93
94
        $facade = $this->createSelfServicePortalFacadeWithSetter($sspAssetQuoteItemSetterMock);
95
96
        // Act
97
        $quoteResponseTransfer = $facade->attachSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
98
99
        // Assert
100
        $this->assertTrue($quoteResponseTransfer->getIsSuccessful());
101
        $this->assertSame($expectedQuoteResponseTransfer, $quoteResponseTransfer);
102
    }
103
104
    public function testAttachSspAssetToQuoteItemFailure(): void
105
    {
106
        // Arrange
107
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
108
        $expectedQuoteResponseTransfer = $this->createFailedQuoteResponseTransfer();
109
110
        $sspAssetQuoteItemSetterMock = $this->createSspAssetQuoteItemSetterMock();
111
        $sspAssetQuoteItemSetterMock->method('setSspAssetToQuoteItem')
112
            ->with($sspAssetQuoteItemAttachmentRequestTransfer)
113
            ->willReturn($expectedQuoteResponseTransfer);
114
115
        $facade = $this->createSelfServicePortalFacadeWithSetter($sspAssetQuoteItemSetterMock);
116
117
        // Act
118
        $quoteResponseTransfer = $facade->attachSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
119
120
        // Assert
121
        $this->assertFalse($quoteResponseTransfer->getIsSuccessful());
122
        $this->assertSame($expectedQuoteResponseTransfer, $quoteResponseTransfer);
123
    }
124
125
    public function testAttachSspAssetToQuoteItemWithNullAssetReference(): void
126
    {
127
        // Arrange
128
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
129
        $sspAssetQuoteItemAttachmentRequestTransfer->setSspAssetReference(null);
130
        $expectedQuoteResponseTransfer = $this->createSuccessfulQuoteResponseTransfer();
131
132
        $sspAssetQuoteItemSetterMock = $this->createSspAssetQuoteItemSetterMock();
133
        $sspAssetQuoteItemSetterMock->method('setSspAssetToQuoteItem')
134
            ->with($sspAssetQuoteItemAttachmentRequestTransfer)
135
            ->willReturn($expectedQuoteResponseTransfer);
136
137
        $facade = $this->createSelfServicePortalFacadeWithSetter($sspAssetQuoteItemSetterMock);
138
139
        // Act
140
        $quoteResponseTransfer = $facade->attachSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
141
142
        // Assert
143
        $this->assertTrue($quoteResponseTransfer->getIsSuccessful());
144
        $this->assertSame($expectedQuoteResponseTransfer, $quoteResponseTransfer);
145
    }
146
147
    public function testSetSspAssetToQuoteItemSuccess(): void
148
    {
149
        // Arrange
150
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
151
        $quoteFacadeMock = $this->createQuoteFacadeMock();
152
        $quoteItemFinderPluginMock = $this->createQuoteItemFinderPluginMock();
153
154
        $sspAssetQuoteItemSetter = new SspAssetQuoteItemSetter($quoteFacadeMock, $quoteItemFinderPluginMock);
155
156
        // Act
157
        $quoteResponseTransfer = $sspAssetQuoteItemSetter->setSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
158
159
        // Assert
160
        $this->assertTrue($quoteResponseTransfer->getIsSuccessful());
161
        $this->assertNotNull($quoteResponseTransfer->getQuoteTransfer());
162
163
        $quoteTransfer = $quoteResponseTransfer->getQuoteTransfer();
164
        $this->assertEquals($this->quoteTransfer->getIdQuote(), $quoteTransfer->getIdQuote());
165
        $this->assertNotNull($quoteTransfer->getCustomer());
166
        $this->assertEquals($this->quoteTransfer->getCustomer()->getCustomerReference(), $quoteTransfer->getCustomer()->getCustomerReference());
167
    }
168
169
    public function testSetSspAssetToQuoteItemQuoteNotFound(): void
170
    {
171
        // Arrange
172
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
173
        $sspAssetQuoteItemAttachmentRequestTransfer->setIdQuote(999);
174
175
        $quoteFacadeMock = $this->createMock(QuoteFacadeInterface::class);
176
        $quoteFacadeMock->method('findQuoteById')
177
            ->with(999)
178
            ->willReturn((new QuoteResponseTransfer())->setIsSuccessful(false));
179
180
        $quoteItemFinderPluginMock = $this->createQuoteItemFinderPluginMock();
181
182
        $sspAssetQuoteItemSetter = new SspAssetQuoteItemSetter($quoteFacadeMock, $quoteItemFinderPluginMock);
183
184
        // Act
185
        $quoteResponseTransfer = $sspAssetQuoteItemSetter->setSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
186
187
        // Assert
188
        $this->assertFalse($quoteResponseTransfer->getIsSuccessful());
189
    }
190
191
    public function testSetSspAssetToQuoteItemItemNotFound(): void
192
    {
193
        // Arrange
194
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
195
        $quoteFacadeMock = $this->createQuoteFacadeMock();
196
197
        $quoteItemFinderPluginMock = $this->createMock(QuoteItemFinderInterface::class);
198
        $quoteItemFinderPluginMock->method('findItem')->willReturn(null);
199
200
        $sspAssetQuoteItemSetter = new SspAssetQuoteItemSetter($quoteFacadeMock, $quoteItemFinderPluginMock);
201
202
        // Act
203
        $quoteResponseTransfer = $sspAssetQuoteItemSetter->setSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
204
205
        // Assert
206
        $this->assertFalse($quoteResponseTransfer->getIsSuccessful());
207
    }
208
209
    public function testSetSspAssetToQuoteItemRemoveAsset(): void
210
    {
211
        // Arrange
212
        $sspAssetQuoteItemAttachmentRequestTransfer = $this->createSspAssetQuoteItemAttachmentRequestTransfer();
213
        $sspAssetQuoteItemAttachmentRequestTransfer->setSspAssetReference(null);
214
215
        $quoteFacadeMock = $this->createQuoteFacadeMock();
216
        $quoteItemFinderPluginMock = $this->createQuoteItemFinderPluginMock();
217
218
        $sspAssetQuoteItemSetter = new SspAssetQuoteItemSetter($quoteFacadeMock, $quoteItemFinderPluginMock);
219
220
        // Act
221
        $quoteResponseTransfer = $sspAssetQuoteItemSetter->setSspAssetToQuoteItem($sspAssetQuoteItemAttachmentRequestTransfer);
222
223
        // Assert
224
        $this->assertTrue($quoteResponseTransfer->getIsSuccessful());
225
    }
226
227
    protected function createSspAssetQuoteItemAttachmentRequestTransfer(): SspAssetQuoteItemAttachmentRequestTransfer
228
    {
229
        $itemTransfer = (new ItemTransfer())
230
            ->setSku(static::TEST_SKU)
231
            ->setGroupKey(static::TEST_GROUP_KEY);
232
233
        return (new SspAssetQuoteItemAttachmentRequestTransfer())
234
            ->setIdQuote($this->quoteTransfer->getIdQuote())
235
            ->setSspAssetReference(static::TEST_SSP_ASSET_REFERENCE)
236
            ->setItem($itemTransfer);
237
    }
238
239
    protected function createSuccessfulQuoteResponseTransfer(): QuoteResponseTransfer
240
    {
241
        $itemTransfer = (new ItemTransfer())
242
            ->setSku(static::TEST_SKU)
243
            ->setGroupKey(static::TEST_GROUP_KEY)
244
            ->setSspAsset(
245
                (new SspAssetTransfer())->setReference(static::TEST_SSP_ASSET_REFERENCE),
246
            );
247
248
        $customerTransfer = (new CustomerTransfer())
249
            ->setCustomerReference(static::TEST_CUSTOMER_REFERENCE);
250
251
        $quoteTransfer = (new QuoteTransfer())
252
            ->setIdQuote(static::TEST_QUOTE_ID)
253
            ->setCustomer($customerTransfer)
254
            ->setItems(new ArrayObject([$itemTransfer]));
255
256
        return (new QuoteResponseTransfer())
257
            ->setIsSuccessful(true)
258
            ->setQuoteTransfer($quoteTransfer);
259
    }
260
261
    protected function createFailedQuoteResponseTransfer(): QuoteResponseTransfer
262
    {
263
        return (new QuoteResponseTransfer())
264
            ->setIsSuccessful(false);
265
    }
266
267
    /**
268
     * @return \PHPUnit\Framework\MockObject\MockObject|\SprykerFeature\Zed\SelfServicePortal\Business\Asset\Quote\SspAssetQuoteItemSetterInterface
269
     */
270
    protected function createSspAssetQuoteItemSetterMock(): SspAssetQuoteItemSetterInterface
271
    {
272
        return $this->createMock(SspAssetQuoteItemSetterInterface::class);
273
    }
274
275
    protected function createSelfServicePortalFacadeWithSetter(SspAssetQuoteItemSetterInterface $sspAssetQuoteItemSetter): SelfServicePortalFacade
276
    {
277
        $factoryMock = $this->createMock(SelfServicePortalBusinessFactory::class);
278
        $factoryMock->method('createSspAssetQuoteItemSetter')->willReturn($sspAssetQuoteItemSetter);
279
280
        $facade = new SelfServicePortalFacade();
281
        $facade->setFactory($factoryMock);
282
283
        return $facade;
284
    }
285
286
    /**
287
     * @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\Quote\Business\QuoteFacadeInterface
288
     */
289
    protected function createQuoteFacadeMock(): QuoteFacadeInterface
290
    {
291
        $quoteFacadeMock = $this->createMock(QuoteFacadeInterface::class);
292
293
        $quoteResponseTransfer = (new QuoteResponseTransfer())
294
            ->setIsSuccessful(true)
295
            ->setQuoteTransfer($this->quoteTransfer);
296
297
        $quoteFacadeMock->method('findQuoteById')
298
            ->with($this->quoteTransfer->getIdQuote())
299
            ->willReturn($quoteResponseTransfer);
300
301
        $quoteFacadeMock->method('updateQuote')
302
            ->willReturn($quoteResponseTransfer);
303
304
        return $quoteFacadeMock;
305
    }
306
307
    /**
308
     * @return \PHPUnit\Framework\MockObject\MockObject|\SprykerFeature\Zed\SelfServicePortal\Business\Asset\Quote\QuoteItemFinderInterface
309
     */
310
    protected function createQuoteItemFinderPluginMock(): QuoteItemFinderInterface
311
    {
312
        $quoteItemFinderPluginMock = $this->createMock(QuoteItemFinderInterface::class);
313
314
        $itemTransfer = (new ItemTransfer())
315
            ->setSku(static::TEST_SKU)
316
            ->setGroupKey(static::TEST_GROUP_KEY);
317
318
        $quoteItemFinderPluginMock->method('findItem')
319
            ->willReturn($itemTransfer);
320
321
        return $quoteItemFinderPluginMock;
322
    }
323
}
324