Add fulfillment, payment, and return policy management methods to AccountClient; enhance tests for policy retrieval and manipulation

This commit is contained in:
claudi 2026-04-07 10:44:56 +02:00
parent 00539b4fb2
commit 184b0c6c17
2 changed files with 247 additions and 1 deletions

View file

@ -9,7 +9,15 @@ from ebay_client.core.auth.models import OAuthToken
from ebay_client.core.http.transport import ApiTransport
from ebay_client.feed.client import FeedClient
from ebay_client.fulfillment.client import FulfillmentClient
from ebay_client.generated.account.models import Programs
from ebay_client.generated.account.models import (
FulfillmentPolicy,
FulfillmentPolicyRequest,
PaymentPolicy,
PaymentPolicyRequest,
Programs,
ReturnPolicy,
ReturnPolicyRequest,
)
from ebay_client.generated.feed.models import TaskCollection
from ebay_client.generated.fulfillment.models import Order
from ebay_client.generated.inventory.models import InventoryItemWithSkuLocaleGroupid
@ -290,6 +298,99 @@ def test_account_wrapper_returns_programs_model(httpx_mock: HTTPXMock) -> None:
assert result.programs and result.programs[0].programType == "OUT_OF_STOCK_CONTROL"
def test_account_wrapper_returns_policy_models_by_id_and_name(httpx_mock: HTTPXMock) -> None:
httpx_mock.add_response(
method="GET",
url="https://api.ebay.com/sell/account/v1/fulfillment_policy/FULFILL-1",
json={"fulfillmentPolicyId": "FULFILL-1", "name": "Fast shipping"},
)
httpx_mock.add_response(
method="GET",
url="https://api.ebay.com/sell/account/v1/payment_policy/get_by_policy_name?marketplace_id=EBAY_US&name=Default%20payment",
json={"paymentPolicyId": "PAY-1", "name": "Default payment"},
)
httpx_mock.add_response(
method="GET",
url="https://api.ebay.com/sell/account/v1/return_policy/get_by_policy_name?marketplace_id=EBAY_US&name=30%20day%20returns",
json={"returnPolicyId": "RET-1", "name": "30 day returns"},
)
client = AccountClient(build_transport())
fulfillment = client.get_fulfillment_policy("FULFILL-1")
payment = client.get_payment_policy_by_name(marketplace_id="EBAY_US", name="Default payment")
returns = client.get_return_policy_by_name(marketplace_id="EBAY_US", name="30 day returns")
assert isinstance(fulfillment, FulfillmentPolicy)
assert fulfillment.fulfillmentPolicyId == "FULFILL-1"
assert isinstance(payment, PaymentPolicy)
assert payment.paymentPolicyId == "PAY-1"
assert isinstance(returns, ReturnPolicy)
assert returns.returnPolicyId == "RET-1"
def test_account_wrapper_serializes_policy_requests_and_delete(httpx_mock: HTTPXMock) -> None:
httpx_mock.add_response(
method="POST",
url="https://api.ebay.com/sell/account/v1/payment_policy",
json={"paymentPolicyId": "PAY-NEW"},
status_code=201,
)
httpx_mock.add_response(
method="PUT",
url="https://api.ebay.com/sell/account/v1/fulfillment_policy/FULFILL-1",
json={"fulfillmentPolicyId": "FULFILL-1"},
status_code=200,
)
httpx_mock.add_response(
method="DELETE",
url="https://api.ebay.com/sell/account/v1/return_policy/RET-1",
status_code=204,
)
client = AccountClient(build_transport())
payment_payload = PaymentPolicyRequest(name="Default payment")
fulfillment_payload = FulfillmentPolicyRequest(name="Fast shipping")
created_payment = client.create_payment_policy(payment_payload)
updated_fulfillment = client.update_fulfillment_policy("FULFILL-1", fulfillment_payload)
client.delete_return_policy("RET-1")
assert created_payment.paymentPolicyId == "PAY-NEW"
assert updated_fulfillment.fulfillmentPolicyId == "FULFILL-1"
create_request = httpx_mock.get_requests()[0]
create_body = json.loads(create_request.content.decode("utf-8"))
assert create_body["name"] == "Default payment"
update_request = httpx_mock.get_requests()[1]
update_body = json.loads(update_request.content.decode("utf-8"))
assert update_body["name"] == "Fast shipping"
def test_account_wrapper_supports_return_policy_create_and_update(httpx_mock: HTTPXMock) -> None:
httpx_mock.add_response(
method="POST",
url="https://api.ebay.com/sell/account/v1/return_policy",
json={"returnPolicyId": "RET-NEW"},
status_code=201,
)
httpx_mock.add_response(
method="PUT",
url="https://api.ebay.com/sell/account/v1/return_policy/RET-NEW",
json={"returnPolicyId": "RET-NEW"},
status_code=200,
)
client = AccountClient(build_transport())
payload = ReturnPolicyRequest(name="30 day returns")
created = client.create_return_policy(payload)
updated = client.update_return_policy("RET-NEW", payload)
assert created.returnPolicyId == "RET-NEW"
assert updated.returnPolicyId == "RET-NEW"
def test_feed_wrapper_returns_task_collection_model(httpx_mock: HTTPXMock) -> None:
httpx_mock.add_response(
method="GET",