Skip to content

Commit

Permalink
feature #278 Optional parameter to turn off the PDF generation (GSadee)
Browse files Browse the repository at this point in the history
This PR was merged into the master branch.

Discussion
----------

I'm introducing the new parameter to turn off the PDF generation:

The main reason for adding this parameter is to not force  to be installed.

Commits
-------

cc33d6b Add a parameter to disable PDF generation
9f4fcd8 Use the parameter for disabling PDF generation
7b29ee8 Add a note to UPGRADE file about changes in services' arguments
fd6a5b0 [Documentation] Update installation guide
e5d4384 [GitHub Actions] Add workflow for tests with PDF generation disabled
bebfa66 Fix passing invoice PDF path to sender after SyliusMailerBundle v1.7.…
40a3c8b [Behat] Fix InvoicesContext hook not to fail when there is no invoice…
374a7e4 Use the parameter for not sending PDF
e74d7f8 [Behat] Remove whitespaces from tags
571f669 [Behat] Split scenarios for enabled and disabled PDF generation
3beade4 [Dependencies] Downgrade version of friends-of-behat/exclude-specific…
  • Loading branch information
lchrusciel authored Apr 26, 2022
2 parents 32d02a7 + 3beade4 commit 85725ef
Show file tree
Hide file tree
Showing 45 changed files with 516 additions and 85 deletions.
157 changes: 157 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,160 @@ jobs:
name: Behat logs
path: etc/build/
if-no-files-found: ignore

tests-with-pdf-generation-disabled:
runs-on: ubuntu-latest

name: "PDF generation disabled: Sylius ${{ matrix.sylius }}, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, MySQL ${{ matrix.mysql }}"

strategy:
fail-fast: false
matrix:
php: ["8.1"]
symfony: ["^5.4"]
sylius: ["~1.11.0"]
node: ["14.x"]
mysql: ["8.0"]

env:
APP_ENV: test
DATABASE_URL: "mysql://root:[email protected]/sylius?serverVersion=${{ matrix.mysql }}"

steps:
-
uses: actions/checkout@v2

-
name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: "${{ matrix.php }}"
extensions: intl
tools: symfony
coverage: none

-
name: Setup Node
uses: actions/setup-node@v1
with:
node-version: "${{ matrix.node }}"

-
name: Shutdown default MySQL
run: sudo service mysql stop

-
name: Setup MySQL
uses: mirromutth/[email protected]
with:
mysql version: "${{ matrix.mysql }}"
mysql root password: "root"

-
name: Remove wkhtmltopdf binary
run: rm tests/Application/etc/wkhtmltopdf

-
name: Disable PDF generation
run: mv tests/Application/etc/sylius_invoicing_pdf_generation_disabled.yaml tests/Application/config/packages

-
name: Get Composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"

-
name: Cache Composer
uses: actions/cache@v2
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json **/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-${{ matrix.php }}-composer-
-
name: Restrict Symfony version
if: matrix.symfony != ''
run: |
composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^1.10"
composer config extra.symfony.require "${{ matrix.symfony }}"
-
name: Restrict Sylius version
if: matrix.sylius != ''
run: composer require "sylius/sylius:${{ matrix.sylius }}" --no-update --no-scripts --no-interaction

-
name: Install PHP dependencies
run: composer install --no-interaction

-
name: Get Yarn cache directory
id: yarn-cache
run: echo "::set-output name=dir::$(yarn cache dir)"

