Skip to content

Commit

Permalink
Merge branch '1.3' into 1.4
Browse files Browse the repository at this point in the history
* 1.3:
  Improve release process docs
  Test order with no shipping address
  Ui improvements in addresses section
  Don't fail on billing or shipping address not set
  • Loading branch information
pamil committed Feb 14, 2019
2 parents 81e1dbb + d3cf8c5 commit a93c125
Show file tree
Hide file tree
Showing 8 changed files with 117 additions and 27 deletions.
50 changes: 38 additions & 12 deletions docs/contributing/organization/release-process.rst
Expand Up @@ -7,29 +7,26 @@ code & documentation hosted on the main ``Sylius/Sylius`` `Git repository`_).
Sylius manages its releases through a *time-based model* and follows the
`Semantic Versioning`_ strategy:

* A new Sylius minor version (e.g. 1.1, 1.2, etc.) comes out every *four months*
* A new Sylius patch version (e.g. 1.0.1, 1.0.2, etc.) comes out every *two weeks*
* A new Sylius minor version (e.g. 1.1, 1.2, etc.) comes out *at least every four months*.
* A new Sylius patch version (e.g. 1.0.1, 1.0.2, etc.) comes out *at least every three weeks*.

Development
-----------

The full development period for any minor version lasts four months and
is divided into two phases:
The full development period for any minor version is divided into two phases:

* **Development**: *Three months* to add new features and to enhance existing
ones;
* **Development**: *First 5/6 of the time intended for the release* to add new features and to enhance existing ones.

* **Stabilization**: *One month* to fix bugs, prepare the release, and wait
for the whole Sylius ecosystem (third-party libraries, plugins, and
projects using Sylius) to catch up.
* **Stabilization**: *Last 1/6 of the time intended for the release* to fix bugs, prepare the release, and wait
for the whole Sylius ecosystem (third-party libraries, plugins, and projects using Sylius) to catch up.

During the development period, any new feature can be reverted if it won't be
finished in time or if it won't be stable enough to be included in the coming release.
During both periods, any new feature can be reverted if it won't be
finished in time or won't be stable enough to be included in the coming release.

Maintenance
-----------

Each Sylius version is maintained for a fixed period of time.
Each minor Sylius version is maintained for a fixed period of time after its release.
This maintenance is divided into:

* *Bug fixes and security fixes*: During this period, being *eight months* long,
Expand All @@ -40,6 +37,35 @@ This maintenance is divided into:
only security related issues can be fixed. The end of this period is referenced
as being the *end of life* of a release.

Past Releases
-------------

+---------+--------------------+--------------------+--------------------+-----------------------+
| Version | Release date | End of maintenance | End of life | Status |
+=========+====================+====================+====================+=======================+
| 1.0 | Sep 13, 2017 | May 13, 2018 | Jan 13, 2019 | Not supported |
+---------+--------------------+--------------------+--------------------+-----------------------+
| 1.1 | Feb 12, 2018 | Oct 12, 2018 | Jun 12, 2019 | Security support only |
+---------+--------------------+--------------------+--------------------+-----------------------+
| 1.2 | Jun 13, 2018 | Feb 13, 2019 | Oct 13, 2019 | Security support only |
+---------+--------------------+--------------------+--------------------+-----------------------+
| 1.3 | Oct 1, 2018 | Jun 1, 2019 | Feb 1, 2020 | Fully supported |
+---------+--------------------+--------------------+--------------------+-----------------------+
| 1.4 | Feb 4, 2019 | Oct 4, 2019 | Jun 4, 2020 | Fully supported |
+---------+--------------------+--------------------+--------------------+-----------------------+

Future Releases
---------------

+---------+----------------------+------------------------+--------------------+
| Version | Development starts | Stabilization starts | Release date |
+=========+======================+========================+====================+
| 1.5 | Early Feb 2019 | Mid Apr 2019 | Late Apr 2019 |
+---------+----------------------+------------------------+--------------------+
| 1.6 | Early May 2019 | Mid Aug 2019 | Late Aug 2019 |
+---------+----------------------+------------------------+--------------------+


Backward Compatibility
----------------------

Expand Down
@@ -0,0 +1,25 @@
@managing_orders
Feature: Seeing an order without shipping address
In order to see details of a specific order which does not have to be shipped
As an Administrator
I want to be able to view basic information about an order

Background:
Given the store operates on a single channel in "United States"
And the store has a product "Angel E-book"
And this product does not require shipping
And the store ships everywhere for free
And the store allows paying with "Cash on Delivery"
And there is a customer "lucy@teamlucifer.com" that placed an order "#00000666"
And the customer bought a single "Angel E-book"
And the customer set the billing address as "Mike Ross", "350 5th Ave", "10118", "New York", "United States"
And the customer chose "Cash on Delivery" payment
And I am logged in as an administrator

