mirror of
https://github.com/Sylius/Sylius.git
synced 2026-07-14 17:10:53 +00:00
[UI][Channel] Add shippingAddressInCheckoutRequired field to channel entity
This commit is contained in:
parent
b8fbd53549
commit
5d244a4994
11 changed files with 129 additions and 6 deletions
|
|
@ -8,7 +8,7 @@ Feature: Choosing a required address in the checkout for a channel
|
||||||
Given the store operates on a single channel in "United States"
|
Given the store operates on a single channel in "United States"
|
||||||
And I am logged in as an administrator
|
And I am logged in as an administrator
|
||||||
|
|
||||||
@api
|
@api @ui
|
||||||
Scenario: Adding a new channel with a required address in the checkout
|
Scenario: Adding a new channel with a required address in the checkout
|
||||||
When I want to create a new channel
|
When I want to create a new channel
|
||||||
And I specify its code as "MOBILE"
|
And I specify its code as "MOBILE"
|
||||||
|
|
@ -19,13 +19,13 @@ Feature: Choosing a required address in the checkout for a channel
|
||||||
And I choose shipping address as a required address in the checkout
|
And I choose shipping address as a required address in the checkout
|
||||||
And I add it
|
And I add it
|
||||||
Then I should be notified that it has been successfully created
|
Then I should be notified that it has been successfully created
|
||||||
And the required address in the checkout for the "Mobile Store" channel should be shipping
|
And the required address in the checkout for this channel should be shipping
|
||||||
|
|
||||||
@api
|
@api @ui
|
||||||
Scenario: Changing a required address in the checkout for an existing channel
|
Scenario: Changing a required address in the checkout for an existing channel
|
||||||
Given the store operates on a channel named "Web Store"
|
Given the store operates on a channel named "Web Store"
|
||||||
When I want to modify this channel
|
When I want to modify this channel
|
||||||
And I choose shipping address as a required address in the checkout
|
And I choose shipping address as a required address in the checkout
|
||||||
And I save my changes
|
And I save my changes
|
||||||
Then I should be notified that it has been successfully edited
|
Then I should be notified that it has been successfully edited
|
||||||
And the required address in the checkout for the "Web Store" channel should be shipping
|
And the required address in the checkout for this channel should be shipping
|
||||||
|
|
|
||||||
|
|
@ -256,9 +256,9 @@ final class ManagingChannelsContext implements Context
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then /^the required address in the checkout for the ("[^"]+" channel) should be (billing|shipping)$/
|
* @Then /^the required address in the checkout for this channel should be (billing|shipping)$/
|
||||||
*/
|
*/
|
||||||
public function theDefaultTaxZoneForTheChannelShouldBe(ChannelInterface $channel, string $type): void
|
public function theRequiredAddressInTheCheckoutForTheChannelShouldBe(string $type): void
|
||||||
{
|
{
|
||||||
Assert::true($this->responseChecker->hasValue(
|
Assert::true($this->responseChecker->hasValue(
|
||||||
$this->client->getLastResponse(),
|
$this->client->getLastResponse(),
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ declare(strict_types=1);
|
||||||
namespace Sylius\Behat\Context\Ui\Admin;
|
namespace Sylius\Behat\Context\Ui\Admin;
|
||||||
|
|
||||||
use Behat\Behat\Context\Context;
|
use Behat\Behat\Context\Context;
|
||||||
|
use Sylius\Behat\Element\Admin\Channel\ShippingAddressInCheckoutRequiredElementInterface;
|
||||||
use Sylius\Behat\NotificationType;
|
use Sylius\Behat\NotificationType;
|
||||||
use Sylius\Behat\Page\Admin\Channel\CreatePageInterface;
|
use Sylius\Behat\Page\Admin\Channel\CreatePageInterface;
|
||||||
use Sylius\Behat\Page\Admin\Channel\IndexPageInterface;
|
use Sylius\Behat\Page\Admin\Channel\IndexPageInterface;
|
||||||
|
|
@ -31,6 +32,7 @@ final class ManagingChannelsContext implements Context
|
||||||
private IndexPageInterface $indexPage,
|
private IndexPageInterface $indexPage,
|
||||||
private CreatePageInterface $createPage,
|
private CreatePageInterface $createPage,
|
||||||
private UpdatePageInterface $updatePage,
|
private UpdatePageInterface $updatePage,
|
||||||
|
private ShippingAddressInCheckoutRequiredElementInterface $shippingAddressInCheckoutRequiredElement,
|
||||||
private CurrentPageResolverInterface $currentPageResolver,
|
private CurrentPageResolverInterface $currentPageResolver,
|
||||||
private NotificationCheckerInterface $notificationChecker,
|
private NotificationCheckerInterface $notificationChecker,
|
||||||
) {
|
) {
|
||||||
|
|
@ -131,6 +133,20 @@ final class ManagingChannelsContext implements Context
|
||||||
$this->createPage->create();
|
$this->createPage->create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When /^I choose (billing|shipping) address as a required address in the checkout$/
|
||||||
|
*/
|
||||||
|
public function iChooseAddressAsARequiredAddressInTheCheckout(string $type): void
|
||||||
|
{
|
||||||
|
if ($type === 'shipping') {
|
||||||
|
$this->shippingAddressInCheckoutRequiredElement->requireShippingAddressInCheckout();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->shippingAddressInCheckoutRequiredElement->requireBillingAddressInCheckout();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then I should see the channel :channelName in the list
|
* @Then I should see the channel :channelName in the list
|
||||||
* @Then the channel :channelName should appear in the registry
|
* @Then the channel :channelName should appear in the registry
|
||||||
|
|
@ -519,6 +535,20 @@ final class ManagingChannelsContext implements Context
|
||||||
Assert::same($this->updatePage->getMenuTaxon(), $menuTaxon);
|
Assert::same($this->updatePage->getMenuTaxon(), $menuTaxon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^the required address in the checkout for this channel should be (billing|shipping)$/
|
||||||
|
*/
|
||||||
|
public function theRequiredAddressInTheCheckoutForThisChannelShouldBe(string $type): void
|
||||||
|
{
|
||||||
|
if ($type === 'shipping') {
|
||||||
|
Assert::true($this->shippingAddressInCheckoutRequiredElement->isShippingAddressInCheckoutRequired());
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert::false($this->shippingAddressInCheckoutRequiredElement->isShippingAddressInCheckoutRequired());
|
||||||
|
}
|
||||||
|
|
||||||
private function assertChannelState(ChannelInterface $channel, bool $state): void
|
private function assertChannelState(ChannelInterface $channel, bool $state): void
|
||||||
{
|
{
|
||||||
$this->iWantToBrowseChannels();
|
$this->iWantToBrowseChannels();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Sylius package.
|
||||||
|
*
|
||||||
|
* (c) Paweł Jędrzejewski
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Sylius\Behat\Element\Admin\Channel;
|
||||||
|
|
||||||
|
use FriendsOfBehat\PageObjectExtension\Element\Element;
|
||||||
|
|
||||||
|
final class ShippingAddressInCheckoutRequiredElement extends Element implements ShippingAddressInCheckoutRequiredElementInterface
|
||||||
|
{
|
||||||
|
public function requireShippingAddressInCheckout(): void
|
||||||
|
{
|
||||||
|
$this->getElement('shipping_address_in_checkout_required')->check();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function requireBillingAddressInCheckout(): void
|
||||||
|
{
|
||||||
|
$this->getElement('shipping_address_in_checkout_required')->uncheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isShippingAddressInCheckoutRequired(): bool
|
||||||
|
{
|
||||||
|
return $this->getElement('shipping_address_in_checkout_required')->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getDefinedElements(): array
|
||||||
|
{
|
||||||
|
return array_merge(parent::getDefinedElements(), [
|
||||||
|
'shipping_address_in_checkout_required' => '#sylius_channel_shippingAddressInCheckoutRequired',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Sylius package.
|
||||||
|
*
|
||||||
|
* (c) Paweł Jędrzejewski
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Sylius\Behat\Element\Admin\Channel;
|
||||||
|
|
||||||
|
interface ShippingAddressInCheckoutRequiredElementInterface
|
||||||
|
{
|
||||||
|
public function requireShippingAddressInCheckout(): void;
|
||||||
|
|
||||||
|
public function requireBillingAddressInCheckout(): void;
|
||||||
|
|
||||||
|
public function isShippingAddressInCheckoutRequired(): bool;
|
||||||
|
}
|
||||||
|
|
@ -59,6 +59,7 @@
|
||||||
<argument type="service" id="sylius.behat.page.admin.channel.index" />
|
<argument type="service" id="sylius.behat.page.admin.channel.index" />
|
||||||
<argument type="service" id="sylius.behat.page.admin.channel.create" />
|
<argument type="service" id="sylius.behat.page.admin.channel.create" />
|
||||||
<argument type="service" id="sylius.behat.page.admin.channel.update" />
|
<argument type="service" id="sylius.behat.page.admin.channel.update" />
|
||||||
|
<argument type="service" id="sylius.behat.element.admin.channel.shipping_address_in_checkout_required" />
|
||||||
<argument type="service" id="sylius.behat.current_page_resolver" />
|
<argument type="service" id="sylius.behat.current_page_resolver" />
|
||||||
<argument type="service" id="sylius.behat.notification_checker" />
|
<argument type="service" id="sylius.behat.notification_checker" />
|
||||||
</service>
|
</service>
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@
|
||||||
<services>
|
<services>
|
||||||
<service id="sylius.behat.element.admin.account.reset" class="Sylius\Behat\Element\Admin\Account\ResetElement" parent="sylius.behat.element" />
|
<service id="sylius.behat.element.admin.account.reset" class="Sylius\Behat\Element\Admin\Account\ResetElement" parent="sylius.behat.element" />
|
||||||
|
|
||||||
|
<service id="sylius.behat.element.admin.channel.shipping_address_in_checkout_required" class="Sylius\Behat\Element\Admin\Channel\ShippingAddressInCheckoutRequiredElement" parent="sylius.behat.element" />
|
||||||
|
|
||||||
<service id="sylius.behat.element.admin.channel.shop_billing_data" class="Sylius\Behat\Element\Admin\Channel\ShopBillingDataElement" parent="sylius.behat.element" />
|
<service id="sylius.behat.element.admin.channel.shop_billing_data" class="Sylius\Behat\Element\Admin\Channel\ShopBillingDataElement" parent="sylius.behat.element" />
|
||||||
|
|
||||||
<service id="sylius.behat.element.admin.top_bar" class="Sylius\Behat\Element\Admin\TopBarElement" parent="sylius.behat.element" />
|
<service id="sylius.behat.element.admin.top_bar" class="Sylius\Behat\Element\Admin\TopBarElement" parent="sylius.behat.element" />
|
||||||
|
|
|
||||||
|
|
@ -1077,6 +1077,9 @@ sylius_ui:
|
||||||
countries:
|
countries:
|
||||||
template: '@SyliusAdmin/Channel/Form/_countries.html.twig'
|
template: '@SyliusAdmin/Channel/Form/_countries.html.twig'
|
||||||
priority: 20
|
priority: 20
|
||||||
|
required_address_in_checkout:
|
||||||
|
template: '@SyliusAdmin/Channel/Form/_shippingAddressInCheckoutRequired.html.twig'
|
||||||
|
priority: 15
|
||||||
money:
|
money:
|
||||||
template: '@SyliusAdmin/Channel/Form/_money.html.twig'
|
template: '@SyliusAdmin/Channel/Form/_money.html.twig'
|
||||||
priority: 10
|
priority: 10
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
<div class="ui attached segment">
|
||||||
|
<div style="padding-bottom: 0.8rem; font-size: 0.93rem">
|
||||||
|
{{ form_label(form.shippingAddressInCheckoutRequired) }}
|
||||||
|
</div>
|
||||||
|
<div style="display: flex">
|
||||||
|
<div style="padding-right: 0.8rem">
|
||||||
|
<label for="{{ form.shippingAddressInCheckoutRequired.vars.id }}">{{ 'sylius.ui.billing_address'|trans }}</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="ui toggle checkbox">
|
||||||
|
{{ form_widget(form.shippingAddressInCheckoutRequired) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="{{ form.shippingAddressInCheckoutRequired.vars.id }}">{{ 'sylius.ui.shipping_address'|trans }}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
@ -92,6 +92,10 @@ final class ChannelTypeExtension extends AbstractTypeExtension
|
||||||
'label' => 'sylius.form.channel.account_verification_required',
|
'label' => 'sylius.form.channel.account_verification_required',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
])
|
])
|
||||||
|
->add('shippingAddressInCheckoutRequired', CheckboxType::class, [
|
||||||
|
'label' => 'sylius.form.channel.shipping_address_in_checkout_required',
|
||||||
|
'required' => false,
|
||||||
|
])
|
||||||
->add('shopBillingData', ShopBillingDataType::class, [
|
->add('shopBillingData', ShopBillingDataType::class, [
|
||||||
'label' => 'sylius.form.channel.shop_billing_data',
|
'label' => 'sylius.form.channel.shop_billing_data',
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ sylius:
|
||||||
locales: Locales
|
locales: Locales
|
||||||
menu_taxon: Menu taxon
|
menu_taxon: Menu taxon
|
||||||
payment_methods: Payment Methods
|
payment_methods: Payment Methods
|
||||||
|
shipping_address_in_checkout_required: Address required in checkout
|
||||||
shipping_methods: Shipping Methods
|
shipping_methods: Shipping Methods
|
||||||
shop_billing_data: Shop billing data
|
shop_billing_data: Shop billing data
|
||||||
skipping_shipping_step_allowed: Skip shipping step if only one shipping method is available?
|
skipping_shipping_step_allowed: Skip shipping step if only one shipping method is available?
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue