Hi all! Iām proud to share my new first open-source project drf-api-action, and Iād be glad to receive your feedback!
https://github.com/Ori-Roza/drf-api-action
This project was built as a side project at work in which we had to tweak DRF for our own needs, this project was successful back then so I wanted to publish it to everyone
The drf-api-action Python package is designed to elevate your testing experience for Django Rest Framework (DRF) REST endpoints by treating REST endpoints as regular functions!
Features:
Simplified Testing: Testing DRF REST endpoints using the api-action decorator, treating them like regular functions.
Seamless Integration: Replacing DRF's action decorator with api-action in your WebViewSet seamlessly or using it as a pytest fixture.
Clear Traceback: Instead of getting a response with error code, get the real traceback that led to the error.
Pagination Support: Paginating easily through pages by a single kwarg.
Here's a snippet with new pytest fixture addition:
from .models import DummyModel
from rest_framework import status
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework.serializers import IntegerField, ModelSerializer, Serializer
class DummySerializer(ModelSerializer):
dummy_int = IntegerField()
class Meta:
model = DummyModel
fields = "__all__"
class DummyViewSetFixture(ModelViewSet):
queryset = DummyModel.objects.all()
serializer_class = DummySerializer
@action(detail=True, methods=["get"], serializer_class=DummySerializer)
def api_dummy(self, request, **kwargs):
serializer = self.get_serializer(instance=self.get_object())
return Response(data=serializer.data, status=status.HTTP_200_OK)
import pytest
from tests.test_app.models import DummyModel
from tests.test_app.views import DummyViewSetFixture
from drf_api_action.fixtures import action_api
@pytest.mark.action_api(view_set_class=DummyViewSetFixture)
def test_call_as_api_fixture(db, action_api):
dummy_model = DummyModel()
dummy_model.dummy_int = 1
dummy_model.save()
res = action_api.api_dummy(pk=1)
assert res["dummy_int"] == 1
Please let me know what you think, Your feedback means a lot to me!
Top comments (0)