# (c) cavaliba.com - tests / ipam / vlan_list()

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

import app_home.cache as cache
from tests import helper


@override_settings(CAVALIBA_AUTH_MODE="unittest")
class VlanListTest(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_admin_user(login="unittest")

        helper.add_schema(
            classname="ipam_vlan",
            field_definition={
                "description": {"dataformat": "string", "displayname": "Description"},
                "vlan_id": {"dataformat": "int", "displayname": "VLAN ID"},
            },
        )
        helper.add_instance(
            classname="ipam_vlan",
            keyname="PARIS-VLAN10",
            fields={"displayname": "Paris Staff VLAN", "vlan_id": 10, "description": "staff"},
        )
        helper.add_instance(
            classname="ipam_vlan",
            keyname="LYON-VLAN20",
            fields={"displayname": "Lyon Server VLAN", "vlan_id": 20, "description": "servers"},
        )

    def test_list_shows_all_vlans(self):
        response = self.client.get(reverse("app_ipam:vlan_list"))
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "PARIS-VLAN10")
        self.assertContains(response, "LYON-VLAN20")

    def test_query_filters_by_keyname(self):
        response = self.client.get(reverse("app_ipam:vlan_list"), {"query": "PARIS"})
        self.assertContains(response, "PARIS-VLAN10")
        self.assertNotContains(response, "LYON-VLAN20")

    def test_query_filters_by_description(self):
        response = self.client.get(reverse("app_ipam:vlan_list"), {"query": "servers"})
        self.assertContains(response, "LYON-VLAN20")
        self.assertNotContains(response, "PARIS-VLAN10")
