# (c) cavaliba.com - tests / home / sidebar active users

from unittest import mock

from django.core.cache import cache as cache_django
from django.test import TestCase

import app_home.cache as cache
from app_home.sidebar import list_active_users


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

    def test_unsupported_backend_returns_none(self):
        # test settings use the sqlite DatabaseCache fallback (no CAVALIBA_CACHE_DEFAULT_URL),
        # which has no .keys() - list_keys()/list_active_users() must report "unsupported"
        self.assertIsNone(cache.cache2_sidebar.list_keys("user:*"))
        self.assertIsNone(list_active_users())

    def test_extracts_and_sorts_usernames(self):
        prefix = cache.cache2_sidebar.prefix
        fake_keys = [
            f"{prefix}::user:charlie",
            f"{prefix}::user:alice",
            f"{prefix}::user:bob",
            f"{prefix}::other:unrelated",
        ]
        with mock.patch.object(cache.cache2_sidebar, "list_keys", return_value=fake_keys):
            self.assertEqual(list_active_users(), ["alice", "bob", "charlie"])

    def test_no_matching_keys_returns_empty_list(self):
        with mock.patch.object(cache.cache2_sidebar, "list_keys", return_value=[]):
            self.assertEqual(list_active_users(), [])
