Issues (3641)

Event/Listener/AvailabilityStorageListenerTest.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\AvailabilityStorage\Communication\Plugin\Event\Listener;
9
10
use Codeception\Test\Unit;
11
use Generated\Shared\Transfer\EventEntityTransfer;
12
use Orm\Zed\AvailabilityStorage\Persistence\SpyAvailabilityStorageQuery;
13
use Orm\Zed\Product\Persistence\Map\SpyProductTableMap;
14
use Spryker\DecimalObject\Decimal;
15
use Spryker\Zed\Availability\Dependency\AvailabilityEvents;
16
use Spryker\Zed\AvailabilityStorage\Business\AvailabilityStorageBusinessFactory;
17
use Spryker\Zed\AvailabilityStorage\Business\AvailabilityStorageFacade;
18
use Spryker\Zed\AvailabilityStorage\Communication\Plugin\Event\Listener\AvailabilityProductStorageListener;
19
use Spryker\Zed\AvailabilityStorage\Communication\Plugin\Event\Listener\AvailabilityStorageListener;
20
use Spryker\Zed\AvailabilityStorage\Communication\Plugin\Event\Listener\AvailabilityStoragePublishListener;
21
use Spryker\Zed\AvailabilityStorage\Communication\Plugin\Event\Listener\AvailabilityStorageUnpublishListener;
22
use Spryker\Zed\Product\Dependency\ProductEvents;
23
use SprykerTest\Zed\AvailabilityStorage\AvailabilityStorageConfigMock;
24
25
/**
26
 * Auto-generated group annotations
27
 *
28
 * @group SprykerTest
29
 * @group Zed
30
 * @group AvailabilityStorage
31
 * @group Communication
32
 * @group Plugin
33
 * @group Event
34
 * @group Listener
35
 * @group AvailabilityStorageListenerTest
36
 * Add your own group annotations below this line
37
 */
