From e06494d4be1149642019ef193fba9bd26781072c Mon Sep 17 00:00:00 2001 From: David Weterings Date: Tue, 21 Jul 2020 12:02:02 +0200 Subject: [PATCH 1/3] Fix expanding not working when running in a server requests_mocker bug which makes requests parameters case insensitive needs a flag until a major version release. --- src/commercetools/testing/__init__.py | 2 +- src/commercetools/testing/server.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commercetools/testing/__init__.py b/src/commercetools/testing/__init__.py index f7d31816..067189a5 100644 --- a/src/commercetools/testing/__init__.py +++ b/src/commercetools/testing/__init__.py @@ -113,7 +113,7 @@ def register(self, adapter): @contextmanager def backend_mocker(*args, **kwargs): - with requests_mock.Mocker(real_http=True) as m: + with requests_mock.Mocker(real_http=True, case_sensitive=True) as m: repo = BackendRepository() repo.register(m) yield repo diff --git a/src/commercetools/testing/server.py b/src/commercetools/testing/server.py index 4a708c5b..3edf49cb 100644 --- a/src/commercetools/testing/server.py +++ b/src/commercetools/testing/server.py @@ -39,7 +39,7 @@ def __init__(self, repository=None): def __call__(self, environ, start_response): request = self._create_request(environ) - request_mock = _RequestObjectProxy(request.prepare()) + request_mock = _RequestObjectProxy(request.prepare(), case_sensitive=True) if request_mock.body is None: request_mock.body = "" From b2a61ef7ea24105189650878409057d993cbb89f Mon Sep 17 00:00:00 2001 From: David Weterings Date: Tue, 21 Jul 2020 12:14:01 +0200 Subject: [PATCH 2/3] Add unittest to check expanding works in mock server --- tests/test_mock_server.py | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/tests/test_mock_server.py b/tests/test_mock_server.py index cd49572d..e9dffc55 100644 --- a/tests/test_mock_server.py +++ b/tests/test_mock_server.py @@ -1,13 +1,13 @@ -import pytest +import os + import requests from commercetools import Client -from commercetools.types import LocalizedString, ProductDraft +from commercetools.types import LocalizedString, ProductDraft, ChannelDraft, ChannelRoleEnum, ChannelResourceIdentifier, \ + StoreDraft def test_http_server(commercetools_client, commercetools_http_server): - import os - os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" client = Client( @@ -30,3 +30,32 @@ def test_http_server(commercetools_client, commercetools_http_server): assert response.status_code == 200, response.text data = response.json() assert data["masterData"]["staged"]["name"]["nl"] == "Testje" + + +def test_http_server_expanding(commercetools_client, commercetools_http_server): + os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" + + client = Client( + project_key="unittest", + client_id="client-id", + client_secret="client-secret", + scope=[], + url=commercetools_http_server.api_url, + token_url=f"{commercetools_http_server.api_url}/oauth/token", + ) + + client.channels.create( + ChannelDraft( + key="FOO", roles=[ChannelRoleEnum.PRODUCT_DISTRIBUTION] + ) + ) + + store = client.stores.create(StoreDraft(key="FOO", distribution_channels=[ChannelResourceIdentifier(key="FOO")])) + + url = commercetools_http_server.api_url + f"/unittest/stores/{store.id}" + response = requests.get(url, params={"expand": "distributionChannels[*]"}, headers={"Authorization": "Bearer token"}) + + assert response.status_code == 200, response.text + data = response.json() + + assert data["distributionChannels"][0]["obj"]["key"] == "FOO" From 9cdd4dbb513470f73b5affabfb2b2eb7fde2390a Mon Sep 17 00:00:00 2001 From: David Weterings Date: Tue, 21 Jul 2020 12:16:08 +0200 Subject: [PATCH 3/3] Fix formatting --- tests/test_mock_server.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/tests/test_mock_server.py b/tests/test_mock_server.py index e9dffc55..0fc0c3e9 100644 --- a/tests/test_mock_server.py +++ b/tests/test_mock_server.py @@ -3,8 +3,14 @@ import requests from commercetools import Client -from commercetools.types import LocalizedString, ProductDraft, ChannelDraft, ChannelRoleEnum, ChannelResourceIdentifier, \ - StoreDraft +from commercetools.types import ( + ChannelDraft, + ChannelResourceIdentifier, + ChannelRoleEnum, + LocalizedString, + ProductDraft, + StoreDraft, +) def test_http_server(commercetools_client, commercetools_http_server): @@ -45,15 +51,21 @@ def test_http_server_expanding(commercetools_client, commercetools_http_server): ) client.channels.create( - ChannelDraft( - key="FOO", roles=[ChannelRoleEnum.PRODUCT_DISTRIBUTION] - ) + ChannelDraft(key="FOO", roles=[ChannelRoleEnum.PRODUCT_DISTRIBUTION]) ) - store = client.stores.create(StoreDraft(key="FOO", distribution_channels=[ChannelResourceIdentifier(key="FOO")])) + store = client.stores.create( + StoreDraft( + key="FOO", distribution_channels=[ChannelResourceIdentifier(key="FOO")] + ) + ) url = commercetools_http_server.api_url + f"/unittest/stores/{store.id}" - response = requests.get(url, params={"expand": "distributionChannels[*]"}, headers={"Authorization": "Bearer token"}) + response = requests.get( + url, + params={"expand": "distributionChannels[*]"}, + headers={"Authorization": "Bearer token"}, + ) assert response.status_code == 200, response.text data = response.json()