# (c) cavaliba.com - test_sidebar_app_registry

from django.test import TestCase

import app_home.cache as cache
from app_home.configuration import set_configuration
from app_home.sidebar import compute_sidebar

AAA_IMPORT = {"perms": ["p_data_import"], "is_admin": False, "username": "importer"}
AAA_NONE = {"perms": [], "is_admin": False, "username": "nobody"}


class SidebarAppRegistryTest(TestCase):
    def setUp(self):
        cache.clear()

    def _set_content(self, yaml_text):
        set_configuration(
            appname="home", keyname="SIDEBAR_CONTENT", value=yaml_text, description="", page="",
            order=100,
        )  # fmt: skip
        cache.clear()

    def test_app_entry_resolves_registry_url_icon_label(self):
        self._set_content("- app: import\n")
        rows = compute_sidebar(AAA_IMPORT)
        self.assertEqual(rows[0]["label"], "Import")
        self.assertEqual(rows[0]["url"], "/data/private/import/")

    def test_app_entry_hidden_without_registry_permission(self):
        self._set_content("- app: import\n")
        rows = compute_sidebar(AAA_NONE)
        self.assertEqual(rows, [])

    def test_yaml_label_and_icon_override_registry_defaults(self):
        self._set_content('- app: import\n  label: "Custom Import"\n  icon: fa-star\n')
        rows = compute_sidebar(AAA_IMPORT)
        self.assertEqual(rows[0]["label"], "Custom Import")
        self.assertEqual(rows[0]["icon"], "fa-star")

    def test_yaml_permission_overrides_registry_permission(self):
        # import's registry permission is p_data_import; override to something
        # the test aaa doesn't have, entry must become hidden
        self._set_content("- app: import\n  permission: p_never_granted\n")
        rows = compute_sidebar(AAA_IMPORT)
        self.assertEqual(rows, [])

    def test_unknown_app_key_is_skipped_not_an_error(self):
        self._set_content("- app: totally_bogus_app\n")
        rows = compute_sidebar(AAA_IMPORT)
        self.assertEqual(rows, [])
