Files
kupshop/bundles/KupShop/UserAddressesBundle/Tests/UserAddressesTest.php
2025-08-02 16:30:27 +02:00

150 lines
4.4 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\UserAddressesBundle\Tests;
use KupShop\DevelopmentBundle\Util\Tests\CartTestTrait;
use KupShop\UserAddressesBundle\Util\UserAddressesCartUtil;
class UserAddressesTest extends \DatabaseTestCase
{
use CartTestTrait;
/**
* @dataProvider addressSelectionDataProvider
*/
public function testCustomAddressToCart(array $delivery, bool $expectedChange, bool $expectedNew): void
{
$this->loginUser(2);
$cart = $this->prepareCart();
$this->insertProduct(3);
$this->setDeliveryType(2);
$lastIdBefore = $this->getLastId();
$cart->fetchAddresses();
$cart->setData('new_address', $delivery);
$cart->save();
$order = $this->submitOrder();
unset($delivery['save']);
if ($expectedChange) {
if ($expectedNew) {
$this->assertGreaterThan($lastIdBefore, $this->getLastId(), 'Adresa se měla uložit');
}
$this->assertEquals(false, $order->hasSameAddress(), 'Doručovací adresa se měla změnit');
$this->assertEquals($delivery, $this->getAddressArrayFromOrder($order), 'Doručovací adresa se měla změnit');
} else {
$this->assertEquals(true, $order->hasSameAddress(), 'Doručovací adresa se neměla změnit');
}
}
public function addressSelectionDataProvider(): array
{
return [
[['name' => '',
'surname' => '',
'phone' => '',
'street' => '',
'city' => '',
'zip' => '',
'country' => 'AT',
'firm' => '',
'save' => ''],
false,
false],
[['name' => 'Ondřej',
'surname' => 'Kořínek',
'phone' => '+420789632145',
'street' => 'Pod koželuhy 100',
'city' => 'Jičín',
'zip' => '50601',
'country' => 'CZ',
'firm' => '',
'save' => '0'],
true,
false],
[['name' => 'Ondřej',
'surname' => 'Kořínek',
'phone' => '+420789632145',
'street' => 'Pod koželuhy 100',
'city' => 'Jičín',
'zip' => '50601',
'country' => 'CZ',
'firm' => '',
'save' => '1'],
true,
true],
];
}
public function testAddressToCart(): void
{
$util = $this->get(UserAddressesCartUtil::class);
$cart = $this->prepareCart();
$this->insertProduct(3);
$this->setDeliveryType(2);
$cart->fetchAddresses();
$util->saveAddressToCart(1);
$expected = [
'name' => 'Lukáš',
'surname' => 'Trkan',
'firm' => 'wpj s.r.o.',
'street' => 'Lánovská 1475',
'city' => 'Vrchlabí',
'zip' => '54301',
'country' => 'CZ',
'phone' => '+420789456123',
];
$cartExtraFields = [
'custom_address' => '',
'state' => '',
'ico' => '',
'dic' => '',
'email' => '',
'copy_email' => '',
'currency' => 'CZK',
'id' => 1,
];
$this->assertEquals($expected + $cartExtraFields, $cart->delivery, 'Doručovací adresa se měla změnit');
$order = $this->submitOrder();
$this->assertEquals($expected,
array_intersect_key($expected, $this->getAddressArrayFromOrder($order)),
'Doručovací adresa se měla změnit');
}
private function getLastId()
{
return sqlQueryBuilder()->select('id')->from('users_addresses')
->orderBy('id', 'DESC')->execute()->fetchOne();
}
private function getAddressArrayFromOrder($order): array
{
return [
'name' => $order->delivery_name,
'surname' => $order->delivery_surname,
'phone' => $order->delivery_phone,
'street' => $order->delivery_street,
'city' => $order->delivery_city,
'zip' => $order->delivery_zip,
'country' => $order->delivery_country,
'firm' => $order->delivery_firm,
];
}
public function getDataSet()
{
return $this->getJsonDataSetFromFile();
}
}