Issues (3641)

CategoryImage/Business/CategoryImageFacadeTest.php (5 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\CategoryImage\Business;
9
10
use ArrayObject;
11
use Codeception\Test\Unit;
12
use Generated\Shared\Transfer\CategoryImageSetTransfer;
13
use Generated\Shared\Transfer\LocaleTransfer;
14
15
/**
16
 * Auto-generated group annotations
17
 *
18
 * @group SprykerTest
19
 * @group Zed
20
 * @group CategoryImage
21
 * @group Business
22
 * @group Facade
23
 * @group CategoryImageFacadeTest
24
 * Add your own group annotations below this line
25
 *
26
 * @property \SprykerTest\Zed\CategoryImage\CategoryImageBusinessTester $tester
27
 */
28
class CategoryImageFacadeTest extends Unit
29
{
30
    /**
31
     * @var int
32
     */
33
    public const DEFAULT_CATEGORY_IMAGE_SET_COUNT = 1;
34
35
    /**
36
     * @var int
37
     */
38
    public const MAX_CATEGORY_IMAGE_SET_COUNT = 5;
39
40
    /**
41
     * @return void
42
     */
43
    public function testFindCategoryImagesSetCollectionByCategoryId(): void
44
    {
45
        // Assign
46
        $categoryImageSetTransferCollection = $this->buildCategoryImageSetTransferCollection(
47
            rand(1, static::MAX_CATEGORY_IMAGE_SET_COUNT),
48
        );
49
        $categoryTransfer = $this->tester->haveCategory();
50
        $categoryTransfer->setImageSets(new ArrayObject($categoryImageSetTransferCollection));
51
52
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
0 ignored issues
show
The method createCategoryImageSetsForCategory() 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\CategoryImag...ess\CategoryImageFacade. ( Ignorable by Annotation )

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

52
        $this->getFacade()->/** @scrutinizer ignore-call */ createCategoryImageSetsForCategory($categoryTransfer);
Loading history...
53
54
        // Act
55
        $dbCategoryImageSetCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
0 ignored issues
show
The method getCategoryImageSetsByIdCategory() 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\CategoryImag...ess\CategoryImageFacade. ( Ignorable by Annotation )

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

55
        $dbCategoryImageSetCollection = $this->getFacade()->/** @scrutinizer ignore-call */ getCategoryImageSetsByIdCategory(
Loading history...
56
            $categoryTransfer->getIdCategory(),
57
        );
58
59
        // Assert
60
        $this->assertSame(count($categoryImageSetTransferCollection), count($dbCategoryImageSetCollection));
61
        $this->assertEmpty(array_diff(
62
            $this->getIdCategoryImageSetCollection($dbCategoryImageSetCollection),
63
            $this->getIdCategoryImageSetCollection($categoryImageSetTransferCollection),
64
        ));
65
    }
66
67
    /**
68
     * @return void
69
     */
70
    public function testCreateCategoryWithOneImageSet(): void
71
    {
72
        // Assign
73
        $categoryTransfer = $this->tester->haveCategory();
74
        $categoryImageSetCollection = $this->buildCategoryImageSetTransferCollection(static::DEFAULT_CATEGORY_IMAGE_SET_COUNT);
75
        $categoryTransfer->setImageSets(new ArrayObject($categoryImageSetCollection));
76
77
        // Act
78
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
79
        $dbCategoryImageSetCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
80
            $categoryTransfer->getIdCategory(),
81
        );
82
83
        // Assert
84
        $this->assertNotEmpty($dbCategoryImageSetCollection);
85
        $this->assertSame(static::DEFAULT_CATEGORY_IMAGE_SET_COUNT, count($dbCategoryImageSetCollection));
86
        $this->assertEquals(
87
            reset($categoryImageSetCollection)->getIdCategoryImageSet(),
88
            reset($dbCategoryImageSetCollection)->getIdCategoryImageSet(),
89
        );
90
    }
91
92
    /**
93
     * @return void
94
     */
95
    public function testUpdateCategoryImageSetCollection(): void
96
    {
97
        // Assign
98
        $categoryTransfer = $this->tester->haveCategory();
99
        $categoryImage = $this->tester->buildCategoryImageTransfer();
100
        $categoryImageSet = $this->tester->buildCategoryImageSetTransfer();
101
        $categoryImageSet->setCategoryImages(new ArrayObject([$categoryImage]));
102
        $categoryTransfer->addImageSet($categoryImageSet);
103
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
104
105
        // Act
106
        $this->getFacade()->updateCategoryImageSetsForCategory($categoryTransfer);
0 ignored issues
show
The method updateCategoryImageSetsForCategory() 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\CategoryImag...ess\CategoryImageFacade. ( Ignorable by Annotation )

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

106
        $this->getFacade()->/** @scrutinizer ignore-call */ updateCategoryImageSetsForCategory($categoryTransfer);
Loading history...
107
108
        $dbCategoryImageSetCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
109
            $categoryTransfer->getIdCategory(),
110
        );
111
        $dbCategoryImageSet = $dbCategoryImageSetCollection[0];
112
113
        // Assert
114
        $this->assertEquals($categoryImageSet->getName(), $dbCategoryImageSet->getName());
115
        $this->assertEquals($categoryImage->getExternalUrlSmall(), $dbCategoryImageSet->getCategoryImages()[0]->getExternalUrlSmall());
116
        $this->assertEquals($categoryImage->getExternalUrlLarge(), $dbCategoryImageSet->getCategoryImages()[0]->getExternalUrlLarge());
117
    }
