# (c) cavaliba.com - test_sidebar_malformed_yaml

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_ADMIN = {"perms": ["p_data_admin"], "is_admin": True, "username": "admin"}
AAA_USER = {"perms": [], "is_admin": False, "username": "bob"}


class SidebarMalformedYamlTest(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_invalid_yaml_syntax_falls_back_empty_for_regular_user(self):
        self._set_content("not: [valid, yaml, structure")
        rows = compute_sidebar(AAA_USER)
        self.assertEqual(rows, [])

    def test_invalid_yaml_syntax_falls_back_to_fix_link_for_admin(self):
        self._set_content("not: [valid, yaml, structure")
        rows = compute_sidebar(AAA_ADMIN)
        self.assertEqual(len(rows), 2)
        self.assertEqual(rows[0]["kind"], "header")
        self.assertEqual(rows[1]["kind"], "entry")
        self.assertEqual(rows[1]["url"], "/home/private/conf/")

    def test_non_list_top_level_falls_back(self):
        self._set_content("just_a_string_not_a_list")
        rows = compute_sidebar(AAA_USER)
        self.assertEqual(rows, [])

    def test_unrecognized_item_shape_falls_back(self):
        self._set_content("- neither_schema_app_nor_link: yes\n")
        rows = compute_sidebar(AAA_USER)
        self.assertEqual(rows, [])
