# (c) cavaliba.com - test / views / schema help modal

from django.core.cache import cache as cache_django
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 app_data.schema import Schema
from tests import helper


class TestViewsSchemaHelpModal(TestCase):
    def setUp(self):
        cache.clear()
        cache_django.clear()

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_instance_list_shows_icon_and_placeholder_when_no_description(self):
        helper.add_admin_user(login="unittest")
        response = self.client.get(
            reverse("app_data:instance_list", kwargs={"classname": "site"}), follow=True
        )
        self.assertContains(response, "cv-schema-help-icon")
        self.assertContains(response, "No description available.")

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_instance_detail_shows_icon_and_description_when_set(self):
        helper.add_admin_user(login="unittest")
        helper.add_test_sites(count=1)
        schema = Schema.from_name("site")
        schema.description = "<p>Sites are healthcare locations.</p>"
        schema.save()

        site = DataInstance.objects.filter(classname="site", keyname="site01").first()
        response = self.client.get(
            reverse("app_data:instance_detail", kwargs={"id": site.id}), follow=True
        )
        self.assertContains(response, "cv-schema-help-icon")
        self.assertContains(response, "Sites are healthcare locations.")
        self.assertNotContains(response, "No description available.")

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_instance_new_shows_icon(self):
        helper.add_admin_user(login="unittest")
        response = self.client.get(
            reverse("app_data:instance_new", kwargs={"classname": "site"}), follow=True
        )
        self.assertContains(response, "cv-schema-help-icon")

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_instance_list_action_dropdown_has_schema_description_entry(self):
        helper.add_admin_user(login="unittest")
        response = self.client.get(
            reverse("app_data:instance_list", kwargs={"classname": "site"}), follow=True
        )
        self.assertContains(response, "Description")
        self.assertContains(response, 'data-bs-target="#schemaHelpModal"')
