Passed
Pull Request — master (#809)
by Denys
25:06 queued 18:23
created

haveCompanyUserOrderWithService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 1
Metric Value
eloc 14
c 1
b 1
f 1
dl 0
loc 21
rs 9.7998
cc 1
nc 1
nop 2
1
<?php
2
3
/**
4
 * This file is part of the Spryker Commerce OS.
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
declare(strict_types = 1);
9
10
namespace PyzTest\Glue\SelfServicePortal\RestApi\Fixtures;
11
12
use Generated\Shared\DataBuilder\CompanyRoleCollectionBuilder;
13
use Generated\Shared\DataBuilder\PermissionCollectionBuilder;
14
use Generated\Shared\Transfer\CompanyBusinessUnitTransfer;
15
use Generated\Shared\Transfer\CompanyRoleTransfer;
16
use Generated\Shared\Transfer\CompanyTransfer;
17
use Generated\Shared\Transfer\CompanyUserTransfer;
18
use Generated\Shared\Transfer\CustomerTransfer;
19
use Generated\Shared\Transfer\SalesProductClassTransfer;
20
use Orm\Zed\Sales\Persistence\SpySalesOrderQuery;
21
use PyzTest\Glue\SelfServicePortal\SelfServicePortalApiTester;
22
use Spryker\Zed\CompanySalesConnector\Communication\Plugin\Permission\SeeCompanyOrdersPermissionPlugin;
23
use SprykerTest\Shared\Testify\Fixtures\FixturesBuilderInterface;
24
use SprykerTest\Shared\Testify\Fixtures\FixturesContainerInterface;
25
26
class SspServicesRestApiFixtures implements FixturesBuilderInterface, FixturesContainerInterface
27
{
28
    protected const TEST_USERNAME = 'SspServicesRestApiFixtures';
29
30
    protected const TEST_USERNAME_WITH_SEE_COMPANY_ORDERS_PERMISSION = 'SspServicesRestApiFixturesWithSeeCompanyOrdersPermission';
31
32
    protected const TEST_USERNAME_WITH_BUSINESS_UNIT_ORDER_VIEW_PERMISSION = 'SspServicesRestApiFixturesWithBusinessUnitOrderViewPermission';
33
34
    protected const TEST_PASSWORD = 'change123';
35
36
    protected const STATE_MACHINE_NAME = 'DummyPayment01';
37
38
    protected const TEST_COMPANY_NAME = 'Test Company Services 2';
39
40
    protected const DEFAULT_PRODUCT_CLASS_NAME = 'Service';
41
42
    protected CustomerTransfer $customerTransfer;
43
44
    protected CompanyTransfer $companyTransfer;
45
46
    protected CompanyBusinessUnitTransfer $companyBusinessUnitTransfer;
47
48
    protected CompanyUserTransfer $companyUserWithCompanyOrderViewPermission;
49
50
    protected CompanyUserTransfer $companyUserWithCompanyUserOrderViewPermission;
51
52
    protected CustomerTransfer $customerTransferWithCompanyOrderViewPermission;
53
54
    public function buildFixtures(SelfServicePortalApiTester $I): FixturesContainerInterface
55
    {
56
        $this->createCompany($I);
57
        $this->createCustomer($I);
58
        $this->createCustomerWithCompanyOrderViewPermission($I);
59
        $this->createCompanyBusinessUnit($I);
60
        $this->createCompanyUserWithCompanyOrderViewPermission($I);
61
        $this->createCompanyUserWithCompanyUser($I);
62
        $this->haveCompanyUserOrderWithService($I, $this->companyUserWithCompanyOrderViewPermission);
63
        $this->haveCompanyUserOrderWithService($I, $this->companyUserWithCompanyUserOrderViewPermission);
64
65
        return $this;
66
    }
67
68
    public function getCustomerTransfer(): CustomerTransfer
69
    {
70
        return $this->customerTransfer;
71
    }
72
73
    public function getCustomerWithCompanyOrderViewPermissionTransfer(): CustomerTransfer
74
    {
75
        return $this->customerTransferWithCompanyOrderViewPermission;
76
    }
77
78
    public function getCompanyTransfer(): CompanyTransfer
79
    {
80
        return $this->companyTransfer;
81
    }
82
83
    protected function haveCompanyUserOrderWithService(
84
        SelfServicePortalApiTester $I,
85
        CompanyUserTransfer $companyUserTransfer,
86
    ): void {
87
        $saveOrderTransfer = $I->haveOrder($companyUserTransfer->toArray(), static::STATE_MACHINE_NAME);
88
        $spySalesOrder = SpySalesOrderQuery::create()->findPk($saveOrderTransfer->getIdSalesOrderOrFail());
89
        $spySalesOrder->setCompanyBusinessUnitUuid($this->companyBusinessUnitTransfer->getUuid());
90
        $spySalesOrder->setCompanyUuid($this->companyTransfer->getUuid());
91
        $spySalesOrder->setCustomerReference($companyUserTransfer->getCustomer()->getCustomerReference());
92
        $spySalesOrder->save();
93
94
        $salesOrderItemEntity = $I->createSalesOrderItemForOrder(
95
            $saveOrderTransfer->getIdSalesOrderOrFail(),
96
            ['process' => static::STATE_MACHINE_NAME],
97
        );
98
        $idSalesOrderItem = $salesOrderItemEntity->getIdSalesOrderItem();
99
100
        $salesProductClassTransfer = $I->haveSalesProductClass([SalesProductClassTransfer::NAME => static::DEFAULT_PRODUCT_CLASS_NAME]);
101
        $I->haveSalesOrderItemToProductClass(
102
            $idSalesOrderItem,
103
            $salesProductClassTransfer->getIdSalesProductClassOrFail(),
104
        );
105
    }
106
107
    protected function createCompany(SelfServicePortalApiTester $I): void
108
    {
109
        $this->companyTransfer = $I->haveCompany([
110
            CompanyTransfer::NAME => static::TEST_COMPANY_NAME,
111
            CompanyTransfer::STATUS => 'approved',
112
            CompanyTransfer::IS_ACTIVE => true,
113
        ]);
114
    }
115
116
    protected function createCustomer(SelfServicePortalApiTester $I): void
117
    {
118
        $customerTransfer = $I->haveCustomer([
119
            CustomerTransfer::USERNAME => static::TEST_USERNAME,
120
            CustomerTransfer::PASSWORD => static::TEST_PASSWORD,
121
            CustomerTransfer::NEW_PASSWORD => static::TEST_PASSWORD,
122
        ]);
123
124
        $this->customerTransfer = $I->confirmCustomer($customerTransfer);
125
    }
126
127
    protected function createCustomerWithCompanyOrderViewPermission(SelfServicePortalApiTester $I): void
128
    {
129
        $customerTransfer = $I->haveCustomer([
130
            CustomerTransfer::USERNAME => static::TEST_USERNAME_WITH_SEE_COMPANY_ORDERS_PERMISSION,
131
            CustomerTransfer::PASSWORD => static::TEST_PASSWORD,
132
            CustomerTransfer::NEW_PASSWORD => static::TEST_PASSWORD,
133
        ]);
134
135
        $this->customerTransferWithCompanyOrderViewPermission = $I->confirmCustomer($customerTransfer);
136
    }
137
138
    protected function createCompanyUserWithCompanyOrderViewPermission(SelfServicePortalApiTester $I): void
139
    {
140
        $this->companyUserWithCompanyOrderViewPermission = $I->haveCompanyUser([
141
            CompanyUserTransfer::CUSTOMER => $this->customerTransferWithCompanyOrderViewPermission,
142
            CompanyUserTransfer::FK_COMPANY => $this->companyTransfer->getIdCompany(),
143
            CompanyUserTransfer::FK_COMPANY_BUSINESS_UNIT => $this->companyBusinessUnitTransfer->getIdCompanyBusinessUnit(),
144
        ]);
145
146
        $permissionCollectionTransfer = (new PermissionCollectionBuilder())->build();
147
148
        $permissionTransfer = $I->havePermission(new SeeCompanyOrdersPermissionPlugin());
149
        $permissionCollectionTransfer->addPermission($permissionTransfer);
150
151
        $companyRoleTransfer = $I->haveCompanyRole([
152
            CompanyRoleTransfer::FK_COMPANY => $this->companyTransfer->getIdCompany(),
153
            CompanyRoleTransfer::PERMISSION_COLLECTION => $permissionCollectionTransfer,
154
        ]);
155
156
        $companyRoleCollectionTransfer = (new CompanyRoleCollectionBuilder())->build()
157
            ->addRole($companyRoleTransfer);
158
159
        $this->companyUserWithCompanyOrderViewPermission->setCompanyRoleCollection($companyRoleCollectionTransfer);
160
161
        $I->assignCompanyRolesToCompanyUser($this->companyUserWithCompanyOrderViewPermission);
162
    }
163
164
    protected function createCompanyUserWithCompanyUser(SelfServicePortalApiTester $I): void
165
    {
166
        $this->companyUserWithCompanyUserOrderViewPermission = $I->haveCompanyUser([
167
            CompanyUserTransfer::CUSTOMER => $this->customerTransfer,
168
            CompanyUserTransfer::FK_COMPANY => $this->companyTransfer->getIdCompany(),
169
            CompanyUserTransfer::FK_COMPANY_BUSINESS_UNIT => $this->companyBusinessUnitTransfer->getIdCompanyBusinessUnit(),
170
        ]);
171
    }
172
173
    protected function createCompanyBusinessUnit(SelfServicePortalApiTester $I): void
174
    {
175
        $this->companyBusinessUnitTransfer = $I->haveCompanyBusinessUnit([
176
            CompanyBusinessUnitTransfer::FK_COMPANY => $this->companyTransfer->getIdCompany(),
177
        ]);
178
179
        $I->haveCompanyUnitAddressToCompanyBusinessUnitRelation($this->companyBusinessUnitTransfer);
180
    }
181
}
182