import pytest from helper_bot.handlers.voice.constants import ( BUTTON_COMMAND_MAPPING, COMMAND_MAPPING, CALLBACK_COMMAND_MAPPING, VOICE_BOT_NAME, STATE_START, STATE_STANDUP_WRITE, BTN_SPEAK, BTN_LISTEN, CMD_START, CMD_HELP, CMD_RESTART, CMD_EMOJI, CMD_REFRESH, CALLBACK_SAVE, CALLBACK_DELETE ) class TestVoiceConstants: """Тесты для констант voice модуля""" def test_button_command_mapping_structure(self): """Тест структуры BUTTON_COMMAND_MAPPING""" assert isinstance(BUTTON_COMMAND_MAPPING, dict) assert len(BUTTON_COMMAND_MAPPING) > 0 # Проверяем, что все значения являются строками for key, value in BUTTON_COMMAND_MAPPING.items(): assert isinstance(key, str) assert isinstance(value, str) def test_button_command_mapping_specific_values(self): """Тест конкретных значений в BUTTON_COMMAND_MAPPING""" assert "🎤Высказаться" in BUTTON_COMMAND_MAPPING assert "🎧Послушать" in BUTTON_COMMAND_MAPPING assert BUTTON_COMMAND_MAPPING["🎤Высказаться"] == "voice_speak" assert BUTTON_COMMAND_MAPPING["🎧Послушать"] == "voice_listen" def test_command_mapping_structure(self): """Тест структуры COMMAND_MAPPING""" assert isinstance(COMMAND_MAPPING, dict) assert len(COMMAND_MAPPING) > 0 # Проверяем, что все значения являются строками for key, value in COMMAND_MAPPING.items(): assert isinstance(key, str) assert isinstance(value, str) def test_command_mapping_specific_values(self): """Тест конкретных значений в COMMAND_MAPPING""" assert "start" in COMMAND_MAPPING assert "help" in COMMAND_MAPPING assert "restart" in COMMAND_MAPPING assert "emoji" in COMMAND_MAPPING assert "refresh" in COMMAND_MAPPING assert COMMAND_MAPPING["start"] == "voice_start" assert COMMAND_MAPPING["help"] == "voice_help" assert COMMAND_MAPPING["restart"] == "voice_restart" assert COMMAND_MAPPING["emoji"] == "voice_emoji" assert COMMAND_MAPPING["refresh"] == "voice_refresh" def test_callback_command_mapping_structure(self): """Тест структуры CALLBACK_COMMAND_MAPPING""" assert isinstance(CALLBACK_COMMAND_MAPPING, dict) assert len(CALLBACK_COMMAND_MAPPING) > 0 # Проверяем, что все значения являются строками for key, value in CALLBACK_COMMAND_MAPPING.items(): assert isinstance(key, str) assert isinstance(value, str) def test_callback_command_mapping_specific_values(self): """Тест конкретных значений в CALLBACK_COMMAND_MAPPING""" assert "save" in CALLBACK_COMMAND_MAPPING assert "delete" in CALLBACK_COMMAND_MAPPING assert CALLBACK_COMMAND_MAPPING["save"] == "voice_save" assert CALLBACK_COMMAND_MAPPING["delete"] == "voice_delete" def test_voice_bot_name(self): """Тест VOICE_BOT_NAME""" assert isinstance(VOICE_BOT_NAME, str) assert len(VOICE_BOT_NAME) > 0 assert "voice" in VOICE_BOT_NAME.lower() def test_state_constants(self): """Тест констант состояний""" assert isinstance(STATE_START, str) assert isinstance(STATE_STANDUP_WRITE, str) assert len(STATE_START) > 0 assert len(STATE_STANDUP_WRITE) > 0 def test_button_constants(self): """Тест констант кнопок""" assert isinstance(BTN_SPEAK, str) assert isinstance(BTN_LISTEN, str) assert len(BTN_SPEAK) > 0 assert len(BTN_LISTEN) > 0 def test_command_constants(self): """Тест констант команд""" assert isinstance(CMD_START, str) assert isinstance(CMD_HELP, str) assert isinstance(CMD_RESTART, str) assert isinstance(CMD_EMOJI, str) assert isinstance(CMD_REFRESH, str) assert CMD_START == "start" assert CMD_HELP == "help" assert CMD_RESTART == "restart" assert CMD_EMOJI == "emoji" assert CMD_REFRESH == "refresh" def test_callback_constants(self): """Тест констант callback""" assert isinstance(CALLBACK_SAVE, str) assert isinstance(CALLBACK_DELETE, str) assert CALLBACK_SAVE == "save" assert CALLBACK_DELETE == "delete" def test_mapping_consistency(self): """Тест согласованности маппингов""" # Проверяем, что все ключи в маппингах соответствуют константам assert "🎤Высказаться" in BUTTON_COMMAND_MAPPING assert "🎧Послушать" in BUTTON_COMMAND_MAPPING assert "start" in COMMAND_MAPPING assert "help" in COMMAND_MAPPING assert "restart" in COMMAND_MAPPING assert "emoji" in COMMAND_MAPPING assert "refresh" in COMMAND_MAPPING assert "save" in CALLBACK_COMMAND_MAPPING assert "delete" in CALLBACK_COMMAND_MAPPING def test_mapping_values_format(self): """Тест формата значений в маппингах""" # Проверяем, что все значения начинаются с 'voice_' for value in BUTTON_COMMAND_MAPPING.values(): assert value.startswith("voice_") for value in COMMAND_MAPPING.values(): assert value.startswith("voice_") for value in CALLBACK_COMMAND_MAPPING.values(): assert value.startswith("voice_") def test_no_duplicate_values(self): """Тест отсутствия дублирующихся значений в пределах каждого маппинга""" button_values = list(BUTTON_COMMAND_MAPPING.values()) command_values = list(COMMAND_MAPPING.values()) callback_values = list(CALLBACK_COMMAND_MAPPING.values()) # Проверяем, что нет дублирующихся значений в каждом маппинге assert len(button_values) == len(set(button_values)) assert len(command_values) == len(set(command_values)) assert len(callback_values) == len(set(callback_values)) # Примечание: Дублирование между маппингами допустимо (например, voice_emoji) # так как одно действие может быть вызвано и командой, и кнопкой if __name__ == '__main__': pytest.main([__file__])