Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 42 additions & 13 deletions rest_framework-stubs/test.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ from django.test import testcases
from django.test.client import Client as DjangoClient
from django.test.client import ClientHandler
from django.test.client import RequestFactory as DjangoRequestFactory
from django_stubs_ext import StrOrPromise
from rest_framework.authtoken.models import Token
from rest_framework.request import Request
from rest_framework.response import _MonkeyPatchedResponse
Expand Down Expand Up @@ -58,29 +59,55 @@ class APIRequestFactory(DjangoRequestFactory):
renderer_classes: Any
def __init__(self, enforce_csrf_checks: bool = ..., **defaults: Any) -> None: ...
def request(self, **kwargs: Any) -> Request: ... # type: ignore[override]
def get(self, path: str, data: _GetDataType = ..., **extra: Any) -> Request: ... # type: ignore[override]
def get(self, path: StrOrPromise, data: _GetDataType = ..., **extra: Any) -> Request: ... # type: ignore[override]
def post( # type: ignore[override]
self, path: str, data: Any | None = ..., format: str | None = ..., content_type: str | None = ..., **extra: Any
self,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
**extra: Any,
) -> Request: ...
def put( # type: ignore[override]
self, path: str, data: Any | None = ..., format: str | None = ..., content_type: str | None = ..., **extra: Any
self,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
**extra: Any,
) -> Request: ...
def patch( # type: ignore[override]
self, path: str, data: Any | None = ..., format: str | None = ..., content_type: str | None = ..., **extra: Any
self,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
**extra: Any,
) -> Request: ...
def delete( # type: ignore[override]
self, path: str, data: Any | None = ..., format: str | None = ..., content_type: str | None = ..., **extra: Any
self,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
**extra: Any,
) -> Request: ...
def options( # type: ignore[override]
self,
path: str,
path: StrOrPromise,
data: dict[str, str] | str | None = ...,
format: str | None = ...,
content_type: Any | None = ...,
**extra: Any,
) -> Request: ...
def generic( # type: ignore[override]
self, method: str, path: str, data: str = ..., content_type: str = ..., secure: bool = ..., **extra: Any
self,
method: str,
path: StrOrPromise,
data: str = ...,
content_type: str = ...,
secure: bool = ...,
**extra: Any,
) -> Request: ...

class ForceAuthClientHandler(ClientHandler):
Expand All @@ -93,10 +120,12 @@ class APIClient(APIRequestFactory, DjangoClient):
self, user: AnonymousUser | AbstractBaseUser | None = ..., token: Token | None = ...
) -> None: ...
def request(self, **kwargs: Any) -> _MonkeyPatchedResponse: ... # type: ignore[override]
def get(self, path: str, data: _GetDataType = ..., follow: bool = ..., **extra: Any) -> _MonkeyPatchedResponse: ... # type: ignore[override]
def get(
self, path: StrOrPromise, data: _GetDataType = ..., follow: bool = ..., **extra: Any
) -> _MonkeyPatchedResponse: ... # type: ignore[override]
def post( # type: ignore[override]
self,
path: str,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
Expand All @@ -105,7 +134,7 @@ class APIClient(APIRequestFactory, DjangoClient):
) -> _MonkeyPatchedResponse: ...
def put( # type: ignore[override]
self,
path: str,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
Expand All @@ -114,7 +143,7 @@ class APIClient(APIRequestFactory, DjangoClient):
) -> _MonkeyPatchedResponse: ...
def patch( # type: ignore[override]
self,
path: str,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
Expand All @@ -123,7 +152,7 @@ class APIClient(APIRequestFactory, DjangoClient):
) -> _MonkeyPatchedResponse: ...
def delete( # type: ignore[override]
self,
path: str,
path: StrOrPromise,
data: Any | None = ...,
format: str | None = ...,
content_type: str | None = ...,
Expand All @@ -132,7 +161,7 @@ class APIClient(APIRequestFactory, DjangoClient):
) -> _MonkeyPatchedResponse: ...
def options( # type: ignore[override]
self,
path: str,
path: StrOrPromise,
data: dict[str, str] | str = ...,
format: str | None = ...,
content_type: Any | None = ...,
Expand Down
41 changes: 41 additions & 0 deletions tests/typecheck/test_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,44 @@
reveal_type(self.client) # N: Revealed type is "django.test.client.Client"
response = self.client.get('/', format="json")
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
- case: test_requestfactory_http_verbs
parametrized:
- method: get
- method: post
- method: put
- method: patch
- method: delete
- method: options
main: |
from django.urls import reverse_lazy
from rest_framework import test, status
url = reverse_lazy("api:example")
request_factory = test.APIRequestFactory()
request_factory.{{ method }}(url)
- case: test_apirequestfactory_generic
main: |
from django.urls import reverse_lazy
from rest_framework import test, status
url = reverse_lazy("api:example")
request_factory = test.APIRequestFactory()
request_factory.generic("get", url)
- case: test_apiclient_http_verbs
parametrized:
- method: get
- method: post
- method: put
- method: patch
- method: delete
- method: options
main: |
from django.urls import reverse_lazy
from rest_framework import test, status
url = reverse_lazy("api:example")
client = test.APIClient()
client.{{ method }}(url)
Loading