# (c) cavaliba.com - test_sidebar_schema_permission

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
from tests import helper

AAA_READ = {"perms": ["p_data_read"], "is_admin": False, "username": "reader"}
AAA_NONE = {"perms": [], "is_admin": False, "username": "nobody"}


class SidebarSchemaPermissionTest(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_schema(classname="sidebarschema1", displayname="Sidebar Schema", verbose=False)
        set_configuration(
            appname="home", keyname="SIDEBAR_CONTENT", value="- schema: sidebarschema1\n",
            description="", page="", order=100,
        )  # fmt: skip
        cache.clear()

    def test_visible_with_read_permission(self):
        rows = compute_sidebar(AAA_READ)
        self.assertEqual(len(rows), 1)
        self.assertEqual(rows[0]["label"], "Sidebar Schema")
        self.assertIn("/data/private/c/sidebarschema1/list/", rows[0]["url"])

    def test_hidden_without_read_permission(self):
        rows = compute_sidebar(AAA_NONE)
        self.assertEqual(rows, [])

    def test_label_override_from_yaml(self):
        set_configuration(
            appname="home", keyname="SIDEBAR_CONTENT",
            value="- schema: sidebarschema1\n  label: Custom Label\n",
            description="", page="", order=100,
        )  # fmt: skip
        cache.clear()
        rows = compute_sidebar(AAA_READ)
        self.assertEqual(rows[0]["label"], "Custom Label")

    def test_unknown_schema_is_skipped_not_an_error(self):
        set_configuration(
            appname="home", keyname="SIDEBAR_CONTENT", value="- schema: does_not_exist\n",
            description="", page="", order=100,
        )  # fmt: skip
        cache.clear()
        rows = compute_sidebar(AAA_READ)
        self.assertEqual(rows, [])
