# (c) cavaliba.com - test / views / ipam_vlan instance_detail hook

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.data import Instance
from tests import helper


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

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_hierarchy_rendered_per_linked_subnet(self):
        helper.add_admin_user(login="unittest")
        helper.add_instance(
            classname="ipam_subnet",
            keyname="198.51.100.0/28",
            fields={"description": "vlan hook subnet"},
        )
        helper.add_instance(
            classname="ipam_vlan",
            keyname="vlan_hook_view_test",
            fields={"displayname": "VLAN Hook Test", "subnet": ["198.51.100.0/28"]},
        )

        vlan = Instance.from_keyname(classname="ipam_vlan", keyname="vlan_hook_view_test")
        self.assertIsNotNone(vlan)

        response = self.client.get(
            reverse("app_data:instance_detail", kwargs={"id": vlan.id}), follow=True
        )
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "Parent Subnets")
        self.assertContains(response, "198.51.100.0/28")
        self.assertContains(response, "vlan hook subnet")

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_no_subnet_linked_shows_message(self):
        helper.add_admin_user(login="unittest")
        helper.add_instance(
            classname="ipam_vlan",
            keyname="vlan_no_subnet",
            fields={"displayname": "No Subnet VLAN"},
        )

        vlan = Instance.from_keyname(classname="ipam_vlan", keyname="vlan_no_subnet")
        response = self.client.get(
            reverse("app_data:instance_detail", kwargs={"id": vlan.id}), follow=True
        )
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "No subnet linked to this VLAN")

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_hierarchy_hook_absent_for_other_schemas(self):
        helper.add_admin_user(login="unittest")
        helper.add_schema(classname="nothookedtest3", displayname="Not hooked")
        helper.add_instance(classname="nothookedtest3", keyname="obj1")

        from app_data.models import DataInstance

        obj = DataInstance.objects.get(classname="nothookedtest3", keyname="obj1")
        response = self.client.get(
            reverse("app_data:instance_detail", kwargs={"id": obj.id}), follow=True
        )
        self.assertEqual(response.status_code, 200)
        self.assertNotContains(response, "No subnet linked to this VLAN")
