| @@ -11,8 +11,9 @@ | ||
| 11 | 11 | use Packetery\Core\PickupPointProvider\VendorCollectionFactory; |
| 12 | 12 | use Packetery\Module\Carrier\OptionPrefixer; |
| 13 | 13 | use Packetery\Module\Carrier\PacketaPickupPointsConfig; |
| 14 | 14 | use Packetery\Module\Framework\WpAdapter; |
| 15 | +use Packetery\Module\Options\FlagManager\FeatureFlagProvider; | |
| 15 | 16 | use Packetery\Module\WidgetOptionsBuilder; |
| 16 | 17 | use PHPUnit\Framework\TestCase; |
| 17 | 18 | use Tests\Core\DummyFactory; |
| 18 | 19 | |
| @@ -24,8 +25,9 @@ | ||
| 24 | 25 | return [ |
| 25 | 26 | [ |
| 26 | 27 | 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierZpointcz() ), |
| 27 | 28 | 'expectedCountry' => 'cz', |
| 29 | + 'splitActive' => true, | |
| 28 | 30 | 'adultContent' => true, |
| 29 | 31 | 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'livePickupPoint', 'vendors' ], |
| 30 | 32 | 'existingVendorKeys' => [ 'selected', 'country', 'group' ], |
| 31 | 33 | 'vendorsSize' => 2, |
| @@ -33,8 +35,9 @@ | ||
| 33 | 35 | ], |
| 34 | 36 | [ |
| 35 | 37 | 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierZpointcz() ), |
| 36 | 38 | 'expectedCountry' => 'cz', |
| 39 | + 'splitActive' => true, | |
| 37 | 40 | 'adultContent' => false, |
| 38 | 41 | 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors' ], |
| 39 | 42 | 'existingVendorKeys' => [ 'selected', 'country', 'group' ], |
| 40 | 43 | 'vendorsSize' => 2, |
| @@ -42,8 +45,9 @@ | ||
| 42 | 45 | ], |
| 43 | 46 | [ |
| 44 | 47 | 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierCzechHdRequiresSize() ), |
| 45 | 48 | 'expectedCountry' => 'cz', |
| 49 | + 'splitActive' => true, | |
| 46 | 50 | 'adultContent' => false, |
| 47 | 51 | 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors' ], |
| 48 | 52 | 'existingVendorKeys' => [ 'selected', 'carrierId' ], |
| 49 | 53 | 'vendorsSize' => 1, |
| @@ -51,8 +55,9 @@ | ||
| 51 | 55 | ], |
| 52 | 56 | [ |
| 53 | 57 | 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierGermanHd() ), |
| 54 | 58 | 'expectedCountry' => 'de', |
| 59 | + 'splitActive' => true, | |
| 55 | 60 | 'adultContent' => false, |
| 56 | 61 | 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors' ], |
| 57 | 62 | 'existingVendorKeys' => [ 'selected', 'carrierId' ], |
| 58 | 63 | 'vendorsSize' => 1, |
| @@ -60,8 +65,9 @@ | ||
| 60 | 65 | ], |
| 61 | 66 | [ |
| 62 | 67 | 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierGermanHd() ), |
| 63 | 68 | 'expectedCountry' => 'de', |
| 69 | + 'splitActive' => true, | |
| 64 | 70 | 'adultContent' => true, |
| 65 | 71 | 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'vendors', 'livePickupPoint' ], |
| 66 | 72 | 'existingVendorKeys' => [ 'selected', 'carrierId' ], |
| 67 | 73 | 'vendorsSize' => 1, |
| @@ -66,8 +72,52 @@ | ||
| 66 | 72 | 'existingVendorKeys' => [ 'selected', 'carrierId' ], |
| 67 | 73 | 'vendorsSize' => 1, |
| 68 | 74 | 'notExistingKeys' => [ 'carriers' ], |
| 69 | 75 | ], |
| 76 | + [ | |
| 77 | + 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierZpointcz() ), | |
| 78 | + 'expectedCountry' => 'cz', | |
| 79 | + 'splitActive' => false, | |
| 80 | + 'adultContent' => true, | |
| 81 | + 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'carriers', 'livePickupPoint' ], | |
| 82 | + 'existingVendorKeys' => [], | |
| 83 | + 'vendorsSize' => 0, | |
| 84 | + 'notExistingKeys' => [ 'vendors' ], | |
| 85 | + 'carriersValueValidator' => 'is_string', | |
| 86 | + ], | |
| 87 | + [ | |
| 88 | + 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierZpointcz() ), | |
| 89 | + 'expectedCountry' => 'cz', | |
| 90 | + 'splitActive' => false, | |
| 91 | + 'adultContent' => false, | |
| 92 | + 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'carriers' ], | |
| 93 | + 'existingVendorKeys' => [], | |
| 94 | + 'vendorsSize' => 0, | |
| 95 | + 'notExistingKeys' => [ 'vendors', 'livePickupPoint' ], | |
| 96 | + 'carriersValueValidator' => 'is_string', | |
| 97 | + ], | |
| 98 | + [ | |
| 99 | + 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierGermanPp() ), | |
| 100 | + 'expectedCountry' => 'de', | |
| 101 | + 'splitActive' => false, | |
| 102 | + 'adultContent' => false, | |
| 103 | + 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'carriers' ], | |
| 104 | + 'existingVendorKeys' => [], | |
| 105 | + 'vendorsSize' => 0, | |
| 106 | + 'notExistingKeys' => [ 'vendors', 'livePickupPoint' ], | |
| 107 | + 'carriersValueValidator' => 'is_numeric', | |
| 108 | + ], | |
| 109 | + [ | |
| 110 | + 'order' => new Order( 'dummyNumber123', DummyFactory::createCarrierCzechHdRequiresSize() ), | |
| 111 | + 'expectedCountry' => 'cz', | |
| 112 | + 'splitActive' => false, | |
| 113 | + 'adultContent' => false, | |
| 114 | + 'existingKeys' => [ 'language', 'appIdentity', 'weight', 'carriers' ], | |
| 115 | + 'existingVendorKeys' => [], | |
| 116 | + 'vendorsSize' => 0, | |
| 117 | + 'notExistingKeys' => [ 'vendors', 'livePickupPoint' ], | |
| 118 | + 'carriersValueValidator' => 'is_null', | |
| 119 | + ], | |
| 70 | 120 | ]; |
| 71 | 121 | } |
| 72 | 122 | |
| 73 | 123 | /** |
| @@ -75,8 +125,9 @@ | ||
| 75 | 125 | */ |
| 76 | 126 | public function testPickupPointForAdmin( |
| 77 | 127 | Order $order, |
| 78 | 128 | string $expectedCountry, |
| 129 | + bool $splitActive, | |
| 79 | 130 | bool $adultContent, |
| 80 | 131 | array $existingKeys, |
| 81 | 132 | array $existingVendorKeys, |
| 82 | 133 | int $vendorsSize, |
| @@ -82,20 +133,27 @@ | ||
| 82 | 133 | int $vendorsSize, |
| 83 | 134 | array $notExistingKeys, |
| 84 | 135 | ?string $carriersValueValidator = null |
| 85 | 136 | ): void { |
| 86 | - $wpAdapterMock = $this->createMock( WpAdapter::class ); | |
| 137 | + $wpAdapterMock = $this->createMock( WpAdapter::class ); | |
| 138 | + $featureFlagProviderMock = $this->createMock( FeatureFlagProvider::class ); | |
| 87 | 139 | |
| 88 | 140 | $config = new PacketaPickupPointsConfig( |
| 89 | 141 | new CompoundCarrierCollectionFactory(), |
| 90 | - new VendorCollectionFactory() | |
| 142 | + new VendorCollectionFactory(), | |
| 143 | + $featureFlagProviderMock | |
| 91 | 144 | ); |
| 92 | 145 | |
| 93 | 146 | $builder = new WidgetOptionsBuilder( |
| 94 | 147 | $config, |
| 148 | + $featureFlagProviderMock, | |
| 95 | 149 | $wpAdapterMock |
| 96 | 150 | ); |
| 97 | 151 | |
| 152 | + $featureFlagProviderMock | |
| 153 | + ->method( 'isSplitActive' ) | |
| 154 | + ->willReturn( $splitActive ); | |
| 155 | + | |
| 98 | 156 | $order->setShippingCountry( $order->getCarrier()->getCountry() ); |
| 99 | 157 | $order->setAdultContent( $adultContent ); |
| 100 | 158 | $result = $builder->createPickupPointForAdmin( $order ); |
| 101 | 159 | |
| @@ -183,17 +241,20 @@ | ||
| 183 | 241 | Address $address, |
| 184 | 242 | array $expectedKeys, |
| 185 | 243 | array $nonExistingKeys |
| 186 | 244 | ): void { |
| 187 | - $wpAdapterMock = $this->createMock( WpAdapter::class ); | |
| 245 | + $wpAdapterMock = $this->createMock( WpAdapter::class ); | |
| 246 | + $featureFlagProviderMock = $this->createMock( FeatureFlagProvider::class ); | |
| 188 | 247 | |
| 189 | 248 | $config = new PacketaPickupPointsConfig( |
| 190 | 249 | new CompoundCarrierCollectionFactory(), |
| 191 | - new VendorCollectionFactory() | |
| 250 | + new VendorCollectionFactory(), | |
| 251 | + $featureFlagProviderMock | |
| 192 | 252 | ); |
| 193 | 253 | |
| 194 | 254 | $builder = new WidgetOptionsBuilder( |
| 195 | 255 | $config, |
| 256 | + $featureFlagProviderMock, | |
| 196 | 257 | $wpAdapterMock |
| 197 | 258 | ); |
| 198 | 259 | |
| 199 | 260 | $order->setDeliveryAddress( $address ); |
| @@ -218,25 +279,49 @@ | ||
| 218 | 279 | |
| 219 | 280 | return [ |
| 220 | 281 | [ |
| 221 | 282 | 'carrier' => DummyFactory::createCarrierCzechHdRequiresSize(), |
| 283 | + 'splitActive' => true, | |
| 222 | 284 | 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'address_validation' ] ), |
| 223 | 285 | 'nonExistingKeys' => [ 'vendors', 'carriers' ], |
| 224 | 286 | 'addressValidation' => 'optional', |
| 225 | 287 | ], |
| 226 | 288 | [ |
| 289 | + 'carrier' => DummyFactory::createCarrierCzechHdRequiresSize(), | |
| 290 | + 'splitActive' => false, | |
| 291 | + 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'address_validation' ] ), | |
| 292 | + 'nonExistingKeys' => [ 'vendors', 'carriers' ], | |
| 293 | + 'addressValidation' => 'optional', | |
| 294 | + ], | |
| 295 | + [ | |
| 227 | 296 | 'carrier' => DummyFactory::createCarrierGermanHd(), |
| 297 | + 'splitActive' => true, | |
| 228 | 298 | 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'address_validation' ] ), |
| 229 | 299 | 'nonExistingKeys' => [ 'vendors', 'carriers' ], |
| 230 | 300 | 'addressValidation' => 'none', |
| 231 | 301 | ], |
| 232 | 302 | [ |
| 303 | + 'carrier' => DummyFactory::createCarrierGermanHd(), | |
| 304 | + 'splitActive' => false, | |
| 305 | + 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'address_validation' ] ), | |
| 306 | + 'nonExistingKeys' => [ 'vendors', 'carriers' ], | |
| 307 | + 'addressValidation' => 'none', | |
| 308 | + ], | |
| 309 | + [ | |
| 233 | 310 | 'carrier' => DummyFactory::createCarrierZpointcz(), |
| 311 | + 'splitActive' => true, | |
| 234 | 312 | 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'vendors' ] ), |
| 235 | 313 | 'nonExistingKeys' => [ 'address_validation', 'carriers' ], |
| 236 | 314 | ], |
| 237 | 315 | [ |
| 316 | + 'carrier' => DummyFactory::createCarrierZpointcz(), | |
| 317 | + 'splitActive' => false, | |
| 318 | + 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'carriers' ] ), | |
| 319 | + 'nonExistingKeys' => [ 'address_validation', 'vendors' ], | |
| 320 | + ], | |
| 321 | + [ | |
| 238 | 322 | 'carrier' => DummyFactory::createCarrierCzzpoint(), |
| 323 | + 'splitActive' => true, | |
| 239 | 324 | 'expectedKeys' => array_merge( $alwaysPresentKeys, [ 'vendors' ] ), |
| 240 | 325 | 'nonExistingKeys' => [ 'address_validation', 'carriers' ], |
| 241 | 326 | ], |
| 242 | 327 | ]; |
| @@ -246,21 +331,25 @@ | ||
| 246 | 331 | * @dataProvider getCarrierForCheckoutDataProvider |
| 247 | 332 | */ |
| 248 | 333 | public function testGetCarrierForCheckout( |
| 249 | 334 | Carrier $carrier, |
| 335 | + bool $splitActive, | |
| 250 | 336 | array $expectedKeys, |
| 251 | 337 | array $nonExistingKeys, |
| 252 | 338 | ?string $addressValidation = null |
| 253 | 339 | ): void { |
| 254 | - $wpAdapterMock = $this->createMock( WpAdapter::class ); | |
| 340 | + $wpAdapterMock = $this->createMock( WpAdapter::class ); | |
| 341 | + $featureFlagProviderMock = $this->createMock( FeatureFlagProvider::class ); | |
| 255 | 342 | |
| 256 | 343 | $config = new PacketaPickupPointsConfig( |
| 257 | 344 | new CompoundCarrierCollectionFactory(), |
| 258 | 345 | new VendorCollectionFactory(), |
| 346 | + $featureFlagProviderMock | |
| 259 | 347 | ); |
| 260 | 348 | |
| 261 | 349 | $builder = new WidgetOptionsBuilder( |
| 262 | 350 | $config, |
| 351 | + $featureFlagProviderMock, | |
| 263 | 352 | $wpAdapterMock |
| 264 | 353 | ); |
| 265 | 354 | |
| 266 | 355 | $optionId = OptionPrefixer::getOptionId( $carrier->getId() ); |
| @@ -270,8 +359,12 @@ | ||
| 270 | 359 | [ |
| 271 | 360 | 'address_validation' => $addressValidation, |
| 272 | 361 | ] |
| 273 | 362 | ); |
| 363 | + | |
| 364 | + $featureFlagProviderMock | |
| 365 | + ->method( 'isSplitActive' ) | |
| 366 | + ->willReturn( $splitActive ); | |
| 274 | 367 | |
| 275 | 368 | $result = $builder->getCarrierForCheckout( |
| 276 | 369 | $carrier, |
| 277 | 370 | $optionId |