from unittest.mock import Mock, patch

from django.test import TestCase, override_settings
from django.urls import reverse


class SchedulerEndpointTests(TestCase):
    def test_missing_token_is_rejected(self):
        response = self.client.post(reverse("scheduler-run"))
        self.assertEqual(response.status_code, 401)
        self.assertEqual(response.json(), {"detail": "Unauthorized"})

    def test_wrong_token_is_rejected(self):
        response = self.client.post(
            reverse("scheduler-run"), HTTP_AUTHORIZATION="Bearer wrong-token"
        )
        self.assertEqual(response.status_code, 401)
        self.assertEqual(response.json(), {"detail": "Unauthorized"})

    @override_settings(EXTERNAL_SCHEDULER_TOKEN="expected-token")
    @patch("core.scheduler.views.run_maintenance.delay")
    def test_valid_token_triggers_task(self, mock_delay: Mock):
        mock_delay.return_value.id = "abc123"

        response = self.client.post(
            reverse("scheduler-run"), HTTP_AUTHORIZATION="Bearer expected-token"
        )

        self.assertEqual(response.status_code, 202)
        self.assertEqual(response.json(), {"task_id": "abc123"})
        mock_delay.assert_called_once()
