# (c) cavaliba.com - test_dashboard_app_registry

from django.test import TestCase

import app_home.cache as cache
from app_home.configuration import set_configuration
from app_home.dashboard import compute_dashboard

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


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

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

    def _cards(self, sections):
        return [c for section in sections for c in section["cards"]]

    def test_app_entry_resolves_registry_url_icon_label_with_no_count(self):
        self._set_content("- section: Tools\n  entries:\n    - app: import\n")
        cards = self._cards(compute_dashboard(AAA_IMPORT))
        self.assertEqual(cards[0]["label"], "Import")
        self.assertEqual(cards[0]["url"], "/data/private/import/")
        self.assertEqual(cards[0]["kind"], "app")
        self.assertNotIn("count", cards[0])

    def test_app_entry_hidden_without_registry_permission(self):
        self._set_content("- section: Tools\n  entries:\n    - app: import\n")
        sections = compute_dashboard(AAA_NONE)
        self.assertEqual(sections, [])

    def test_yaml_label_and_icon_override_registry_defaults(self):
        self._set_content(
            '- section: Tools\n  entries:\n    - app: import\n      label: "Custom Import"\n      icon: fa-star\n'
        )
        cards = self._cards(compute_dashboard(AAA_IMPORT))
        self.assertEqual(cards[0]["label"], "Custom Import")
        self.assertEqual(cards[0]["icon"], "fa-star")

    def test_yaml_permission_overrides_registry_permission(self):
        self._set_content(
            "- section: Tools\n  entries:\n    - app: import\n      permission: p_never_granted\n"
        )
        sections = compute_dashboard(AAA_IMPORT)
        self.assertEqual(sections, [])

    def test_unknown_app_key_is_skipped_not_an_error(self):
        self._set_content("- section: Tools\n  entries:\n    - app: totally_bogus_app\n")
        sections = compute_dashboard(AAA_IMPORT)
        self.assertEqual(sections, [])