118
119
    /**
120
     * @return void
121
     */
122
    public function testDeleteRandomImageSetForCategory(): void
123
    {
124
        // Assign
125
        $categoryTransfer = $this->tester->haveCategory();
126
        $categoryImageSetCollection = $this->buildCategoryImageSetTransferCollection(rand(2, static::MAX_CATEGORY_IMAGE_SET_COUNT));
127
        $categoryTransfer->setImageSets(new ArrayObject($categoryImageSetCollection));
128
129
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
130
131
        // Act
132
        $dbCategoryImageSetCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
133
            $categoryTransfer->getIdCategory(),
134
        );
135
        $randomImageSetKeyToBeDeleted = array_rand($categoryImageSetCollection);
136
        $idCategoryImageSetToBeDeleted = $categoryImageSetCollection[$randomImageSetKeyToBeDeleted]->getIdCategoryImageSet();
137
        $this->assertTrue(in_array(
138
            $idCategoryImageSetToBeDeleted,
139
            $this->getIdCategoryImageSetCollection($dbCategoryImageSetCollection),
140
        ));
141
        unset($categoryImageSetCollection[$randomImageSetKeyToBeDeleted]);
142
        $categoryTransfer->setImageSets(new ArrayObject($categoryImageSetCollection));
143
        $this->getFacade()->updateCategoryImageSetsForCategory($categoryTransfer);
144
        $dbCategoryImageSetCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
145
            $categoryTransfer->getIdCategory(),
146
        );
147
148
        // Assert
149
        $this->assertFalse(in_array(
150
            $idCategoryImageSetToBeDeleted,
151
            $this->getIdCategoryImageSetCollection($dbCategoryImageSetCollection),
152
        ));
153
    }
154
155
    /**
156
     * @return void
157
     */
158
    public function testDeleteImageSetsByCategoryId(): void
159
    {
160
        // Assign
161
        $categoryTransfer = $this->tester->haveCategory();
162
        $categoryImageSetCollection = $this->buildCategoryImageSetTransferCollection(rand(2, static::MAX_CATEGORY_IMAGE_SET_COUNT));
163
        $categoryTransfer->setImageSets(new ArrayObject($categoryImageSetCollection));
164
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
165
166
        // Act
167
        $this->getFacade()->deleteCategoryImageSetsByIdCategory($categoryTransfer->getIdCategory());
0 ignored issues
show
The method deleteCategoryImageSetsByIdCategory() 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\CategoryImag...ess\CategoryImageFacade. ( Ignorable by Annotation )

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

167
        $this->getFacade()->/** @scrutinizer ignore-call */ deleteCategoryImageSetsByIdCategory($categoryTransfer->getIdCategory());
Loading history...
168
169
        // Assert
170
        $dbCategoryImageSetCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
171
            $categoryTransfer->getIdCategory(),
172
        );
173
        $this->assertEmpty($dbCategoryImageSetCollection);
174
    }
175
176
    /**
177
     * @return void
178
     */
179
    public function testExpandCategoryWithImageSets(): void
180
    {
181
        // Assign
182
        $categoryTransfer = $this->tester->haveCategory();
183
        $categoryImageSetCollection = $this->buildCategoryImageSetTransferCollection(
184
            rand(1, static::MAX_CATEGORY_IMAGE_SET_COUNT),
185
        );
186
        $categoryTransfer->setImageSets(new ArrayObject($categoryImageSetCollection));
187
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
188
        $categoryTransfer->setImageSets(new ArrayObject());
189
190
        // Act
191
        $this->getFacade()->expandCategoryWithImageSets($categoryTransfer);
0 ignored issues
show
The method expandCategoryWithImageSets() 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\CategoryImag...ess\CategoryImageFacade. ( Ignorable by Annotation )

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

191
        $this->getFacade()->/** @scrutinizer ignore-call */ expandCategoryWithImageSets($categoryTransfer);
Loading history...
192
        $dbCategoryImageSetCollection = $categoryTransfer->getImageSets()->getArrayCopy();
193
194
        // Assert
195
        $this->assertSame(count($categoryImageSetCollection), count($dbCategoryImageSetCollection));
196
        $this->assertEmpty(array_diff(
197
            $this->getIdCategoryImageSetCollection($dbCategoryImageSetCollection),
198
            $this->getIdCategoryImageSetCollection($categoryImageSetCollection),
199
        ));
200
    }
