from datetime import datetime from django.utils import timezone from rest_framework.test import APIClient from apps.time_entries.models import TimeEntry from apps.users.models import User from apps.workspaces.models import Workspace def make_aware(year, month, day, hour=9, minute=0, second=0): return timezone.make_aware(datetime(year, month, day, hour, minute, second), timezone.get_current_timezone()) def test_time_entry_list_returns_grouped_payload_for_ended_entries(db): user = User.objects.create_user(mobile="09126666666", password="secret123") workspace = Workspace.objects.create(name="Core", owner=user) first_entry = TimeEntry.objects.create( workspace=workspace, user=user, description="Morning work", start_time=make_aware(2026, 4, 24, 9, 0, 0), end_time=make_aware(2026, 4, 24, 10, 30, 0), ) TimeEntry.objects.create( workspace=workspace, user=user, description="Running work", start_time=make_aware(2026, 4, 24, 11, 0, 0), ) client = APIClient() client.force_authenticate(user=user) response = client.get( "/api/time-entries/", { "workspace": str(workspace.id), "status": "ended", "limit": 10, "offset": 0, }, ) assert response.status_code == 200 assert response.data["current_page_items_count"] == 1 assert response.data["has_more"] is False assert len(response.data["groups"]) == 1 assert len(response.data["groups"][0]["days"]) == 1 assert response.data["groups"][0]["days"][0]["entries"][0]["id"] == str(first_entry.id)