# (c) cavaliba.com - tests / sidebar version + copyright line

from django.conf import settings
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 tests import helper


class TestSidebarVersion(TestCase):
    def setUp(self):
        helper.add_admin_user(login="unittest")
        cache.clear()
        cache_django.clear()

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_version_and_copyright_under_logo(self):
        response = self.client.get(reverse("app_home:private"), follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'class="sidebar-version"', status_code=200)
        self.assertContains(response, settings.CAVALIBA_VERSION, status_code=200)
        self.assertContains(response, "(c) cavaliba.com", status_code=200)

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_version_links_to_release_notes(self):
        response = self.client.get(reverse("app_home:private"), follow=True)
        self.assertContains(
            response, 'href="https://cavaliba.com/release/cavaliba/"', status_code=200
        )
        self.assertContains(response, 'rel="noopener noreferrer"', status_code=200)

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_only_the_version_number_is_the_link(self):
        response = self.client.get(reverse("app_home:private"), follow=True)
        content = response.content.decode()
        start = content.find('class="sidebar-version"')
        block = content[start : start + 400]
        # the anchor wraps the version, the copyright text stays outside it
        self.assertIn(f">{settings.CAVALIBA_VERSION}</a> (c) cavaliba.com", block)

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_version_line_sits_between_logo_and_first_nav_row(self):
        response = self.client.get(reverse("app_home:private"), follow=True)
        content = response.content.decode()
        logo = content.find('class="sidebar-logo"')
        version = content.find('class="sidebar-version"')
        first_row = content.find('class="sidebar-item"')
        self.assertGreater(logo, -1)
        self.assertGreater(first_row, -1)
        self.assertGreater(version, logo)
        self.assertLess(version, first_row)

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_version_present_on_every_sidebar_page(self):
        for urlname in ("app_home:private", "app_home:admintools", "app_sirene:private"):
            response = self.client.get(reverse(urlname), follow=True)
            self.assertContains(response, "sidebar-version", status_code=200, msg_prefix=urlname)
            self.assertContains(
                response, settings.CAVALIBA_VERSION, status_code=200, msg_prefix=urlname
            )
