Issues (3877)

_support/QuoteRequestBusinessTester.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\QuoteRequest;
9
10
use Codeception\Actor;
11
use Generated\Shared\DataBuilder\MoneyValueBuilder;
12
use Generated\Shared\DataBuilder\ProductConcreteBuilder;
13
use Generated\Shared\DataBuilder\QuoteBuilder;
14
use Generated\Shared\DataBuilder\ShipmentBuilder;
15
use Generated\Shared\Transfer\CompanyBusinessUnitTransfer;
16
use Generated\Shared\Transfer\CompanyTransfer;
17
use Generated\Shared\Transfer\CompanyUserTransfer;
18
use Generated\Shared\Transfer\CustomerTransfer;
19
use Generated\Shared\Transfer\ItemTransfer;
20
use Generated\Shared\Transfer\MoneyValueTransfer;
21
use Generated\Shared\Transfer\QuoteRequestFilterTransfer;
22
use Generated\Shared\Transfer\QuoteRequestTransfer;
23
use Generated\Shared\Transfer\QuoteRequestVersionTransfer;
24
use Generated\Shared\Transfer\QuoteTransfer;
25
use Generated\Shared\Transfer\ShipmentTransfer;
26
27
/**
28
 * @method void wantToTest($text)
29
 * @method void wantTo($text)
30
 * @method void execute($callable)
31
 * @method void expectTo($prediction)
32
 * @method void expect($prediction)
33
 * @method void amGoingTo($argumentation)
34
 * @method void am($role)
35
 * @method void lookForwardTo($achieveValue)
36
 * @method void comment($description)
37
 * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = null)
38
 * @method \Spryker\Zed\QuoteRequest\Business\QuoteRequestFacadeInterface getFacade()
39
 *
40
 * @SuppressWarnings(\SprykerTest\Zed\QuoteRequest\PHPMD)
41
 */
