# (c) cavaliba.com - tests / instance_detail / legacy ?detail= param after the tech view removal

"""
?detail=yes used to flip instance_detail() to instance_detail_tech.html and to
set a sticky session flag (ui_want_detail) that kept every later instance page
technical too. The detail tech view was removed in 5.3.0-RC - see
project/claude_doc/2026-10-03-REMOVE-DETAIL-TECH-VIEW-DONE.md.

Stale bookmarks and stale sessions must therefore land on the ordinary detail
page, not a 500 and not a blank one, and the "Toggle details" action must be
gone from the dropdown.
"""

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

import app_home.cache as cache
from app_data.models import DataInstance
from tests import helper


@override_settings(CAVALIBA_AUTH_MODE="unittest")
class InstanceDetailLegacyDetailParamTest(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_admin_user(login="unittest")
        helper.add_schema(
            classname="legacyparam",
            field_definition={"note": {"dataformat": "string", "displayname": "Note"}},
        )
        helper.add_instance(classname="legacyparam", keyname="obj01", fields={"note": "hello"})
        self.obj = DataInstance.objects.get(classname="legacyparam", keyname="obj01")
        self.url = reverse("app_data:instance_detail", kwargs={"id": self.obj.id})

    def test_detail_yes_renders_the_ordinary_detail_template(self):
        response = self.client.get(f"{self.url}?detail=yes")
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, "app_data/instance_detail.html")
        self.assertContains(response, "hello")

    def test_detail_yes_sets_no_session_flag(self):
        self.client.get(f"{self.url}?detail=yes")
        self.assertNotIn("ui_want_detail", self.client.session)

    def test_a_stale_session_flag_is_ignored(self):
        session = self.client.session
        session["ui_want_detail"] = "yes"
        session.save()

        response = self.client.get(self.url)

        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, "app_data/instance_detail.html")

    def test_toggle_details_action_is_gone(self):
        response = self.client.get(self.url)
        self.assertNotContains(response, "Toggle details")
        self.assertNotContains(response, "?detail=")
