Skip to content

Commit 9a83cd0

Browse files
authored
Merge pull request #9 from omidcodes/009-minor-fix-current-codes
Add some filter_backends to ModelViewset
2 parents 3e1d8dc + e3b9dbf commit 9a83cd0

3 files changed

Lines changed: 38 additions & 13 deletions

File tree

tasks/serializers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,12 @@ class TaskSerializer(serializers.ModelSerializer):
66
class Meta:
77
model = Task
88
fields = "__all__"
9+
10+
def validate_title(self, value):
11+
if not value.strip():
12+
raise serializers.ValidationError("Title cannot be empty.")
13+
return value
14+
15+
def create(self, validated_data):
16+
task = Task.objects.create(**validated_data)
17+
return task

tasks/tests/test_api.py

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,31 @@
1+
from datetime import date
12
import pytest
2-
from rest_framework.test import APIClient
33
from django.urls import reverse
4-
from datetime import date
4+
from rest_framework.test import APIClient
5+
from tasks.models import Task
56

7+
@pytest.fixture
8+
def api_client():
9+
return APIClient()
610

711
@pytest.mark.django_db
8-
def test_create_task_api():
9-
client = APIClient()
10-
url = reverse("task-list") # Adjust if you use a different route name
11-
response = client.post(
12-
url,
13-
{
14-
"title": "API Task",
12+
def test_create_task(api_client):
13+
url = reverse("task-list") # If you're using a DRF viewset with basename "task"
14+
data = {
15+
"title": "Test Task",
1516
"due_date": date.today(),
16-
},
17-
format="json",
18-
)
17+
}
18+
19+
response = api_client.post(url, data, format="json")
1920
assert response.status_code == 201
20-
assert response.data["title"] == "API Task"
21+
assert Task.objects.count() == 1
22+
assert Task.objects.first().title == "Test Task"
23+
24+
@pytest.mark.django_db
25+
def test_get_tasks(api_client):
26+
Task.objects.create(title="Task 1", due_date= date.today())
27+
Task.objects.create(title="Task 2", due_date= date.today())
28+
url = reverse("task-list")
29+
response = api_client.get(url)
30+
assert response.status_code == 200
31+
assert len(response.data) == 2

tasks/views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from rest_framework import viewsets
2+
from rest_framework import filters
3+
24
from tasks.models import Task
35
from tasks.serializers import TaskSerializer
46

@@ -12,3 +14,6 @@ def home_view(request):
1214
class TaskViewSet(viewsets.ModelViewSet):
1315
queryset = Task.objects.all().order_by("-created_at")
1416
serializer_class = TaskSerializer
17+
18+
filter_backends = [filters.SearchFilter]
19+
search_fields = ["title"]

0 commit comments

Comments
 (0)