42
class QuoteRequestBusinessTester extends Actor
43
{
44
    use _generated\QuoteRequestBusinessTesterActions;
45
46
    /**
47
     * @var string
48
     */
49
    public const FAKE_QUOTE_REQUEST_REFERENCE = 'FAKE_QUOTE_REQUEST_REFERENCE';
50
51
    /**
52
     * @var string
53
     */
54
    public const FAKE_QUOTE_REQUEST_VERSION_REFERENCE = 'FAKE_QUOTE_REQUEST_VERSION_REFERENCE';
55
56
    /**
57
     * @see \Spryker\Zed\QuoteRequest\Business\Writer\QuoteRequestWriter::GLOSSARY_KEY_QUOTE_REQUEST_NOT_EXISTS
58
     *
59
     * @var string
60
     */
61
    public const GLOSSARY_KEY_QUOTE_REQUEST_NOT_EXISTS = 'quote_request.validation.error.not_exists';
62
63
    /**
64
     * @see \Spryker\Zed\QuoteRequest\Business\Writer\QuoteRequestWriter::GLOSSARY_KEY_QUOTE_REQUEST_WRONG_STATUS
65
     *
66
     * @var string
67
     */
68
    public const GLOSSARY_KEY_QUOTE_REQUEST_WRONG_STATUS = 'quote_request.validation.error.wrong_status';
69
70
    /**
71
     * @see \Spryker\Zed\QuoteRequest\Business\Writer\QuoteRequestUserWriter::GLOSSARY_KEY_QUOTE_REQUEST_EMPTY_QUOTE_ITEMS
72
     *
73
     * @var string
74
     */
75
    public const GLOSSARY_KEY_QUOTE_REQUEST_EMPTY_QUOTE_ITEMS = 'quote_request.validation.error.empty_quote_items';
76
77
    /**
78
     * @param \Generated\Shared\Transfer\QuoteRequestVersionTransfer $quoteRequestVersionTransfer
79
     * @param \Generated\Shared\Transfer\CompanyUserTransfer $companyUserTransfer
80
     *
81
     * @return \Generated\Shared\Transfer\QuoteRequestTransfer
82
     */
83
    public function createQuoteRequest(
84
        QuoteRequestVersionTransfer $quoteRequestVersionTransfer,
85
        CompanyUserTransfer $companyUserTransfer
86
    ): QuoteRequestTransfer {
87
        return $this->haveQuoteRequest([
88
            QuoteRequestTransfer::LATEST_VERSION => $quoteRequestVersionTransfer,
89
            QuoteRequestTransfer::COMPANY_USER => $companyUserTransfer,
90
        ]);
91
    }
92
93
    /**
94
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
95
     * @param array $metadata
96
     *
97
     * @return \Generated\Shared\Transfer\QuoteRequestVersionTransfer
98
     */
99
    public function createQuoteRequestVersion(QuoteTransfer $quoteTransfer, array $metadata = []): QuoteRequestVersionTransfer
100
    {
101
        return $this->haveQuoteRequestVersion([
102
            QuoteRequestVersionTransfer::QUOTE => $quoteTransfer,
103
            QuoteRequestVersionTransfer::METADATA => $metadata,
104
        ]);
105
    }
106
107
    /**
108
     * @param \Generated\Shared\Transfer\CustomerTransfer $customerTransfer
109
     *
110
     * @return \Generated\Shared\Transfer\CompanyUserTransfer
111
     */
112
    public function createCompanyUser(CustomerTransfer $customerTransfer): CompanyUserTransfer
113
    {
114
        $companyTransfer = $this->createCompany();
115
        $companyBusinessUnit = $this->createCompanyBusinessUnit($companyTransfer);
116
117
        return $this->haveCompanyUser(
118
            [
119
                CompanyUserTransfer::CUSTOMER => $customerTransfer,
120
                CompanyUserTransfer::FK_COMPANY => $companyTransfer->getIdCompany(),
121
                CompanyUserTransfer::FK_COMPANY_BUSINESS_UNIT => $companyBusinessUnit->getIdCompanyBusinessUnit(),
122
                CompanyUserTransfer::FK_CUSTOMER => $customerTransfer->getIdCustomer(),
123
            ],
124
        );
125
    }
126
127
    /**
128
     * @return \Generated\Shared\Transfer\CompanyTransfer
129
     */
130
    public function createCompany(): CompanyTransfer
131
    {
132
        return $this->haveCompany(
133
            [
134
                CompanyTransfer::NAME => 'Test company',
135
                CompanyTransfer::STATUS => 'approved',
136
                CompanyTransfer::IS_ACTIVE => true,
137
                CompanyTransfer::INITIAL_USER_TRANSFER => new CompanyUserTransfer(),
138
            ],
139
        );
140
    }
141
142
    /**
143
     * @param \Generated\Shared\Transfer\CompanyTransfer $companyTransfer
144
     *
145
     * @return \Generated\Shared\Transfer\CompanyBusinessUnitTransfer
146
     */
147
    public function createCompanyBusinessUnit(CompanyTransfer $companyTransfer): CompanyBusinessUnitTransfer
148
    {
149
        return $this->haveCompanyBusinessUnit(
150
            [
151
                CompanyBusinessUnitTransfer::NAME => 'test business unit',
152
                CompanyBusinessUnitTransfer::EMAIL => '[email protected]',
153
                CompanyBusinessUnitTransfer::PHONE => '1234567890',
154
                CompanyBusinessUnitTransfer::FK_COMPANY => $companyTransfer->getIdCompany(),
155
            ],
156
        );
157
    }
158
159
    /**
160
     * @param int $sourcePrice
161
     *
162
     * @return \Generated\Shared\Transfer\ShipmentTransfer
163
     */
164
    public function createShipmentWithSourcePrice(int $sourcePrice): ShipmentTransfer
165
    {
166
        $shipmentMethodTransfer = $this->haveShipmentMethod();
167
        $shipmentMethodTransfer->setSourcePrice((new MoneyValueBuilder([MoneyValueTransfer::GROSS_AMOUNT => $sourcePrice]))->build());
168
        $shipmentTransfer = (new ShipmentBuilder())->build();
169
170
        return $shipmentTransfer->setMethod($shipmentMethodTransfer);
171
    }
172
173
    /**
174
     * @param \Generated\Shared\Transfer\CustomerTransfer $customerTransfer
175
     *
176
     * @return \Generated\Shared\Transfer\QuoteTransfer
177
     */
178
    public function createQuoteWithCustomer(CustomerTransfer $customerTransfer): QuoteTransfer
179
    {
180
        return (new QuoteBuilder())
181
            ->withCustomer([CustomerTransfer::CUSTOMER_REFERENCE => $customerTransfer->getCustomerReference()])
182
            ->withItem([ItemTransfer::SKU => (new ProductConcreteBuilder())->build()->getSku(), ItemTransfer::UNIT_PRICE => 1, ItemTransfer::QUANTITY => 1])
183
            ->build();
184
    }
185
186
    /**
187
     * @param \Generated\Shared\Transfer\CompanyUserTransfer $companyUserTransfer
188
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
189
     * @param array $metadata
190
     *
191
     * @return \Generated\Shared\Transfer\QuoteRequestTransfer
192
     */
193
    public function haveQuoteRequestInDraftStatus(
194
        CompanyUserTransfer $companyUserTransfer,
195
        QuoteTransfer $quoteTransfer,
196
        array $metadata = []
197
    ): QuoteRequestTransfer {
198
        return $this->createQuoteRequest(
199
            $this->createQuoteRequestVersion($quoteTransfer, $metadata),
200
            $companyUserTransfer,
201
        );
202
    }
203
204
    /**
205
     * @param \Generated\Shared\Transfer\CompanyUserTransfer $companyUserTransfer
206
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
207
     *
208
     * @return \Generated\Shared\Transfer\QuoteRequestTransfer
209
     */
210
    public function haveQuoteRequestInWaitingStatus(
211
        CompanyUserTransfer $companyUserTransfer,
212
        QuoteTransfer $quoteTransfer
213
    ): QuoteRequestTransfer {
214
        $quoteRequestTransfer = $this->haveQuoteRequestInDraftStatus($companyUserTransfer, $quoteTransfer);
215
216
        return $this->getFacade()
217
            ->sendQuoteRequestToUser($this->createFilterTransfer($quoteRequestTransfer))
218
            ->getQuoteRequest();
219
    }
220
221
    /**
222
     * @param \Generated\Shared\Transfer\CompanyUserTransfer $companyUserTransfer
223
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
224
     * @param string|null $validUntil
225
     * @param bool|null $isLatestVersionVisible
226
     *
227
     * @return \Generated\Shared\Transfer\QuoteRequestTransfer
228
     */
229
    public function haveQuoteRequestInInProgressStatus(
230
        CompanyUserTransfer $companyUserTransfer,
231
        QuoteTransfer $quoteTransfer,
232
        ?string $validUntil = null,
233
        ?bool $isLatestVersionVisible = null
234
    ): QuoteRequestTransfer {
235
        $quoteRequestTransfer = $this->haveQuoteRequestInWaitingStatus($companyUserTransfer, $quoteTransfer);
236
237
        $quoteRequestTransfer = $this->getFacade()
238
            ->reviseQuoteRequestForCompanyUser($this->createFilterTransfer($quoteRequestTransfer))
239
            ->getQuoteRequest();
240
241
        $quoteRequestTransfer
242
            ->setValidUntil($validUntil)
243
            ->setIsLatestVersionVisible($isLatestVersionVisible);
244
245
        if ($validUntil || !$isLatestVersionVisible) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $isLatestVersionVisible of type boolean|null is loosely compared to false; this is ambiguous if the boolean can be false. You might want to explicitly use !== null instead.

If an expression can have both false, and null as possible values. It is generally a good practice to always use strict comparison to clearly distinguish between those two values.

$a = canBeFalseAndNull();

// Instead of
if ( ! $a) { }

// Better use one of the explicit versions:
if ($a !== null) { }
if ($a !== false) { }
if ($a !== null && $a !== false) { }
Loading history...
246
            return $this->getFacade()
247
                ->updateQuoteRequestForCompanyUser($quoteRequestTransfer)
248
                ->getQuoteRequest();
249
        }
250
251
        return $quoteRequestTransfer;
252
    }
