from datetime import timedelta

from django.conf import settings
from django.utils.timezone import now
from freezegun import freeze_time
from model_bakery import baker

from glitchtip.test_utils.test_case import GlitchTipTestCase

from ..models import Span, TransactionEvent, TransactionGroup
from ..tasks import cleanup_old_transaction_events


class TasksTestCase(GlitchTipTestCase):
    def test_cleanup_old_events(self):
        group = baker.make("performance.TransactionGroup")
        transactions = baker.make(
            "performance.TransactionEvent", group=group, _quantity=5
        )
        baker.make("performance.Span", transaction=transactions[0])
        cleanup_old_transaction_events()
        self.assertEqual(TransactionGroup.objects.count(), 1)
        self.assertEqual(TransactionEvent.objects.count(), 5)
        self.assertEqual(Span.objects.count(), 1)

        with freeze_time(
            now() + timedelta(days=settings.GLITCHTIP_MAX_TRANSACTION_EVENT_LIFE_DAYS)
        ):
            cleanup_old_transaction_events()
        self.assertEqual(TransactionGroup.objects.count(), 0)
        self.assertEqual(TransactionEvent.objects.count(), 0)
        self.assertEqual(Span.objects.count(), 0)