# (c) cavaliba.com - test_schema_save_flushes_sidebar_cache

from django.test import TestCase

import app_home.cache as cache
from app_home.configuration import set_configuration
from app_home.sidebar import get_sidebar_cached
from tests import helper

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


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

    def test_displayname_change_is_reflected_without_waiting_out_ttl(self):
        rows = get_sidebar_cached(AAA_READ)
        self.assertEqual(rows[0]["label"], "Old Name")

        # a different, already-cached user must also see the update - this is
        # not the saving admin's own session, so a per-user invalidate alone
        # (invalidate_sidebar_cache) would leave this entry stale
        helper.add_schema(classname="sbflush1", displayname="New Name", verbose=False)

        rows = get_sidebar_cached(AAA_READ)
        self.assertEqual(rows[0]["label"], "New Name")
