diff --git a/.chronus/changes/python-body-or-no-content-tests-2026-08-19.md b/.chronus/changes/python-body-or-no-content-tests-2026-08-19.md new file mode 100644 index 00000000000..e72fe9b631b --- /dev/null +++ b/.chronus/changes/python-body-or-no-content-tests-2026-08-19.md @@ -0,0 +1,7 @@ +--- +changeKind: internal +packages: + - "@typespec/http-client-python" +--- + +Add sync and async mock API coverage for body-or-no-content responses. diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 64e2b328755..8adcbc80446 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -29,7 +29,7 @@ "@typespec/compiler": "^1.15.0", "@typespec/events": "~0.85.0", "@typespec/http": "^1.15.0", - "@typespec/http-specs": "0.1.0-alpha.41", + "@typespec/http-specs": "0.1.0-alpha.42-dev.1", "@typespec/openapi": "^1.15.0", "@typespec/rest": "~0.85.0", "@typespec/spec-api": "0.1.0-alpha.16", @@ -2472,26 +2472,26 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-alpha.41", - "resolved": "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-js/npm/registry/@typespec/http-specs/-/http-specs-0.1.0-alpha.41.tgz", - "integrity": "sha1-f6jsbsXAIlEFa1+1A/FQqcvxZkk=", + "version": "0.1.0-alpha.42-dev.1", + "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.42-dev.1.tgz", + "integrity": "sha512-4QACGQDEptuKsQM584Vmrg5G7DdhB2HonZlpdM9siBs4PVNeOGhGlZ0/fDj0SWKmlciA6gtxWWzR0s26VJYXjA==", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.16", - "@typespec/spector": "^0.1.0-alpha.28" + "@typespec/spec-api": "^0.1.0-alpha.16 || >= 0.1.0-dev.0", + "@typespec/spector": "^0.1.0-alpha.28 || >= 0.1.0-alpha.29-dev.0" }, "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.15.0", - "@typespec/events": "^0.85.0", - "@typespec/http": "^1.15.0", - "@typespec/rest": "^0.85.0", - "@typespec/sse": "^0.85.0", - "@typespec/versioning": "^0.85.0", - "@typespec/xml": "^0.85.0" + "@typespec/compiler": "^1.15.0 || >= 1.16.0-dev.0", + "@typespec/events": "^0.85.0 || >= 0.86.0-dev.0", + "@typespec/http": "^1.15.0 || >= 1.16.0-dev.0", + "@typespec/rest": "^0.85.0 || >= 0.86.0-dev.0", + "@typespec/sse": "^0.85.0 || >= 0.86.0-dev.0", + "@typespec/versioning": "^0.85.0 || >= 0.86.0-dev.0", + "@typespec/xml": "^0.85.0 || >= 0.86.0-dev.0" } }, "node_modules/@typespec/openapi": { diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index b530962f347..a0d5634520d 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -121,7 +121,7 @@ "@typespec/sse": "~0.85.0", "@typespec/streams": "~0.85.0", "@typespec/xml": "~0.85.0", - "@typespec/http-specs": "0.1.0-alpha.41", + "@typespec/http-specs": "0.1.0-alpha.42-dev.1", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", diff --git a/packages/http-client-python/tests/mock_api/shared/asynctests/test_response_body_or_no_content_async.py b/packages/http-client-python/tests/mock_api/shared/asynctests/test_response_body_or_no_content_async.py new file mode 100644 index 00000000000..1a95efd6d1e --- /dev/null +++ b/packages/http-client-python/tests/mock_api/shared/asynctests/test_response_body_or_no_content_async.py @@ -0,0 +1,32 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +import pytest_asyncio +from response.bodyornocontent.aio import BodyOrNoContentClient + + +@pytest_asyncio.fixture +async def client(): + async with BodyOrNoContentClient(endpoint="http://localhost:3000") as client: + yield client + + +@pytest.mark.asyncio +async def test_get_body(client: BodyOrNoContentClient): + body, response = await client.get_body(cls=lambda x, y, z: (y, x)) + + assert body.content == "hello" + assert response.http_response.status_code == 200 + assert response.http_response.headers["x-ms-request-id"] == "body-request" + + +@pytest.mark.asyncio +async def test_get_no_content(client: BodyOrNoContentClient): + body, response = await client.get_no_content(cls=lambda x, y, z: (y, x)) + + assert body is None + assert response.http_response.status_code == 204 + assert response.http_response.headers["x-ms-request-id"] == "no-content-request" diff --git a/packages/http-client-python/tests/mock_api/shared/test_response_body_or_no_content.py b/packages/http-client-python/tests/mock_api/shared/test_response_body_or_no_content.py new file mode 100644 index 00000000000..df2f638416b --- /dev/null +++ b/packages/http-client-python/tests/mock_api/shared/test_response_body_or_no_content.py @@ -0,0 +1,29 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from response.bodyornocontent import BodyOrNoContentClient + + +@pytest.fixture +def client(): + with BodyOrNoContentClient(endpoint="http://localhost:3000") as client: + yield client + + +def test_get_body(client: BodyOrNoContentClient): + body, response = client.get_body(cls=lambda x, y, z: (y, x)) + + assert body.content == "hello" + assert response.http_response.status_code == 200 + assert response.http_response.headers["x-ms-request-id"] == "body-request" + + +def test_get_no_content(client: BodyOrNoContentClient): + body, response = client.get_no_content(cls=lambda x, y, z: (y, x)) + + assert body is None + assert response.http_response.status_code == 204 + assert response.http_response.headers["x-ms-request-id"] == "no-content-request"