# (c) cavaliba.com - test / ajax / ajax_instance

import json

from django.test import TestCase, override_settings
from django.urls import reverse

import app_home.cache as cache
from app_data.user import User
from tests import helper


@override_settings(CAVALIBA_AUTH_MODE="unittest")
class TestAjaxInstance(TestCase):
    def setUp(self):
        """Log in a unittest admin and seed users with distinct keyname/displayname."""
        cache.clear()
        helper.add_admin_user(login="unittest")
        helper.add_user(login="jdoe", displayname="John Doe")
        helper.add_user(login="asmith", displayname="Alice Smith")

    def test_result_text_uses_displayname_not_keyname(self):
        response = self.client.get(reverse("app_data:ajax_instance"), {"c": "user", "q": "jdoe"})
        self.assertEqual(response.status_code, 200)
        data = json.loads(response.content)
        ids = {r["id"]: r["text"] for r in data["results"]}
        self.assertIn("jdoe", ids)
        self.assertEqual(ids["jdoe"], "John Doe")

    def test_search_matches_displayname(self):
        response = self.client.get(reverse("app_data:ajax_instance"), {"c": "user", "q": "Alice"})
        self.assertEqual(response.status_code, 200)
        data = json.loads(response.content)
        ids = {r["id"]: r["text"] for r in data["results"]}
        self.assertIn("asmith", ids)
        self.assertEqual(ids["asmith"], "Alice Smith")

    def test_result_text_falls_back_to_keyname_when_displayname_empty(self):
        user = User(keyname="noname")
        user.displayname = ""
        user.save(aaa={"username": "unittest:helper"}, action="create")

        response = self.client.get(reverse("app_data:ajax_instance"), {"c": "user", "q": "noname"})
        self.assertEqual(response.status_code, 200)
        data = json.loads(response.content)
        ids = {r["id"]: r["text"] for r in data["results"]}
        self.assertIn("noname", ids)
        self.assertEqual(ids["noname"], "noname")
