Passed
Pull Request — master (#784)
by Anna
39:42
created

MerchantHelper::getMerchantQuery()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 1
c 1
b 1
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 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 PyzTest\Zed\Merchant\Helper;
9
10
use Codeception\Module;
11
use Generated\Shared\DataBuilder\MerchantBuilder;
12
use Generated\Shared\DataBuilder\MerchantProfileBuilder;
13
use Generated\Shared\DataBuilder\StoreRelationBuilder;
14
use Generated\Shared\Transfer\MerchantProfileTransfer;
15
use Generated\Shared\Transfer\MerchantTransfer;
16
use Generated\Shared\Transfer\StoreRelationTransfer;
17
use Generated\Shared\Transfer\StoreTransfer;
18
use Orm\Zed\Merchant\Persistence\SpyMerchantQuery;
19
use Spryker\Zed\Merchant\MerchantConfig;
20
use SprykerTest\Shared\Store\Helper\StoreDataHelperTrait;
21
use SprykerTest\Shared\Testify\Helper\DataCleanupHelperTrait;
22
use SprykerTest\Shared\Testify\Helper\LocatorHelperTrait;
23
24
class MerchantHelper extends Module
25
{
26
    use DataCleanupHelperTrait;
27
    use LocatorHelperTrait;
28
    use StoreDataHelperTrait;
29
30
    /**
31
     * @var string
32
     *
33
     * @see \Spryker\Zed\Merchant\MerchantConfig::STATUS_APPROVED
34
     */
35
    public const STATUS_APPROVED = 'approved';
36
37
    /**
38
     * @param array $seedData
39
     *
40
     * @return \Generated\Shared\Transfer\MerchantTransfer
41
     */
42
    public function haveMerchant(array $seedData = []): MerchantTransfer
43
    {
44
        $merchantTransfer = $this->getMerchantTransfer($seedData);
45
46
        $merchantResponseTransfer = $this->getLocator()
47
            ->merchant()
48
            ->facade()
49
            ->createMerchant($merchantTransfer);
50
        $merchantTransfer = $merchantResponseTransfer->getMerchant();
51
52
        if (isset($seedData[MerchantTransfer::STATUS])) {
53
            $merchantTransfer->setStatus($seedData[MerchantTransfer::STATUS]);
54
        }
55
56
        if (isset($seedData[MerchantTransfer::IS_ACTIVE])) {
57
            $merchantTransfer->setIsActive($seedData[MerchantTransfer::IS_ACTIVE]);
58
        }
59
60
        if (isset($seedData[MerchantTransfer::IS_ACTIVE]) || isset($seedData[MerchantTransfer::STATUS])) {
61
            $merchantTransfer = $this->getLocator()
62
                ->merchant()
63
                ->facade()
64
                ->updateMerchant($merchantTransfer)
65
                ->getMerchant();
66
        }
67
68
        $this->getDataCleanupHelper()->_addCleanup(function () use ($merchantTransfer): void {
69
            $this->getMerchantQuery()->filterByIdMerchant($merchantTransfer->getIdMerchant())->delete();
70
        });
71
72
        return $merchantTransfer;
73
    }
74
75
    /**
76
     * @param array $seedData
77
     *
78
     * @return \Generated\Shared\Transfer\MerchantTransfer
79
     */
80
    public function haveActiveMerchantWithStore(array $seedData = []): MerchantTransfer
81
    {
82
        $seedData = array_merge([
83
            MerchantTransfer::STATUS => static::STATUS_APPROVED,
84
            MerchantTransfer::IS_ACTIVE => true,
85
            MerchantTransfer::STORE_RELATION => $this->getStoreRelationTransfer($seedData[MerchantTransfer::STORE_RELATION] ?? [])->toArray(),
86
            MerchantTransfer::MERCHANT_PROFILE => $this->buildMerchantProfileTransfer()->toArray(),
87
        ], $seedData);
88
89
        return $this->haveMerchant($seedData);
90
    }
91
92
    /**
93
     * @return \Generated\Shared\Transfer\MerchantTransfer
94
     */
95
    public function haveMerchantWithStore(array $seedData = []): MerchantTransfer
96
    {
97
        $storeRelationTransfer = $this->getStoreRelationTransfer($seedData);
98
99
        return $this->haveMerchant([MerchantTransfer::STORE_RELATION => $storeRelationTransfer->toArray()]);
100
    }
101
102
    /**
103
     * @param array $seedData
104
     *
105
     * @return \Generated\Shared\Transfer\StoreTransfer
106
     */
107
    public function getStoreRelationTransfer(array $seedData = []): StoreRelationTransfer
108
    {
109
        $idStores = $seedData[StoreRelationTransfer::ID_STORES] ?? [];
110
111
        if (!$idStores) {
112
            $storeTransfer = [$this->getStoreDataHelper()->haveStore([StoreTransfer::NAME => 'DE'])->getIdStore()];
113
            $idStores = [$storeTransfer->getIdStore()];
114
        }
115
 
116
        return (new StoreRelationBuilder())->seed([
117
                StoreRelationTransfer::ID_STORES => $idStores,
118
            ])->build();
119
    }
120
121
    /**
122
     * @param int $idMerchant
123
     *
124
     * @return void
125
     */
126
    public function assertMerchantNotExists(int $idMerchant): void
127
    {
128
        $query = $this->getMerchantQuery()->filterByIdMerchant($idMerchant);
129
        $this->assertSame(0, $query->count());
0 ignored issues
show
Bug introduced by
0 of type integer is incompatible with the type Codeception\Util\Shared\ExpectedType expected by parameter $expected of Codeception\Module::assertSame(). ( Ignorable by Annotation )

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

129
        $this->assertSame(/** @scrutinizer ignore-type */ 0, $query->count());
Loading history...
130
    }
131
132
    /**
133
     * @return \Spryker\Zed\Merchant\MerchantConfig
134
     */
135
    public function createMerchantConfig(): MerchantConfig
136
    {
137
        return new MerchantConfig();
138
    }
139
140
    /**
141
     * @param \Generated\Shared\Transfer\MerchantTransfer $merchantTransfer
142
     * @param array $seedData
143
     *
144
     * @return \Generated\Shared\Transfer\MerchantTransfer
145
     */
146
    protected function addStoreRelation(MerchantTransfer $merchantTransfer, array $seedData): MerchantTransfer
147
    {
148
        $storeRelationTransfer = $this->createStoreRelationTransfer($seedData);
149
        $merchantTransfer->setStoreRelation($storeRelationTransfer->setIdEntity($merchantTransfer->getIdMerchant()));
150
151
        return $merchantTransfer;
152
    }
153
154
    /**
155
     * @param array $seedData
156
     *
157
     * @return \Generated\Shared\Transfer\StoreRelationTransfer
158
     */
159
    protected function createStoreRelationTransfer(array $seedData): StoreRelationTransfer
160
    {
161
        if (isset($seedData[MerchantTransfer::STORE_RELATION])) {
162
            return (new StoreRelationBuilder())->seed($seedData[MerchantTransfer::STORE_RELATION])->build();
163
        }
164
165
        return (new StoreRelationBuilder())->seed($seedData)->build();
166
    }
167
168
    /**
169
     * @return \Orm\Zed\Merchant\Persistence\SpyMerchantQuery
170
     */
171
    protected function getMerchantQuery(): SpyMerchantQuery
172
    {
173
        return SpyMerchantQuery::create();
174
    }
175
176
    /**
177
     * @param array $seedData
178
     *
179
     * @return \Generated\Shared\Transfer\MerchantTransfer
180
     */
181
    public function getMerchantTransfer(array $seedData = []): MerchantTransfer
182
    {
183
        /** @var \Generated\Shared\Transfer\MerchantTransfer $merchantTransfer */
184
        $merchantTransfer = (new MerchantBuilder($seedData))->build();
185
        $merchantTransfer->setIdMerchant(null);
186
        $merchantTransfer = $this->addStoreRelation($merchantTransfer, $seedData);
187
188
        return $merchantTransfer;
189
    }
190
191
    /**
192
     * @param array $seed
193
     *
194
     * @return \Generated\Shared\Transfer\MerchantProfileTransfer
195
     */
196
    protected function buildMerchantProfileTransfer(array $seed = []): MerchantProfileTransfer
197
    {
198
        return (new MerchantProfileBuilder($seed))->build();
199
    }
200
}
201