Issues (3877)

ResourceShare/Business/ResourceShareFacadeTest.php (2 issues)

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\ResourceShare\Business;
9
10
use Codeception\Test\Unit;
11
use DateTime;
12
use Generated\Shared\DataBuilder\ResourceShareBuilder;
13
use Generated\Shared\Transfer\ResourceShareRequestTransfer;
14
use Generated\Shared\Transfer\ResourceShareResponseTransfer;
15
use Generated\Shared\Transfer\ResourceShareTransfer;
16
use Orm\Zed\ResourceShare\Persistence\SpyResourceShare;
17
use Spryker\Zed\ResourceShare\ResourceShareDependencyProvider;
18
use Spryker\Zed\ResourceShareExtension\Dependency\Plugin\ResourceShareZedActivatorStrategyPluginInterface;
19
20
/**
21
 * Auto-generated group annotations
22
 *
23
 * @group SprykerTest
24
 * @group Zed
25
 * @group ResourceShare
26
 * @group Business
27
 * @group Facade
28
 * @group ResourceShareFacadeTest
29
 * Add your own group annotations below this line
30
 */
31
class ResourceShareFacadeTest extends Unit
32
{
33
    /**
34
     * @see \Spryker\Zed\ResourceShare\Business\ResourceShare\ResourceShareWriter::GLOSSARY_KEY_RESOURCE_TYPE_IS_NOT_DEFINED
35
     *
36
     * @var string
37
     */
38
    protected const GLOSSARY_KEY_RESOURCE_TYPE_IS_NOT_DEFINED = 'resource_share.generation.error.resource_type_is_not_defined';
39
40
    /**
41
     * @see \Spryker\Zed\ResourceShare\Business\ResourceShare\ResourceShareWriter::GLOSSARY_KEY_CUSTOMER_REFERENCE_IS_NOT_DEFINED
42
     *
43
     * @var string
44
     */
45
    protected const GLOSSARY_KEY_CUSTOMER_REFERENCE_IS_NOT_DEFINED = 'resource_share.generation.error.customer_reference_is_not_defined';
46
47
    /**
48
     * @see \Spryker\Zed\ResourceShare\Business\ResourceShare\ResourceShareActivator::GLOSSARY_KEY_STRATEGY_EXPECTS_LOGGED_IN_CUSTOMER
49
     *
50
     * @var string
51
     */
52
    protected const GLOSSARY_KEY_STRATEGY_EXPECTS_LOGGED_IN_CUSTOMER = 'resource_share.activator.error.strategy_expects_logged_in_customer';
53
54
    /**
55
     * @see \Spryker\Zed\ResourceShare\Business\ResourceShare\ResourceShareReader::GLOSSARY_KEY_RESOURCE_IS_NOT_FOUND_BY_PROVIDED_UUID
56
     *
57
     * @var string
58
     */
59
    protected const GLOSSARY_KEY_RESOURCE_IS_NOT_FOUND_BY_PROVIDED_UUID = 'resource_share.reader.error.resource_is_not_found_by_provided_uuid';
60
61
    /**
62
     * @see \Spryker\Zed\ResourceShare\Business\ResourceShare\ResourceShareValidator::GLOSSARY_KEY_RESOURCE_SHARE_IS_EXPIRED
63
     *
64
     * @var string
65
     */
66
    protected const GLOSSARY_KEY_RESOURCE_SHARE_IS_EXPIRED = 'resource_share.validation.error.resource_share_is_expired';
67
68
    /**
69
     * @var string
70
     */
71
    protected const VALUE_RESOURCE_SHARE_UUID = 'VALUE_RESOURCE_SHARE_UUID';
72
73
    /**
74
     * @var string
75
     */
76
    protected const VALUE_CUSTOMER_REFERENCE = 'VALUE_CUSTOMER_REFERENCE';
77
78
    /**
79
     * @var string
80
     */
81
    protected const VALUE_RESOURCE_TYPE = 'VALUE_RESOURCE_TYPE';
82
83
    /**
84
     * @var string
85
     */
86
    protected const VALUE_RESOURCE_DATA = 'VALUE_RESOURCE_DATA';
87
88
    /**
89
     * @var string
90
     */
91
    protected const VALUE_RESOURCE_DATA_REPLACED = 'VALUE_RESOURCE_DATA_REPLACED';
92
93
    /**
94
     * @var string
95
     */
96
    protected const VALUE_RESOURCE_DATA_EXPANDED = '_EXPANDED';
97
98
    /**
99
     * @var string
100
     */
101
    protected const KEY_RESOURCE_DATA = 'KEY_RESOURCE_DATA';
102
103
    /**
104
     * @var \SprykerTest\Zed\ResourceShare\ResourceShareBusinessTester
105
     */
106
    protected $tester;
107
108
    /**
109
     * @return void
110
     */
111
    public function testGenerateResourceShareShouldGenerateResourceWhenResourceTypeAndResourceDataAreUnique(): void
112
    {
113
        // Arrange
114
        $resourceShareTransfer = (new ResourceShareBuilder())->build();
115
116
        // Act
117
        $resourceShareResponseTransfer = $this->getFacade()->generateResourceShare(
0 ignored issues
show
The method generateResourceShare() does not exist on Spryker\Zed\Kernel\Business\AbstractFacade. It seems like you code against a sub-type of Spryker\Zed\Kernel\Business\AbstractFacade such as Spryker\Zed\ResourceShar...ess\ResourceShareFacade. ( Ignorable by Annotation )

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

117
        $resourceShareResponseTransfer = $this->getFacade()->/** @scrutinizer ignore-call */ generateResourceShare(
Loading history...
118
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
119
        );
120
121
        // Assert
122
        $this->assertTrue($resourceShareResponseTransfer->getIsSuccessful());
123
        $this->assertNotNull($resourceShareResponseTransfer->getResourceShare());
124
    }
125
126
    /**
127
     * @return void
128
     */
129
    public function testGenerateResourceShareShouldAddErrorMessageWhenResourceTypeIsNotDefined(): void
130
    {
131
        // Arrange
132
        $resourceShareTransfer = (new ResourceShareBuilder())->build();
133
        $resourceShareTransfer->setResourceType(null);
134
135
        // Act
136
        $resourceShareResponseTransfer = $this->getFacade()->generateResourceShare(
137
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
138
        );
139
140
        // Assert
141
        $this->assertFalse($resourceShareResponseTransfer->getIsSuccessful());
142
        $this->assertTrue($this->hasResourceShareResponseTransferErrorMessage(
143
            $resourceShareResponseTransfer,
144
            static::GLOSSARY_KEY_RESOURCE_TYPE_IS_NOT_DEFINED,
145
        ));
146
    }
147
148
    /**
149
     * @return void
150
     */
151
    public function testGenerateResourceShareShouldAllowResourceGenerationWithEmptyResourceData(): void
152
    {
153
        // Arrange
154
        $resourceShareTransfer = (new ResourceShareBuilder())->build();
155
        $resourceShareTransfer->setResourceShareData(null);
156
157
        // Act
158
        $resourceShareResponseTransfer = $this->getFacade()->generateResourceShare(
159
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
160
        );
161
162
        // Assert
163
        $this->assertTrue($resourceShareResponseTransfer->getIsSuccessful());
164
        $this->assertEmpty($resourceShareResponseTransfer->getMessages());
165
    }
166
167
    /**
168
     * @return void
169
     */
170
    public function testGenerateResourceShareShouldAddErrorMessageWhenCustomerReferenceIsNotDefined(): void
171
    {
172
        // Arrange
173
        $resourceShareTransfer = (new ResourceShareBuilder())->build();
174
        $resourceShareTransfer->setCustomerReference(null);
175
176
        // Act
177
        $resourceShareResponseTransfer = $this->getFacade()->generateResourceShare(
178
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
179
        );
180
181
        // Assert
182
        $this->assertFalse($resourceShareResponseTransfer->getIsSuccessful());
183
        $this->assertTrue($this->hasResourceShareResponseTransferErrorMessage(
184
            $resourceShareResponseTransfer,
185
            static::GLOSSARY_KEY_CUSTOMER_REFERENCE_IS_NOT_DEFINED,
186
        ));
187
    }
188
189
    /**
190
     * @return void
191
     */
192
    public function testGenerateResourceShareShouldAddErrorMessageWhenResourceIsAlreadyShared(): void
193
    {
194
        // Arrange
195
        $resourceShareTransfer = $this->tester->haveResourceShare();
196
        $resourceShareTransfer = (new ResourceShareTransfer())
197
            ->setResourceType($resourceShareTransfer->getResourceType())
198
            ->setResourceShareData($resourceShareTransfer->getResourceShareData())
199
            ->setCustomerReference($resourceShareTransfer->getCustomerReference());
200
201
        // Act
202
        $resourceShareResponseTransfer = $this->getFacade()->generateResourceShare(
203
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
204
        );
205
206
        // Assert
207
        $this->assertTrue($resourceShareResponseTransfer->getIsSuccessful());
208
        $this->assertEmpty($resourceShareResponseTransfer->getMessages());
209
    }
210
211
    /**
212
     * @return void
213
     */
214
    public function testGenerateResourceShareWillNotGenerateExpiredResourceShare(): void
215
    {
216
        // Arrange
217
        $resourceShareTransfer = (new ResourceShareBuilder())->build();
218
        $resourceShareTransfer->setExpiryDate(
219
            (new DateTime('Today last year'))->format('Y-m-d'),
220
        );
221
222
        // Act
223
        $resourceShareResponseTransfer = $this->getFacade()->generateResourceShare(
224
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
225
        );
226
227
        // Assert
228
        $this->assertFalse($resourceShareResponseTransfer->getIsSuccessful());
229
        $this->assertTrue($this->hasResourceShareResponseTransferErrorMessage(
230
            $resourceShareResponseTransfer,
231
            static::GLOSSARY_KEY_RESOURCE_SHARE_IS_EXPIRED,
232
        ));
233
    }
234
235
    /**
236
     * @return void
237
     */
238
    public function testGetResourceShareByUuidShouldAddErrorMessageWhenResourceIsNotFound(): void
239
    {
240
        // Arrange
241
        $resourceShareTransfer = (new ResourceShareBuilder())->build();
242
        $resourceShareTransfer->setUuid(static::VALUE_RESOURCE_SHARE_UUID);
243
244
        // Act
245
        $resourceShareResponseTransfer = $this->getFacade()->getResourceShareByUuid(
0 ignored issues
show
The method getResourceShareByUuid() does not exist on Spryker\Zed\Kernel\Business\AbstractFacade. It seems like you code against a sub-type of Spryker\Zed\Kernel\Business\AbstractFacade such as Spryker\Zed\ResourceShar...ess\ResourceShareFacade. ( Ignorable by Annotation )

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

245
        $resourceShareResponseTransfer = $this->getFacade()->/** @scrutinizer ignore-call */ getResourceShareByUuid(
Loading history...
246
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
247
        );
248
249
        // Assert
250
        $this->assertFalse($resourceShareResponseTransfer->getIsSuccessful());
251
        $this->assertTrue($this->hasResourceShareResponseTransferErrorMessage(
252
            $resourceShareResponseTransfer,
253
            static::GLOSSARY_KEY_RESOURCE_IS_NOT_FOUND_BY_PROVIDED_UUID,
254
        ));
255
    }
256
257
    /**
258
     * @skip This test was temporarily skipped due to flikerness. See {@link https://spryker.atlassian.net/browse/CC-25718} for details
259
     *
260
     * @return void
261
     */
262
    public function testGetResourceShareByUuidShouldReturnCorrectResourceShareFromDatabase(): void
263
    {
264
        // Arrange
265
        $resourceShareTransfer = $this->tester->haveResourceShare();
266
267
        // Act
268
        $resourceShareResponseTransfer = $this->getFacade()->getResourceShareByUuid(
269
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
270
        );
271
272
        // Assert
273
        $this->assertTrue($resourceShareResponseTransfer->getIsSuccessful());
274
        $this->assertSame(
275
            $resourceShareTransfer->getIdResourceShare(),
276
            $resourceShareResponseTransfer->getResourceShare()->getIdResourceShare(),
277
        );
278
    }
279
280
    /**
281
     * @return void
282
     */
283
    public function testGetResourceShareByUuidWillNotRetrieveExpiredResourceShare(): void
284
    {
285
        // Arrange
286
        $resourceShareTransfer = $this->createExpiredResourceShare();
287
288
        // Act
289
        $resourceShareResponseTransfer = $this->getFacade()->getResourceShareByUuid(
290
            (new ResourceShareRequestTransfer())->setResourceShare($resourceShareTransfer),
291
        );
292
293
        // Assert
294
        $this->assertFalse($resourceShareResponseTransfer->getIsSuccessful());
295
        $this->assertTrue($this->hasResourceShareResponseTransferErrorMessage(
296
            $resourceShareResponseTransfer,
297
            static::GLOSSARY_KEY_RESOURCE_SHARE_IS_EXPIRED,
298
        ));
299
    }
300
301
    /**
302
     * @return \Generated\Shared\Transfer\ResourceShareTransfer
303
     */
304
    protected function createExpiredResourceShare(): ResourceShareTransfer
305
    {
306
        $resourceShareTransfer = (new ResourceShareBuilder([
307
            ResourceShareTransfer::EXPIRY_DATE => (new DateTime('Today last year'))->format('Y-m-d'),
308
        ]))->build();
309
310
        $resourceShareEntity = new SpyResourceShare();
311
        $resourceShareEntity->fromArray($resourceShareTransfer->toArray());
312
313
        $resourceShareEntity->save();
314
315
        return (new ResourceShareTransfer())->fromArray($resourceShareEntity->toArray(), true);
316
    }
317
318
    /**
319
     * @param \Spryker\Zed\ResourceShareExtension\Dependency\Plugin\ResourceShareZedActivatorStrategyPluginInterface $resourceShareActivatorStrategyPlugin
320
     *
321
     * @return void
322
     */
323
    protected function registerResourceShareActivatorStrategyPlugin(
324
        ResourceShareZedActivatorStrategyPluginInterface $resourceShareActivatorStrategyPlugin
325
    ): void {
326
        $this->tester->setDependency(ResourceShareDependencyProvider::PLUGINS_RESOURCE_SHARE_ACTIVATOR_STRATEGY, [
327
            $resourceShareActivatorStrategyPlugin,
328
        ]);
329
    }
330
331
    /**
332
     * @param \Generated\Shared\Transfer\ResourceShareResponseTransfer $resourceShareResponseTransfer
333
     * @param string $errorMessage
334
     *
335
     * @return bool
336
     */
337
    protected function hasResourceShareResponseTransferErrorMessage(
338
        ResourceShareResponseTransfer $resourceShareResponseTransfer,
339
        string $errorMessage
340
    ): bool {
341
        $resourceShareResponseTransfer->requireMessages();
342
        foreach ($resourceShareResponseTransfer->getMessages() as $messageTransfer) {
343
            $messageTransfer->requireValue();
344
345
            if ($messageTransfer->getValue() === $errorMessage) {
346
                return true;
347
            }
348
        }
349
350
        return false;
351
    }
352
353
    /**
354
     * @return \Spryker\Zed\ResourceShareExtension\Dependency\Plugin\ResourceShareZedActivatorStrategyPluginInterface|\PHPUnit\Framework\MockObject\MockObject
355
     */
356
    protected function createResourceShareActivatorStrategyPluginMock(): ResourceShareZedActivatorStrategyPluginInterface
357
    {
358
        return $this->createMock(ResourceShareZedActivatorStrategyPluginInterface::class);
359
    }
360
361
    /**
362
     * @return \Spryker\Zed\ResourceShare\Business\ResourceShareFacadeInterface|\Spryker\Zed\Kernel\Business\AbstractFacade
363
     */
364
    protected function getFacade()
365
    {
366
        return $this->tester->getFacade();
367
    }
368
}
369