PluginProbe
Packeta / 2.2.0
Packeta v2.2.0
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / tests / Module / WidgetOptionsBuilderTest.php

WidgetOptionsBuilderTest.php in Packeta 2.2.0, at tests/Module/WidgetOptionsBuilderTest.php

294 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare( strict_types=1 );
4
5 namespace Tests\Module;
6
7 use Packetery\Core\Entity\Address;
8 use Packetery\Core\Entity\Carrier;
9 use Packetery\Core\Entity\Order;
10 use Packetery\Core\PickupPointProvider\CompoundCarrierCollectionFactory;
11 use Packetery\Core\PickupPointProvider\VendorCollectionFactory;
12 use Packetery\Module\Carrier\OptionPrefixer;
13 use Packetery\Module\Carrier\PacketaPickupPointsConfig;
14 use Packetery\Module\Framework\WpAdapter;
15 use Packetery\Module\WidgetOptionsBuilder;
16 use PHPUnit\Framework\TestCase;
17 use Tests\Core\DummyFactory;
18
19 class WidgetOptionsBuilderTest extends TestCase {
20 /**
21 * @return array[]
22 */
23 public static function pickupPointForAdminDataProvider(): array {
24 return [
25 [
26 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierZpointcz() ),
27 'expectedCountry' => 'cz',
28 'adultContent' => true,
29 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'livePickupPoint', 'vendors' ],
30 'existingVendorKeys' => [ 'selected', 'country', 'group' ],
31 'vendorsSize' => 2,
32 'notExistingKeys' => [ 'carriers' ],
33 ],
34 [
35 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierZpointcz() ),
36 'expectedCountry' => 'cz',
37 'adultContent' => false,
38 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors' ],
39 'existingVendorKeys' => [ 'selected', 'country', 'group' ],
40 'vendorsSize' => 2,
41 'notExistingKeys' => [ 'carriers', 'livePickupPoint' ],
42 ],
43 [
44 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierCzechHdRequiresSize() ),
45 'expectedCountry' => 'cz',
46 'adultContent' => false,
47 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors' ],
48 'existingVendorKeys' => [ 'selected', 'carrierId' ],
49 'vendorsSize' => 1,
50 'notExistingKeys' => [ 'carriers', 'livePickupPoint' ],
51 ],
52 [
53 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierGermanHd() ),
54 'expectedCountry' => 'de',
55 'adultContent' => false,
56 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors' ],
57 'existingVendorKeys' => [ 'selected', 'carrierId' ],
58 'vendorsSize' => 1,
59 'notExistingKeys' => [ 'carriers', 'livePickupPoint' ],
60 ],
61 [
62 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierGermanHd() ),
63 'expectedCountry' => 'de',
64 'adultContent' => true,
65 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors', 'livePickupPoint' ],
66 'existingVendorKeys' => [ 'selected', 'carrierId' ],
67 'vendorsSize' => 1,
68 'notExistingKeys' => [ 'carriers' ],
69 ],
70 ];
71 }
72
73 /**
74 * @dataProvider pickupPointForAdminDataProvider
75 */
76 public function testPickupPointForAdmin(
77 Order $order,
78 string $expectedCountry,
79 bool $adultContent,
80 array $existingKeys,
81 array $existingVendorKeys,
82 int $vendorsSize,
83 array $notExistingKeys,
84 ?string $carriersValueValidator = null
85 ): void {
86 $wpAdapterMock = $this->createMock( WpAdapter::class );
87
88 $config = new PacketaPickupPointsConfig(
89 new CompoundCarrierCollectionFactory(),
90 new VendorCollectionFactory()
91 );
92
93 $builder = new WidgetOptionsBuilder(
94 $config,
95 $wpAdapterMock
96 );
97
98 $order->setShippingCountry( $order->getCarrier()->getCountry() );
99 $order->setAdultContent( $adultContent );
100 $result = $builder->createPickupPointForAdmin( $order );
101
102 $this->assertSame( $expectedCountry, $result['country'] );
103 foreach ( $existingKeys as $key ) {
104 $this->assertArrayHasKey( $key, $result );
105 }
106
107 foreach ( $notExistingKeys as $key ) {
108 $this->assertArrayNotHasKey( $key, $result );
109 }
110
111 if ( in_array( 'vendors', $existingKeys, true ) ) {
112 $this->assertCount( $vendorsSize, $result['vendors'] );
113 foreach ( $result['vendors'] as $vendor ) {
114 foreach ( $vendor as $key => $value ) {
115 $this->assertContains( $key, $existingVendorKeys );
116 }
117 }
118 } else {
119 $this->assertSame( 0, $vendorsSize, 'vendors key does not exist so its size must be 0' );
120 $this->assertEmpty( $existingVendorKeys, 'vendors key does not exist so existing keys array must be empty' );
121 }
122
123 if ( $carriersValueValidator !== null ) {
124 $this->assertTrue(
125 call_user_func( $carriersValueValidator, $result['carriers'] ),
126 // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
127 'carriers value "' . var_export( $result['carriers'], true ) . '" do not validate with ' . $carriersValueValidator
128 );
129 }
130 }
131
132 /**
133 * @return array[]
134 */
135 public static function addressForAdminDataProvider(): array {
136 $alwaysPresentKeys = [ 'country', 'language', 'layout', 'appIdentity', 'street', 'city', 'postcode' ];
137
138 return [
139 [
140 'order' => new Order( '123', DummyFactory::createCarrierZpointcz() ),
141 'address' => DummyFactory::createAddress(),
142 'expectedKeys' => $alwaysPresentKeys,
143 'nonExistingKeys' => [ 'houseNumber', 'county', 'carrierId' ],
144 ],
145 [
146 'order' => new Order( '123', DummyFactory::createCarrierZpointcz() ),
147 'address' => DummyFactory::createAddress( '123' ),
148 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'houseNumber' ] ),
149 'nonExistingKeys' => [ 'carrierId', 'county' ],
150 ],
151 [
152 'order' => new Order( '123', DummyFactory::createCarrierZpointcz() ),
153 'address' => DummyFactory::createAddress( '123', 'county' ),
154 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'houseNumber', 'county' ] ),
155 'nonExistingKeys' => [ 'carrierId' ],
156 ],
157 [
158 'order' => new Order( '123', DummyFactory::createCarrierCzechHdRequiresSize() ),
159 'address' => DummyFactory::createAddress( '123', 'county' ),
160 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'houseNumber', 'county', 'carrierId' ] ),
161 'nonExistingKeys' => [],
162 ],
163 [
164 'order' => new Order( '123', DummyFactory::createCarrierCzechHdRequiresSize() ),
165 'address' => DummyFactory::createAddress( '123' ),
166 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'houseNumber', 'carrierId' ] ),
167 'nonExistingKeys' => [],
168 ],
169 [
170 'order' => new Order( '123', DummyFactory::createCarrierCzechHdRequiresSize() ),
171 'address' => DummyFactory::createAddress(),
172 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'carrierId' ] ),
173 'nonExistingKeys' => [],
174 ],
175 ];
176 }
177
178 /**
179 * @dataProvider addressForAdminDataProvider
180 */
181 public function testAddressForAdmin(
182 Order $order,
183 Address $address,
184 array $expectedKeys,
185 array $nonExistingKeys
186 ): void {
187 $wpAdapterMock = $this->createMock( WpAdapter::class );
188
189 $config = new PacketaPickupPointsConfig(
190 new CompoundCarrierCollectionFactory(),
191 new VendorCollectionFactory()
192 );
193
194 $builder = new WidgetOptionsBuilder(
195 $config,
196 $wpAdapterMock
197 );
198
199 $order->setDeliveryAddress( $address );
200 $result = $builder->createAddressForAdmin( $order );
201
202 foreach ( $expectedKeys as $key ) {
203 $this->assertArrayHasKey( $key, $result );
204 }
205
206 foreach ( $nonExistingKeys as $key ) {
207 $this->assertArrayNotHasKey( $key, $result );
208 }
209
210 $this->assertSame( 'hd', $result['layout'] );
211 }
212
213 /**
214 * @return array[]
215 */
216 public static function getCarrierForCheckoutDataProvider(): array {
217 $alwaysPresentKeys = [ 'id', 'is_pickup_points' ];
218
219 return [
220 [
221 'carrier' => DummyFactory::createCarrierCzechHdRequiresSize(),
222 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'address_validation' ] ),
223 'nonExistingKeys' => [ 'vendors', 'carriers' ],
224 'addressValidation' => 'optional',
225 ],
226 [
227 'carrier' => DummyFactory::createCarrierGermanHd(),
228 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'address_validation' ] ),
229 'nonExistingKeys' => [ 'vendors', 'carriers' ],
230 'addressValidation' => 'none',
231 ],
232 [
233 'carrier' => DummyFactory::createCarrierZpointcz(),
234 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'vendors' ] ),
235 'nonExistingKeys' => [ 'address_validation', 'carriers' ],
236 ],
237 [
238 'carrier' => DummyFactory::createCarrierCzzpoint(),
239 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'vendors' ] ),
240 'nonExistingKeys' => [ 'address_validation', 'carriers' ],
241 ],
242 ];
243 }
244
245 /**
246 * @dataProvider getCarrierForCheckoutDataProvider
247 */
248 public function testGetCarrierForCheckout(
249 Carrier $carrier,
250 array $expectedKeys,
251 array $nonExistingKeys,
252 ?string $addressValidation = null
253 ): void {
254 $wpAdapterMock = $this->createMock( WpAdapter::class );
255
256 $config = new PacketaPickupPointsConfig(
257 new CompoundCarrierCollectionFactory(),
258 new VendorCollectionFactory(),
259 );
260
261 $builder = new WidgetOptionsBuilder(
262 $config,
263 $wpAdapterMock
264 );
265
266 $optionId = OptionPrefixer::getOptionId( $carrier->getId() );
267 $wpAdapterMock
268 ->method( 'getOption' )
269 ->willReturn(
270 [
271 'address_validation' => $addressValidation,
272 ]
273 );
274
275 $result = $builder->getCarrierForCheckout(
276 $carrier,
277 $optionId
278 );
279
280 foreach ( $expectedKeys as $key ) {
281 $this->assertArrayHasKey( $key, $result );
282 }
283
284 foreach ( $nonExistingKeys as $key ) {
285 $this->assertArrayNotHasKey( $key, $result );
286 }
287
288 if ( $addressValidation !== null ) {
289 $this->assertContains( 'address_validation', $expectedKeys, 'address_validation key must be present in expectedKeys' );
290 $this->assertSame( $addressValidation, $result['address_validation'] );
291 }
292 }
293 }
294