@ui
Scenario: Seeing basic information about an order
When I view the summary of the order "#00000666"
Then it should have been placed by the customer "lucy@teamlucifer.com"
And it should be billed to "Mike Ross", "350 5th Ave", "10118", "New York", "United States"
And it should be paid with "Cash on Delivery"
And it should have no shipping address set
13 changes: 13 additions & 0 deletions src/Sylius/Behat/Context/Setup/ProductContext.php
Expand Up @@ -749,6 +749,19 @@ public function theProductWasRenamedTo(ProductInterface $product, string $produc
$this->objectManager->flush();
}

/**
* @Given /^(this product) does not require shipping$/
*/
public function thisProductDoesNotRequireShipping(ProductInterface $product): void
{
/** @var ProductVariantInterface $variant */
foreach ($product->getVariants() as $variant) {
$variant->setShippingRequired(false);
}

$this->objectManager->flush();
}

private function getPriceFromString(string $price): int
{
return (int) round((float) str_replace(['€', '£', '$'], '', $price) * 100, 2);
Expand Down
8 changes: 8 additions & 0 deletions src/Sylius/Behat/Context/Ui/Admin/ManagingOrdersContext.php
Expand Up @@ -247,6 +247,14 @@ public function itShouldBeBilledTo(
Assert::true($this->showPage->hasBillingAddress($customerName, $street, $postcode, $city, $countryName));
}

/**
* @Then it should have no shipping address set
*/
public function itShouldHaveNoShippingAddressSet(): void
{
Assert::false($this->showPage->hasShippingAddressVisible());
}

/**
* @Then it should be shipped via the :shippingMethodName shipping method
*/
Expand Down
11 changes: 11 additions & 0 deletions src/Sylius/Behat/Page/Admin/Order/ShowPage.php
Expand Up @@ -51,6 +51,17 @@ public function hasShippingAddress(string $customerName, string $street, string
return $this->hasAddress($shippingAddressText, $customerName, $street, $postcode, $city, $countryName);
}

public function hasShippingAddressVisible(): bool
{
try {
$this->getElement('shipping_address');
} catch (ElementNotFoundException $exception) {
return false;
}

return true;
}

public function hasBillingAddress(string $customerName, string $street, string $postcode, string $city, string $countryName): bool
{
$billingAddressText = $this->getElement('billing_address')->getText();
Expand Down
2 changes: 2 additions & 0 deletions src/Sylius/Behat/Page/Admin/Order/ShowPageInterface.php
Expand Up @@ -22,6 +22,8 @@ public function hasCustomer(string $customerName): bool;

public function hasShippingAddress(string $customerName, string $street, string $postcode, string $city, string $countryName): bool;

public function hasShippingAddressVisible(): bool;

public function hasBillingAddress(string $customerName, string $street, string $postcode, string $city, string $countryName): bool;

public function hasShipment(string $shippingMethodName): bool;
Expand Down
@@ -1,17 +1,21 @@
<h4 class="ui top attached styled header">
{{ 'sylius.ui.shipping_address'|trans }}
</h4>
<div class="ui attached segment" id="shipping-address">
{% include '@SyliusAdmin/Common/_address.html.twig' with {'address': order.shippingAddress} %}
</div>
<h4 class="ui attached styled header">
{{ 'sylius.ui.billing_address'|trans }}
</h4>
<div class="ui attached segment" id="billing-address">
{% include '@SyliusAdmin/Common/_address.html.twig' with {'address': order.billingAddress} %}
<div class="ui segment">
<a href="{{ path('sylius_admin_order_update', {'id': order.id}) }}" class="ui icon labeled tiny fluid button">
<i class="pencil icon"></i> {{ 'sylius.ui.edit'|trans }}
</a>
{% if order.shippingAddress is not null %}
<h4 class="ui top attached styled header">
{{ 'sylius.ui.shipping_address'|trans }}
</h4>
<div class="ui attached segment" id="shipping-address">
{% include '@SyliusAdmin/Common/_address.html.twig' with {'address': order.shippingAddress} %}
</div>
{% endif %}
{% if order.billingAddress is not null %}
<h4 class="ui attached styled header{% if order.shippingAddress is null %} top{% endif %}">
{{ 'sylius.ui.billing_address'|trans }}
</h4>
<div class="ui attached segment" id="billing-address">
{% include '@SyliusAdmin/Common/_address.html.twig' with {'address': order.billingAddress} %}
</div>
{% endif %}
<div class="ui attached segment" id="edit-addresses">
<a href="{{ path('sylius_admin_order_update', {'id': order.id}) }}" class="ui icon labeled tiny fluid button">
<i class="pencil icon"></i> {{ 'sylius.ui.edit_addresses'|trans }}
</a>
</div>
Expand Up @@ -246,6 +246,7 @@ sylius:
display: 'Display'
edit: 'Edit'
edit_admin_user: 'Edit administrator'
edit_addresses: 'Edit addresses'
edit_association_type: 'Edit Association type'
edit_channel: 'Edit channel'
edit_country: 'Edit country'
Expand Down

0 comments on commit a93c125

Please sign in to comment.