from datetime import datetime from django.test import TestCase from django.utils import timezone from apps.projects.models import Project from apps.tags.models import Tag from apps.time_entries.api.serializers import TimeEntrySerializer from apps.time_entries.models import TimeEntry from apps.users.models import User from apps.workspaces.models import Workspace class TimeEntrySerializerTests(TestCase): def test_time_entry_serializer_keeps_seconds(self): user = User.objects.create_user(mobile="09123333333", password="secret123") workspace = Workspace.objects.create(name="Core", owner=user) current_timezone = timezone.get_current_timezone() start_time = timezone.make_aware( datetime(2026, 4, 23, 10, 15, 42), current_timezone, ) end_time = timezone.make_aware( datetime(2026, 4, 23, 11, 0, 5), current_timezone, ) entry = TimeEntry.objects.create( workspace=workspace, user=user, start_time=start_time, end_time=end_time, ) data = TimeEntrySerializer(entry).data self.assertEqual(data["start_time"], start_time.strftime("%Y-%m-%d %H:%M:%S")) self.assertEqual(data["end_time"], end_time.strftime("%Y-%m-%d %H:%M:%S")) def test_time_entry_serializer_includes_deleted_project_and_tags(self): user = User.objects.create_user(mobile="09124444444", password="secret123") workspace = Workspace.objects.create(name="Core", owner=user) project = Project.objects.create(workspace=workspace, name="Legacy Project") tag = Tag.objects.create(workspace=workspace, name="Legacy Tag", color="#334155") project.delete() tag.delete() entry = TimeEntry.objects.create( workspace=workspace, user=user, project=Project.all_objects.get(id=project.id), description="Historical work", start_time=timezone.now(), end_time=timezone.now(), ) entry.tags.set([Tag.all_objects.get(id=tag.id)]) data = TimeEntrySerializer(entry).data self.assertEqual(data["project"], str(project.id)) self.assertEqual(data["project_details"]["name"], "Legacy Project") self.assertTrue(data["project_details"]["is_deleted"]) self.assertEqual(data["tags"], [str(tag.id)]) self.assertEqual(data["tag_details"][0]["name"], "Legacy Tag") self.assertTrue(data["tag_details"][0]["is_deleted"])