From c60cf88e62b5a55bad2a08371416aaa3556c7aa6 Mon Sep 17 00:00:00 2001 From: Tomanhez Date: Tue, 10 Mar 2020 11:18:53 +0100 Subject: [PATCH] Add test for filters --- ...iltering_exchange_rates_by_currency.feature | 2 +- src/Sylius/Behat/Client/ApiClientInterface.php | 6 +++++- src/Sylius/Behat/Client/ApiPlatformClient.php | 18 +++++++++++++++++- .../Api/Admin/ManagingExchangeRatesContext.php | 16 ++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/features/currency/managing_exchange_rates/filtering_exchange_rates_by_currency.feature b/features/currency/managing_exchange_rates/filtering_exchange_rates_by_currency.feature index 735b257d7ef..536703841d0 100644 --- a/features/currency/managing_exchange_rates/filtering_exchange_rates_by_currency.feature +++ b/features/currency/managing_exchange_rates/filtering_exchange_rates_by_currency.feature @@ -11,7 +11,7 @@ Feature: Filtering exchange rates by a currency And the exchange rate of "Polish Zloty" to "Euro" is 0.22 And I am logged in as an administrator - @ui + @ui @api Scenario: Filtering exchange rates by a chosen currency When I browse exchange rates of the store And I choose "Euro" as a currency filter diff --git a/src/Sylius/Behat/Client/ApiClientInterface.php b/src/Sylius/Behat/Client/ApiClientInterface.php index fd7bc90119b..9d19f143ac7 100644 --- a/src/Sylius/Behat/Client/ApiClientInterface.php +++ b/src/Sylius/Behat/Client/ApiClientInterface.php @@ -29,7 +29,9 @@ public function buildCreateRequest(string $resource): void; public function buildUpdateRequest(string $resource, string $id): void; - /** @param string|int $value */ + public function buildFilter(array $filters): void; + + /** @param string|int */ public function addRequestData(string $key, $value): void; public function addCompoundRequestData(array $data): void; @@ -42,6 +44,8 @@ public function update(): void; public function delete(string $resource, string $id): void; + public function filter(string $resource): void; + public function applyTransition(string $resource, string $id, string $transition): void; public function countCollectionItems(): int; diff --git a/src/Sylius/Behat/Client/ApiPlatformClient.php b/src/Sylius/Behat/Client/ApiPlatformClient.php index ffe383ea187..a49bc1eb683 100644 --- a/src/Sylius/Behat/Client/ApiPlatformClient.php +++ b/src/Sylius/Behat/Client/ApiPlatformClient.php @@ -29,6 +29,9 @@ final class ApiPlatformClient implements ApiClientInterface /** @var array */ private $request = ['url' => null, 'body' => []]; + /** @var array */ + private $filters; + public function __construct(AbstractBrowser $client, SharedStorageInterface $sharedStorage) { $this->client = $client; @@ -73,7 +76,12 @@ public function buildUpdateRequest(string $resource, string $id): void $this->request['body'] = json_decode($this->client->getResponse()->getContent(), true); } - /** @param string|int $value */ + public function buildFilter(array $filters): void + { + $this->filters = $filters; + } + + /** @param string|int */ public function addRequestData(string $key, $value): void { $this->request['body'][$key] = $value; @@ -108,6 +116,14 @@ public function delete(string $resource, string $id): void $this->request('DELETE', sprintf('/new-api/%s/%s', $resource, $id), []); } + public function filter(string $resource): void + { + $query = http_build_query($this->filters, '', '&', PHP_QUERY_RFC3986); + $path = sprintf('/new-api/%s?%s', $resource, $query); + + $this->request('GET', $path, ['HTTP_ACCEPT' => 'application/ld+json']); + } + public function applyTransition(string $resource, string $id, string $transition): void { $this->request( diff --git a/src/Sylius/Behat/Context/Api/Admin/ManagingExchangeRatesContext.php b/src/Sylius/Behat/Context/Api/Admin/ManagingExchangeRatesContext.php index 42939f676c7..a235aec6644 100644 --- a/src/Sylius/Behat/Context/Api/Admin/ManagingExchangeRatesContext.php +++ b/src/Sylius/Behat/Context/Api/Admin/ManagingExchangeRatesContext.php @@ -131,6 +131,22 @@ public function iDeleteTheExchangeRateBetweenAnd(CurrencyInterface $sourceCurren $this->client->delete('exchange_rates', $exchangeRate->getId()); } + /** + * @When I choose :currency as a currency filter + */ + public function iChooseCurrencyAsACurrencyFilter(CurrencyInterface $currency): void + { + $this->client->buildFilter(['currencyCode' => $currency->getCode()]); + } + + /** + * @When I filter + */ + public function iFilter(): void + { + $this->client->filter('exchange_rates'); + } + /** * @Then I should see :count exchange rates on the list */