253
254
    /**
255
     * @param \Generated\Shared\Transfer\CompanyUserTransfer $companyUserTransfer
256
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
257
     * @param string|null $validUntil
258
     * @param bool|null $isLatestVersionVisible
259
     *
260
     * @return \Generated\Shared\Transfer\QuoteRequestTransfer
261
     */
262
    public function haveQuoteRequestInReadyStatus(
263
        CompanyUserTransfer $companyUserTransfer,
264
        QuoteTransfer $quoteTransfer,
265
        ?string $validUntil = null,
266
        ?bool $isLatestVersionVisible = null
267
    ): QuoteRequestTransfer {
268
        $quoteRequestTransfer = $this->haveQuoteRequestInInProgressStatus(
269
            $companyUserTransfer,
270
            $quoteTransfer,
271
            $validUntil,
272
            $isLatestVersionVisible,
273
        );
274
275
        return $this->getFacade()
276
            ->sendQuoteRequestToCompanyUser($this->createFilterTransfer($quoteRequestTransfer))
277
            ->getQuoteRequest();
278
    }
279
280
    /**
281
     * @param \Generated\Shared\Transfer\QuoteRequestTransfer $quoteRequestTransfer
282
     *
283
     * @return \Generated\Shared\Transfer\QuoteRequestFilterTransfer
284
     */
285
    public function createFilterTransfer(QuoteRequestTransfer $quoteRequestTransfer): QuoteRequestFilterTransfer
286
    {
287
        return (new QuoteRequestFilterTransfer())
288
            ->setQuoteRequestReference($quoteRequestTransfer->getQuoteRequestReference())
289
            ->setIdCompanyUser($quoteRequestTransfer->getCompanyUser()->getIdCompanyUser());
290
    }
291
}
292