# (c) cavaliba.com - test / views / home configuration

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_home.models import CavalibaLog
from tests import helper
from tests.test_home_save_form import BASE_DATA


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

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_get_renders_app_selector_pills(self):
        helper.add_admin_user(login="unittest")
        response = self.client.get(
            reverse("app_home:configuration", kwargs={"appname": "home"}), follow=True
        )
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "nav-pills")
        self.assertContains(response, 'class="nav-link active"')

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_post_changed_field_logs_exactly_one_entry(self):
        helper.add_admin_user(login="unittest")
        url = reverse("app_home:configuration", kwargs={"appname": "home"})

        data = dict(BASE_DATA, CSV_DELIMITER=";")
        response = self.client.post(url, data=data, follow=True)

        self.assertEqual(response.status_code, 200)
        entries = CavalibaLog.objects.filter(view="configuration", action="update")
        self.assertEqual(entries.count(), 1)
        self.assertEqual(entries.first().data, "home.CSV_DELIMITER")

    @override_settings(CAVALIBA_AUTH_MODE="unittest")
    def test_post_unchanged_values_logs_nothing(self):
        helper.add_admin_user(login="unittest")
        url = reverse("app_home:configuration", kwargs={"appname": "home"})

        self.client.post(url, data=dict(BASE_DATA, CSV_DELIMITER=";"), follow=True)
        CavalibaLog.objects.filter(view="configuration", action="update").delete()

        response = self.client.post(url, data=dict(BASE_DATA, CSV_DELIMITER=";"), follow=True)

        self.assertEqual(response.status_code, 200)
        entries = CavalibaLog.objects.filter(view="configuration", action="update")
        self.assertEqual(entries.count(), 0)