38
class AvailabilityStorageListenerTest extends Unit
39
{
40
    /**
41
     * @var int
42
     */
43
    protected const ID_STORE = 1;
44
45
    /**
46
     * @var \Generated\Shared\Transfer\ProductConcreteTransfer
47
     */
48
    protected $productConcreteTransfer;
49
50
    /**
51
     * @var \Orm\Zed\Availability\Persistence\SpyAvailabilityAbstract
52
     */
53
    protected $spyAvailabilityAbstract;
54
55
    /**
56
     * @var \SprykerTest\Zed\AvailabilityStorage\AvailabilityStorageCommunicationTester
57
     */
58
    protected $tester;
59
60
    /**
61
     * @return void
62
     */
63
    protected function setUp(): void
64
    {
65
        parent::setUp();
66
67
        $this->productConcreteTransfer = $this->tester->haveProduct();
68
        $this->spyAvailabilityAbstract = $this->tester->haveAvailabilityAbstract(
69
            $this->productConcreteTransfer,
70
            new Decimal(2),
71
            static::ID_STORE,
72
        );
73
    }
74
75
    /**
76
     * @return void
77
     */
78
    public function testAvailabilityStorageListenerStoreData(): void
79
    {
80
        SpyAvailabilityStorageQuery::create()->filterByFkProductAbstract($this->productConcreteTransfer->getFkProductAbstract())->delete();
81
82
        $availabilityStorageCount = SpyAvailabilityStorageQuery::create()->count();
83
84
        // Act
85
        $availabilityStorageListener = new AvailabilityStorageListener();
0 ignored issues
show
Deprecated Code introduced by
The class Spryker\Zed\Availability...labilityStorageListener has been deprecated: Use {@link \Spryker\Zed\AvailabilityStorage\Communication\Plugin\Event\Listener\AvailabilityStoragePublishListener} and {@link \Spryker\Zed\AvailabilityStorage\Communication\Plugin\Event\Listener\AvailabilityStorageUnpublishListener} instead. ( Ignorable by Annotation )

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

85
        $availabilityStorageListener = /** @scrutinizer ignore-deprecated */ new AvailabilityStorageListener();
Loading history...
86
        $availabilityStorageListener->setFacade($this->getAvailabilityStorageFacade());
87
88
        $eventTransfers = [
89
            (new EventEntityTransfer())->setId($this->spyAvailabilityAbstract->getIdAvailabilityAbstract()),
90
        ];
91
92
        $availabilityStorageListener->handleBulk($eventTransfers, AvailabilityEvents::AVAILABILITY_ABSTRACT_PUBLISH);
93
94
        // Assert
95
        $this->assertAvailabilityStorage($availabilityStorageCount);
96
    }
97
98
    /**
99
     * @return void
100
     */
101
    public function testAvailabilityStoragePublishListenerStoreData(): void
102
    {
103
        SpyAvailabilityStorageQuery::create()->filterByFkProductAbstract($this->productConcreteTransfer->getFkProductAbstract())->delete();
104
105
        $availabilityStorageCount = SpyAvailabilityStorageQuery::create()->count();
106
107
        // Act
108
        $availabilityStoragePublishListener = new AvailabilityStoragePublishListener();
109
        $availabilityStoragePublishListener->setFacade($this->getAvailabilityStorageFacade());
110
111
        $eventTransfers = [
112
            (new EventEntityTransfer())->setId($this->spyAvailabilityAbstract->getIdAvailabilityAbstract()),
113
        ];
114
115
        $availabilityStoragePublishListener->handleBulk($eventTransfers, AvailabilityEvents::AVAILABILITY_ABSTRACT_PUBLISH);
116
117
        // Assert
118
        $this->assertAvailabilityStorage($availabilityStorageCount);
119
    }
120
121
    /**
122
     * @return void
123
     */
124
    public function testAvailabilityStorageUnpublishListenerStoreData(): void
125
    {
126
        // Act
127
        $availabilityStorageUnpublishListener = new AvailabilityStorageUnpublishListener();
128
        $availabilityStorageUnpublishListener->setFacade($this->getAvailabilityStorageFacade());
129
130
        $eventTransfers = [
131
            (new EventEntityTransfer())->setId($this->spyAvailabilityAbstract->getIdAvailabilityAbstract()),
132
        ];
133
134
        $availabilityStorageUnpublishListener->handleBulk($eventTransfers, AvailabilityEvents::AVAILABILITY_ABSTRACT_PUBLISH);
135
136
        // Assert
137
        $this->assertSame(0, SpyAvailabilityStorageQuery::create()->filterByFkProductAbstract($this->productConcreteTransfer->getFkProductAbstract())->count());
138
    }
139
140
    /**
141
     * @return void
142
     */
143
    public function testAvailabilityProductStorageListenerStoreData(): void
144
    {
145
        SpyAvailabilityStorageQuery::create()->filterByFkProductAbstract($this->productConcreteTransfer->getFkProductAbstract())->delete();
146
        $availabilityStorageCount = SpyAvailabilityStorageQuery::create()->count();
147
148
        // Act
149
        $availabilityStorageListener = new AvailabilityProductStorageListener();
150
        $availabilityStorageListener->setFacade($this->getAvailabilityStorageFacade());
151
152
        $eventTransfers = [
153
            (new EventEntityTransfer())->setForeignKeys([
154
                SpyProductTableMap::COL_FK_PRODUCT_ABSTRACT => $this->productConcreteTransfer->getFkProductAbstract(),
155
            ]),
156
        ];
157
        $availabilityStorageListener->handleBulk($eventTransfers, ProductEvents::ENTITY_SPY_PRODUCT_UPDATE);
158
159
        // Assert
160
        $this->assertAvailabilityStorage($availabilityStorageCount);
161
    }
162
163
    /**
164
     * @return \Spryker\Zed\AvailabilityStorage\Business\AvailabilityStorageFacade
165
     */
166
    protected function getAvailabilityStorageFacade(): AvailabilityStorageFacade
167
    {
168
        $factory = new AvailabilityStorageBusinessFactory();
169
        $factory->setConfig(new AvailabilityStorageConfigMock());
170
171
        $facade = new AvailabilityStorageFacade();
172
        $facade->setFactory($factory);
173
174
        return $facade;
175
    }
176
177
    /**
178
     * @param int $previousCount
179
     *
180
     * @return void
181
     */
182
    protected function assertAvailabilityStorage(int $previousCount): void
183
    {
184
        $availabilityStorageCount = SpyAvailabilityStorageQuery::create()->count();
185
        $this->assertGreaterThan($previousCount, $availabilityStorageCount);
186
187
        $availabilityStorageEntityList = SpyAvailabilityStorageQuery::create()
188
            ->findByFkProductAbstract($this->productConcreteTransfer->getFkProductAbstract())
189
            ->toKeyIndex('fkAvailabilityAbstract');
190
191
        $availabilityStorageEntity = $availabilityStorageEntityList[$this->spyAvailabilityAbstract->getIdAvailabilityAbstract()] ?? null;
192
193
        $this->assertNotNull($availabilityStorageEntity);
194
        $data = $availabilityStorageEntity->getData();
195
        $this->assertEquals((new Decimal($this->spyAvailabilityAbstract->getQuantity()))->trim(), $data['quantity']);
196
    }
197
}
198