from __future__ import annotations

from unittest import mock

from django.http import Http404
from django.test import RequestFactory, SimpleTestCase
from django.urls import reverse

from uksi_browser import views


class ViewTests(SimpleTestCase):
    def setUp(self) -> None:
        self.factory = RequestFactory()

    def test_home_renders(self) -> None:
        request = self.factory.get(reverse("uksi_browser:home"))  # home now points to browse
        with mock.patch("uksi_browser.services.browse_roots", return_value=[]):
            response = views.browse(request)
            self.assertEqual(response.status_code, 200)
            self.assertIn(b"Browse Taxonomy", response.content)

    def test_search_invalid_query(self) -> None:
        request = self.factory.get(reverse("uksi_browser:search"), {"query": "a"})
        response = views.search(request)
        self.assertEqual(response.status_code, 200)
        self.assertIn(b"Search", response.content)

    def test_taxon_detail_not_found(self) -> None:
        request = self.factory.get(reverse("uksi_browser:taxon-detail", args=["missing"]))
        with mock.patch("uksi_browser.services.get_taxon_detail", return_value=None):
            with self.assertRaisesMessage(Http404, "Taxon not found"):
                views.taxon_detail(request, "missing")