201
202
    /**
203
     * @return void
204
     */
205
    public function testGetCategoryImageSetsByIdCategorySortsImagesBySortOrderAsc(): void
206
    {
207
        // Assign
208
        $categoryTransfer = $this->tester->haveCategory();
209
        $categoryImageSetTransfer = $this->tester->createCategoryImageSetWithOrderedImages([3, 1, 0, 2]);
210
        $categoryTransfer->setImageSets(new ArrayObject([$categoryImageSetTransfer]));
211
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
212
213
        // Act
214
        $categoryImageCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
215
            $categoryTransfer->getIdCategory(),
216
        )[0]->getCategoryImages();
217
218
        $sortOrder = 0;
219
        foreach ($categoryImageCollection as $categoryImageTransfer) {
220
            $this->assertTrue($categoryImageTransfer->getSortOrder() >= $sortOrder);
221
            $sortOrder = $categoryImageTransfer->getSortOrder();
222
        }
223
    }
224
225
    /**
226
     * @return void
227
     */
228
    public function testGetCategoryImageSetsByIdCategorySortsImagesByIdCategoryImageSetToCategoryImageAsc(): void
229
    {
230
        // Assign
231
        $categoryTransfer = $this->tester->haveCategory();
232
        $categoryImageSetTransfer = $this->tester->createCategoryImageSetWithOrderedImages([0, 0, 0]);
233
        $categoryTransfer->setImageSets(new ArrayObject([$categoryImageSetTransfer]));
234
        $this->getFacade()->createCategoryImageSetsForCategory($categoryTransfer);
235
236
        // Act
237
        $categoryImageCollection = $this->getFacade()->getCategoryImageSetsByIdCategory(
238
            $categoryTransfer->getIdCategory(),
239
        )[0]->getCategoryImages();
240
241
        $idCategoryImageSetToCategoryImage = 0;
242
        foreach ($categoryImageCollection as $categoryImageTransfer) {
243
            $this->assertTrue(
244
                $categoryImageTransfer->getIdCategoryImageSetToCategoryImage() > $idCategoryImageSetToCategoryImage,
245
            );
246
            $idCategoryImageSetToCategoryImage = $categoryImageTransfer->getIdCategoryImageSetToCategoryImage();
247
        }
248
    }
249
250
    /**
251
     * @param int $size
252
     *
253
     * @return array<\Generated\Shared\Transfer\CategoryImageSetTransfer|\Spryker\Shared\Kernel\Transfer\AbstractTransfer>
254
     */
255
    protected function buildCategoryImageSetTransferCollection(int $size): array
256
    {
257
        $categoryImageTransferCollection = [];
258
        for ($i = 1; $i <= $size; ++$i) {
259
            $categoryImageTransferCollection[] = $this->tester->buildCategoryImageSetTransfer();
260
        }
261
262
        return $categoryImageTransferCollection;
263
    }
264
265
    /**
266
     * @param array $seedData
267
     *
268
     * @return \Generated\Shared\Transfer\LocaleTransfer
269
     */
270
    protected function haveLocale(array $seedData = []): LocaleTransfer
271
    {
272
        return $this->tester->haveLocale($seedData);
273
    }
274
275
    /**
276
     * @return \Spryker\Zed\CategoryImage\Business\CategoryImageFacadeInterface|\Spryker\Zed\Kernel\Business\AbstractFacade
277
     */
278
    protected function getFacade()
279
    {
280
        return $this->tester->getFacade();
281
    }
282
283
    /**
284
     * @param array<\Generated\Shared\Transfer\CategoryImageSetTransfer> $categoryImageSetCollection
285
     *
286
     * @return array
287
     */
288
    protected function getIdCategoryImageSetCollection(array $categoryImageSetCollection): array
289
    {
290
        return array_map(function (CategoryImageSetTransfer $categoryImageSetTransfer) {
291
            return $categoryImageSetTransfer->getIdCategoryImageSet();
292
        }, $categoryImageSetCollection);
293
    }
294
}
295