Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
9 changes: 9 additions & 0 deletions tasks/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,12 @@ class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = "__all__"

def validate_title(self, value):
if not value.strip():
raise serializers.ValidationError("Title cannot be empty.")
return value

def create(self, validated_data):
task = Task.objects.create(**validated_data)
return task
37 changes: 24 additions & 13 deletions tasks/tests/test_api.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,31 @@
from datetime import date
import pytest
from rest_framework.test import APIClient
from django.urls import reverse
from datetime import date
from rest_framework.test import APIClient
from tasks.models import Task

@pytest.fixture
def api_client():
return APIClient()

@pytest.mark.django_db
def test_create_task_api():
client = APIClient()
url = reverse("task-list") # Adjust if you use a different route name
response = client.post(
url,
{
"title": "API Task",
def test_create_task(api_client):
url = reverse("task-list") # If you're using a DRF viewset with basename "task"
data = {
"title": "Test Task",
"due_date": date.today(),
},
format="json",
)
}

response = api_client.post(url, data, format="json")
assert response.status_code == 201
assert response.data["title"] == "API Task"
assert Task.objects.count() == 1
assert Task.objects.first().title == "Test Task"

@pytest.mark.django_db
def test_get_tasks(api_client):
Task.objects.create(title="Task 1", due_date= date.today())
Task.objects.create(title="Task 2", due_date= date.today())
url = reverse("task-list")
response = api_client.get(url)
assert response.status_code == 200
assert len(response.data) == 2
5 changes: 5 additions & 0 deletions tasks/views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from rest_framework import viewsets
from rest_framework import filters

from tasks.models import Task
from tasks.serializers import TaskSerializer

Expand All @@ -12,3 +14,6 @@ def home_view(request):
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all().order_by("-created_at")
serializer_class = TaskSerializer

filter_backends = [filters.SearchFilter]
search_fields = ["title"]