# (c) cavaliba.com - tests / ipam / private() landing page dispatcher

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 PrivateDispatchTest(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_admin_user(login="unittest")

    def test_ip_query_redirects_to_ip_view(self):
        response = self.client.get(reverse("app_ipam:private"), {"query": "10.2.1.5"})
        self.assertRedirects(
            response, "/ipam/private/ip/?ip=10.2.1.5", fetch_redirect_response=False
        )

    def test_subnet_query_redirects_to_subnet_view_aligned(self):
        response = self.client.get(reverse("app_ipam:private"), {"query": "10.1.2.34/24"})
        self.assertRedirects(
            response, "/ipam/private/subnet/?subnet=10.1.2.0%2F24", fetch_redirect_response=False
        )

    def test_partial_prefix_query_redirects_to_subnet_view_padded(self):
        response = self.client.get(reverse("app_ipam:private"), {"query": "10.2"})
        self.assertRedirects(
            response, "/ipam/private/subnet/?subnet=10.2.0.0%2F16", fetch_redirect_response=False
        )

    def test_text_query_redirects_to_vlan_list(self):
        response = self.client.get(reverse("app_ipam:private"), {"query": "PARIS-VLAN10"})
        self.assertRedirects(
            response, "/ipam/private/vlan/list/?query=PARIS-VLAN10", fetch_redirect_response=False
        )

    def test_ipv6_query_stays_on_page_with_error(self):
        response = self.client.get(reverse("app_ipam:private"), {"query": "::1"})
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "IPv6")

    def test_no_query_renders_landing_page(self):
        response = self.client.get(reverse("app_ipam:private"))
        self.assertEqual(response.status_code, 200)