-
name: Cache Yarn
uses: actions/cache@v2
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ matrix.node }}-yarn-${{ hashFiles('**/package.json **/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node-${{ matrix.node }}-yarn-
-
name: Install JS dependencies
run: (cd tests/Application && yarn install)

-
name: Prepare test application database
run: |
(cd tests/Application && bin/console doctrine:database:create -vvv)
(cd tests/Application && bin/console doctrine:migrations:migrate -n -vvv -q)
-
name: Prepare test application assets
run: |
(cd tests/Application && bin/console assets:install public -vvv)
(cd tests/Application && yarn build)
-
name: Prepare test application cache
run: (cd tests/Application && bin/console cache:warmup -vvv)

-
name: Load fixtures in test application
run: (cd tests/Application && bin/console sylius:fixtures:load -n)

-
name: Run security check
run: symfony security:check

-
name: Run analysis
run: composer analyse

-
name: Run PHPSpec
run: vendor/bin/phpspec run --ansi -f progress --no-interaction

-
name: Run PHPUnit
run: vendor/bin/phpunit --colors=always

-
name: Replace excluded directory in Behat
run: sed -i 's/pdf_generation_disabled/pdf_generation_enabled/g' behat.yml.dist

-
name: Run Behat
run: vendor/bin/behat --colors --strict -vvv --no-interaction -f progress || vendor/bin/behat --colors --strict -vvv --no-interaction -f progress --rerun

-
name: Upload Behat logs
uses: actions/upload-artifact@v2
if: failure()
with:
name: Behat logs
path: etc/build/
if-no-files-found: ignore
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,16 @@ Additional feature of the plugin that fulfills Invoicing domain is the ability t
bin/console doctrine:migrations:migrate
```

3. Check if you have wkhtmltopdf binary. If not, you can download it [here](https://wkhtmltopdf.org/downloads.html).
3. Default configuration assumes enabled PDF file generation. If you don't want to use that feature change your app configuration:
```yaml
# config/packages/sylius_invoicing.yaml
sylius_invoicing:
pdf_generator:
enabled: false
```
Otherwise, check if you have wkhtmltopdf binary. If not, you can download it [here](https://wkhtmltopdf.org/downloads.html).
In case wkhtmltopdf is not located in `/usr/local/bin/wkhtmltopdf` modify the `WKHTMLTOPDF_PATH` environment variable in the `.env` file:
Expand Down
3 changes: 3 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
### UPGRADE FROM 0.21.0 TO 0.22.0

1. `Sylius\InvoicingPlugin\Generator\InvoicePdfFileGenerator` takes `Sylius\InvoicingPlugin\Generator\TwigToPdfGeneratorInterface` as the first argument in place of `Twig\Environment`, `Knp\Snappy\GeneratorInterface` and `Sylius\InvoicingPlugin\Generator\PdfOptionsGeneratorInterface`.
2. `Sylius\InvoicingPlugin\Creator\InvoiceCreator` takes `%sylius_invoicing.pdf_generator.enabled%` as the sixth argument.
3. `Sylius\InvoicingPlugin\Ui\Action\DownloadInvoiceAction` takes `%sylius_invoicing.pdf_generator.enabled%` as the fourth argument.
4. `Sylius\InvoicingPlugin\Email\InvoiceEmailSender` takes `%sylius_invoicing.pdf_generator.enabled%` as the third argument.

### UPGRADE FROM 0.20.0 TO 0.21.0

Expand Down
8 changes: 8 additions & 0 deletions behat.yml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,11 @@ default:
class: Tests\Sylius\InvoicingPlugin\Application\Kernel

FriendsOfBehat\VariadicExtension: ~

FriendsOfBehat\SuiteSettingsExtension:
paths:
- features

FriendsOfBehat\ExcludeSpecificationsExtension:
features:
- features/managing_invoices/pdf_generation_disabled
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"require-dev": {
"behat/behat": "^3.6.1",
"behat/mink-selenium2-driver": "^1.4",
"friends-of-behat/exclude-specifications-extension": "^0.2 || ^0.3",
"friends-of-behat/mink": "^1.8",
"friends-of-behat/mink-browserkit-driver": "^1.3",
"friends-of-behat/mink-debug-extension": "^2.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@managing_invoices
Feature: Being unable to download an invoice on a single order view
In order not to generate PDF files for invoices related to the order
As an Administrator
I want to be unable to download invoices on a single order view

Background:
Given the store operates on a single channel in "United States"
And the store has a product "PHP T-Shirt"
And the store ships everywhere for free
And the store allows paying with "Cash on Delivery"
And there is a customer "[email protected]" that placed an order "#00000022"
And the customer bought a single "PHP T-Shirt"
And the customer chose "Free" shipping method to "United States" with "Cash on Delivery" payment
And I am logged in as an administrator

@ui
Scenario: Being unable to download an invoice on a single order view
When I view the summary of the order "#00000022"
Then I should not be able to download the first invoice
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
@customer_browsing_invoices
Feature: Being unable to download an invoice on a single order view
In order not to generate a PDF file for an invoice related to the order
As a Customer
I want to be unable to download an invoice on a single order view

Background:
Given the store operates on a single channel in "United States"
And the store has a product "Angel T-Shirt"
And the store ships everywhere for free
And the store allows paying with "Cash on Delivery"
And I am a logged in customer
And I placed an order "#00000666"
And I bought a single "Angel T-Shirt"
And I addressed it to "Lucifer Morningstar", "Seaside Fwy", "90802" "Los Angeles" in the "United States"
And for the billing address of "Mazikeen Lilim" in the "Pacific Coast Hwy", "90806" "Los Angeles", "United States"
And I chose "Free" shipping method with "Cash on Delivery" payment

@ui
Scenario: Being unable to download an invoice on a single order view
When I view the summary of the order "#00000666"
Then I should not be able to download the first invoice
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
@managing_invoices
Feature: Being unable to download an invoice from its details page
In order not to generate a PDF file for a specific invoice
As an Administrator
I want to be unable to download an invoice

Background:
Given the store operates on a single channel in "United States"
And the store has a product "Angel T-Shirt" priced at "$60.00"
And the store has "UPS" shipping method with "$10.00" fee
And the store allows paying with "Cash on Delivery"
And I am logged in as an administrator
And I set shop billing data for channel "United States" as "Ragnarok", "1100110011", "Pacific Coast Hwy", "90806" "Los Angeles", "United States"
And there is a customer "[email protected]" that placed an order "#00000666"
And the customer bought 2 "Angel T-Shirt" products
And the customer "Lucifer Morningstar" addressed it to "Seaside Fwy", "90802" "Los Angeles" in the "United States"
And for the billing address of "Mazikeen Lilim" in the "Pacific Coast Hwy", "90806" "Los Angeles", "United States"
And the customer chose "UPS" shipping method with "Cash on Delivery" payment

@ui
Scenario: Being unable to download an invoice from its details page
Given I view the summary of the invoice for order "#00000666"
Then I should not be able to download the invoice
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@managing_invoices @ui
@managing_invoices
Feature: Downloading invoices on a single order view
In order to store all invoices related to the order
As an Administrator
Expand All @@ -14,6 +14,7 @@ Feature: Downloading invoices on a single order view
And the customer chose "Free" shipping method to "United States" with "Cash on Delivery" payment
And I am logged in as an administrator

@ui
Scenario: Downloading an invoice on order view
When I view the summary of the order "#00000022"
And I download the first invoice
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@customer_browsing_invoices @ui
@customer_browsing_invoices
Feature: Downloading invoices on a single order view
In order to have access to all invoices related to the order that I've placed
As a Customer
Expand All @@ -16,6 +16,7 @@ Feature: Downloading invoices on a single order view
And for the billing address of "Mazikeen Lilim" in the "Pacific Coast Hwy", "90806" "Los Angeles", "United States"
And I chose "Free" shipping method with "Cash on Delivery" payment

@ui
Scenario: Downloading an invoice on order view
When I view the summary of the order "#00000666"
And I download the first invoice
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
@managing_invoices
Feature: Downloading an invoice from its details page
In order to store a specific invoice
As an Administrator
I want to be able to download an invoice

Background:
Given the store operates on a single channel in "United States"
And the store has a product "Angel T-Shirt" priced at "$60.00"
And the store has "UPS" shipping method with "$10.00" fee
And the store allows paying with "Cash on Delivery"
And I am logged in as an administrator
And I set shop billing data for channel "United States" as "Ragnarok", "1100110011", "Pacific Coast Hwy", "90806" "Los Angeles", "United States"
And there is a customer "[email protected]" that placed an order "#00000666"
And the customer bought 2 "Angel T-Shirt" products
And the customer "Lucifer Morningstar" addressed it to "Seaside Fwy", "90802" "Los Angeles" in the "United States"
And for the billing address of "Mazikeen Lilim" in the "Pacific Coast Hwy", "90806" "Los Angeles", "United States"
And the customer chose "UPS" shipping method with "Cash on Delivery" payment

@ui
Scenario: Downloading an invoice
Given I view the summary of the invoice for order "#00000666"
When I download the invoice
Then the pdf file for this invoice should be downloaded successfully
5 changes: 0 additions & 5 deletions features/managing_invoices/seeing_invoice.feature
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ Feature: Seeing basic information about an invoice
And its total should be "142.00" in "USD" currency
And it should be issued in "United States" channel

Scenario: Downloading invoice
Given I view the summary of the invoice for order "#00000666"
When I download the invoice
Then the pdf file for this invoice should be downloaded successfully

Scenario: Going back to invoices view
Given I view the summary of the invoice for order "#00000666"
When I want to go back to invoices view
Expand Down
34 changes: 34 additions & 0 deletions spec/Creator/InvoiceCreatorSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,40 @@ function it_creates_invoice_for_order(
$this->__invoke('0000001', $invoiceDateTime);
}

function it_creates_invoice_without_generating_pdf_file(
InvoiceRepositoryInterface $invoiceRepository,
OrderRepositoryInterface $orderRepository,
InvoiceGeneratorInterface $invoiceGenerator,
InvoicePdfFileGeneratorInterface $invoicePdfFileGenerator,
InvoiceFileManagerInterface $invoiceFileManager,
OrderInterface $order,
InvoiceInterface $invoice
): void {
$this->beConstructedWith(
$invoiceRepository,
$orderRepository,
$invoiceGenerator,
$invoicePdfFileGenerator,
$invoiceFileManager,
false
);

$orderRepository->findOneByNumber('0000001')->willReturn($order);

$invoiceRepository->findOneByOrder($order)->willReturn(null);

$invoiceDateTime = new \DateTimeImmutable('2019-02-25');

$invoiceGenerator->generateForOrder($order, $invoiceDateTime)->willReturn($invoice);

$invoicePdfFileGenerator->generate($invoice)->shouldNotBeCalled();
$invoiceFileManager->save(Argument::any())->shouldNotBeCalled();

$invoiceRepository->add($invoice)->shouldBeCalled();

$this('0000001', $invoiceDateTime);
}

function it_removes_saved_invoice_file_if_database_update_fails(
InvoiceRepositoryInterface $invoiceRepository,
OrderRepositoryInterface $orderRepository,
Expand Down
Loading

0 comments on commit 85725ef

Please sign in to comment.