from __future__ import annotations
import functools
-from typing import Any, Callable, Literal
+from typing import Any, Literal
import pytest
from starlette.testclient import TestClient
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
@pytest.fixture
from typing import (
Any,
AsyncGenerator,
- Callable,
Generator,
)
from starlette.testclient import TestClient
from starlette.types import ASGIApp, Message, Receive, Scope, Send
from starlette.websockets import WebSocket
-
-TestClientFactory = Callable[[ASGIApp], TestClient]
+from tests.types import TestClientFactory
class CustomMiddleware(BaseHTTPMiddleware):
-from typing import Callable
-
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.cors import CORSMiddleware
from starlette.requests import Request
from starlette.responses import PlainTextResponse
from starlette.routing import Route
-from starlette.testclient import TestClient
-from starlette.types import ASGIApp
-
-TestClientFactory = Callable[[ASGIApp], TestClient]
+from tests.types import TestClientFactory
def test_cors_allow_all(
-from typing import Any, Callable
+from typing import Any
import pytest
from starlette.requests import Request
from starlette.responses import JSONResponse, Response
from starlette.routing import Route
-from starlette.testclient import TestClient
from starlette.types import Receive, Scope, Send
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_handler(
-from typing import Callable
-
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.gzip import GZipMiddleware
from starlette.requests import Request
from starlette.responses import ContentStream, PlainTextResponse, StreamingResponse
from starlette.routing import Route
-from starlette.testclient import TestClient
-from starlette.types import ASGIApp
-
-TestClientFactory = Callable[[ASGIApp], TestClient]
+from tests.types import TestClientFactory
def test_gzip_responses(test_client_factory: TestClientFactory) -> None:
-from typing import Callable
-
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.httpsredirect import HTTPSRedirectMiddleware
from starlette.requests import Request
from starlette.responses import PlainTextResponse
from starlette.routing import Route
-from starlette.testclient import TestClient
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_https_redirect_middleware(test_client_factory: TestClientFactory) -> None:
import re
-from typing import Callable
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.responses import JSONResponse
from starlette.routing import Mount, Route
from starlette.testclient import TestClient
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def view_session(request: Request) -> JSONResponse:
-from typing import Callable
-
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.trustedhost import TrustedHostMiddleware
from starlette.requests import Request
from starlette.responses import PlainTextResponse
from starlette.routing import Route
-from starlette.testclient import TestClient
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_trusted_host_middleware(test_client_factory: TestClientFactory) -> None:
from starlette._utils import collapse_excgroups
from starlette.middleware.wsgi import WSGIMiddleware, build_environ
-from starlette.testclient import TestClient
+from tests.types import TestClientFactory
WSGIResponse = Iterable[bytes]
-TestClientFactory = Callable[..., TestClient]
StartResponse = Callable[..., Any]
Environment = Dict[str, Any]
import os
from contextlib import asynccontextmanager
from pathlib import Path
-from typing import AsyncGenerator, AsyncIterator, Callable, Generator
+from typing import AsyncGenerator, AsyncIterator, Generator
import anyio
import pytest
from starlette.testclient import TestClient
from starlette.types import ASGIApp, Receive, Scope, Send
from starlette.websockets import WebSocket
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
async def error_500(request: Request, exc: HTTPException) -> JSONResponse:
from starlette.requests import HTTPConnection, Request
from starlette.responses import JSONResponse, Response
from starlette.routing import Route, WebSocketRoute
-from starlette.testclient import TestClient
from starlette.websockets import WebSocket, WebSocketDisconnect
+from tests.types import TestClientFactory
-TestClientFactory = Callable[..., TestClient]
AsyncEndpoint = Callable[..., Awaitable[Response]]
SyncEndpoint = Callable[..., Response]
-from typing import Callable
-
import pytest
from starlette.background import BackgroundTask, BackgroundTasks
from starlette.responses import Response
-from starlette.testclient import TestClient
from starlette.types import Receive, Scope, Send
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_async_task(test_client_factory: TestClientFactory) -> None:
from contextvars import ContextVar
-from typing import Callable, Iterator
+from typing import Iterator
import anyio
import pytest
from starlette.requests import Request
from starlette.responses import Response
from starlette.routing import Route
-from starlette.testclient import TestClient
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
@pytest.mark.anyio
from datetime import datetime
-from typing import Callable, Iterator
+from typing import Iterator
import pytest
from starlette.requests import Request
from starlette.responses import JSONResponse
from starlette.routing import Route, Router
-from starlette.testclient import TestClient
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
@pytest.fixture(scope="module", autouse=True)
-from typing import Callable, Iterator
+from typing import Iterator
import pytest
from starlette.routing import Route, Router
from starlette.testclient import TestClient
from starlette.websockets import WebSocket
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
class Homepage(HTTPEndpoint):
import warnings
-from typing import Callable, Generator
+from typing import Generator
import pytest
from starlette.routing import Route, Router, WebSocketRoute
from starlette.testclient import TestClient
from starlette.types import Receive, Scope, Send
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def raise_runtime_error(request: Request) -> None:
from starlette.requests import Request
from starlette.responses import JSONResponse
from starlette.routing import Mount
-from starlette.testclient import TestClient
from starlette.types import ASGIApp, Receive, Scope, Send
-
-TestClientFactory = typing.Callable[..., TestClient]
+from tests.types import TestClientFactory
class ForceMultipartDict(typing.Dict[typing.Any, typing.Any]):
from __future__ import annotations
import sys
-from typing import Any, Callable, Iterator
+from typing import Any, Iterator
import anyio
import pytest
from starlette.datastructures import Address, State
from starlette.requests import ClientDisconnect, Request
from starlette.responses import JSONResponse, PlainTextResponse, Response
-from starlette.testclient import TestClient
from starlette.types import Message, Receive, Scope, Send
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_request_url(test_client_factory: TestClientFactory) -> None:
import time
from http.cookies import SimpleCookie
from pathlib import Path
-from typing import AsyncIterator, Callable, Iterator
+from typing import AsyncIterator, Iterator
import anyio
import pytest
)
from starlette.testclient import TestClient
from starlette.types import Message, Receive, Scope, Send
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_text_response(test_client_factory: TestClientFactory) -> None:
from starlette.testclient import TestClient
from starlette.types import ASGIApp, Message, Receive, Scope, Send
from starlette.websockets import WebSocket, WebSocketDisconnect
-
-TestClientFactory = typing.Callable[..., TestClient]
+from tests.types import TestClientFactory
def homepage(request: Request) -> Response:
-from typing import Callable
-
from starlette.applications import Starlette
from starlette.endpoints import HTTPEndpoint
from starlette.requests import Request
from starlette.responses import Response
from starlette.routing import Host, Mount, Route, Router, WebSocketRoute
from starlette.schemas import SchemaGenerator
-from starlette.testclient import TestClient
from starlette.websockets import WebSocket
+from tests.types import TestClientFactory
schemas = SchemaGenerator(
{"openapi": "3.0.0", "info": {"title": "Example API", "version": "1.0"}}
)
-TestClientFactory = Callable[..., TestClient]
-
def ws(session: WebSocket) -> None:
"""ws"""
from starlette.responses import Response
from starlette.routing import Mount
from starlette.staticfiles import StaticFiles
-from starlette.testclient import TestClient
-
-TestClientFactory = typing.Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_staticfiles(tmpdir: Path, test_client_factory: TestClientFactory) -> None:
from __future__ import annotations
import os
-import typing
from pathlib import Path
from unittest import mock
from starlette.responses import Response
from starlette.routing import Route
from starlette.templating import Jinja2Templates
-from starlette.testclient import TestClient
-
-TestClientFactory = typing.Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_templates(tmpdir: Path, test_client_factory: TestClientFactory) -> None:
import sys
from asyncio import Task, current_task as asyncio_current_task
from contextlib import asynccontextmanager
-from typing import Any, AsyncGenerator, Callable
+from typing import Any, AsyncGenerator
import anyio
import anyio.lowlevel
from starlette.testclient import ASGIInstance, TestClient
from starlette.types import ASGIApp, Receive, Scope, Send
from starlette.websockets import WebSocket, WebSocketDisconnect
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def mock_service_endpoint(request: Request) -> JSONResponse:
return inner
- client = test_client_factory(app)
+ client = test_client_factory(app) # type: ignore
response = client.get("/")
assert response.text == "Hello, world!"
return asgi
- client = test_client_factory(app)
+ client = test_client_factory(app) # type: ignore
with client.websocket_connect("/") as websocket:
data = websocket.receive_json()
assert data == {"message": "test"}
return asgi
- client = test_client_factory(app)
+ client = test_client_factory(app) # type: ignore
with client.websocket_connect("/") as websocket:
...
assert websocket.should_close.is_set()
import sys
-from typing import Any, Callable, MutableMapping
+from typing import Any, MutableMapping
import anyio
import pytest
from starlette import status
from starlette.responses import Response
-from starlette.testclient import TestClient, WebSocketDenialResponse
+from starlette.testclient import WebSocketDenialResponse
from starlette.types import Message, Receive, Scope, Send
from starlette.websockets import WebSocket, WebSocketDisconnect, WebSocketState
-
-TestClientFactory = Callable[..., TestClient]
+from tests.types import TestClientFactory
def test_websocket_url(test_client_factory: TestClientFactory) -> None:
--- /dev/null
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Protocol
+
+import httpx
+
+from starlette.testclient import TestClient
+from starlette.types import ASGIApp
+
+if TYPE_CHECKING:
+
+ class TestClientFactory(Protocol): # pragma: no cover
+ def __call__(
+ self,
+ app: ASGIApp,
+ base_url: str = "http://testserver",
+ raise_server_exceptions: bool = True,
+ root_path: str = "",
+ cookies: httpx._types.CookieTypes | None = None,
+ headers: dict[str, str] | None = None,
+ follow_redirects: bool = True,
+ ) -> TestClient: ...
+else: # pragma: no cover
+
+ class TestClientFactory:
+ __test__ = False