from zerver.data_import.hipchat import (
    get_hipchat_sender_id,
)
from zerver.data_import.hipchat_user import (
    UserHandler,
)
from zerver.data_import.sequencer import (
    IdMapper,
)

from zerver.lib.test_classes import (
    ZulipTestCase,
)
from typing import Any, Dict


class HipChatImporter(ZulipTestCase):
    def test_sender_ids(self) -> None:
        realm_id = 5
        user_handler = UserHandler()

        user_id_mapper = IdMapper()
        user_id_mapper.has = lambda key: True  # type: ignore[assignment] # it's just a stub

        # Simulate a "normal" user first.
        user_with_id = dict(
            id=1,
            # other fields don't matter here
        )
        user_handler.add_user(user=user_with_id)

        normal_message: Dict[str, Any] = dict(
            sender=dict(
                id=1,
            )
        )

        sender_id = get_hipchat_sender_id(
            realm_id=realm_id,
            slim_mode=False,
            message_dict=normal_message,
            user_id_mapper=user_id_mapper,
            user_handler=user_handler,
        )

        self.assertEqual(sender_id, 1)

        bot_message = dict(
            sender='fred_bot',
        )

        # Every message from fred_bot should
        # return the same sender_id.
        fred_bot_sender_id = 2

        for i in range(3):
            sender_id = get_hipchat_sender_id(
                realm_id=realm_id,
                slim_mode=False,
                message_dict=bot_message,
                user_id_mapper=user_id_mapper,
                user_handler=user_handler,
            )

            self.assertEqual(sender_id, fred_bot_sender_id)

        id_zero_message = dict(
            sender=dict(
                id=0,
                name='hal_bot',
            ),
        )

        hal_bot_sender_id = 3
        for i in range(3):
            sender_id = get_hipchat_sender_id(
                realm_id=realm_id,
                slim_mode=False,
                message_dict=id_zero_message,
                user_id_mapper=user_id_mapper,
                user_handler=user_handler,
            )

            self.assertEqual(sender_id, hal_bot_sender_id)
