From 2dc8eca3c7793e47d2e79084adffe6df1c4e1086 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Thu, 4 Aug 2022 22:16:40 +0200 Subject: [PATCH] Test random command (#145) --- tests/model/test_command.py | 61 ++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/tests/model/test_command.py b/tests/model/test_command.py index c8e4143..bd10c41 100644 --- a/tests/model/test_command.py +++ b/tests/model/test_command.py @@ -1,7 +1,7 @@ """Test the commands.""" from __future__ import annotations -from typing import Any, Type +from typing import Any, Literal, Type from unittest.mock import AsyncMock, call import pytest @@ -328,6 +328,65 @@ async def test_prev_command( assert output is None +@pytest.mark.parametrize( + "mode, call_argument", + [ + ("on", " on"), + ("off", " off"), + (None, ""), + ], +) +async def test_random_command( + transport: tuple[AsyncMock, AsyncMock], + client_connected: Client, + mode: Literal["on", "off"] | None, + call_argument: str, +) -> None: + """Test the random command.""" + mock_reader, mock_writer = transport + mock_reader.readuntil.return_value = b"> " + + output = await client_connected.random(mode) + + assert mock_writer.write.call_count == 1 + assert mock_writer.write.call_args == call(f"random{call_argument}\n".encode()) + assert mock_reader.readuntil.call_count == 1 + assert output is None + + +@pytest.mark.parametrize( + "mode, error, error_message", + [ + ( + "bad_mode", + CommandParameterError, + f"Parameter mode not in {(None, 'on', 'off')}", + ), + ( + 42, + CommandParameterError, + f"Parameter mode not in {(None, 'on', 'off')}", + ), + ], +) +async def test_random_command_error( + transport: tuple[AsyncMock, AsyncMock], + client_connected: Client, + mode: Any, + error: Type[Exception], + error_message: str, +) -> None: + """Test the random command errors.""" + mock_reader, mock_writer = transport + + with pytest.raises(error) as err: + await client_connected.random(mode) + + assert str(err.value) == error_message + assert mock_reader.readuntil.call_count == 0 + assert mock_writer.write.call_count == 0 + + async def test_set_volume_command( transport: tuple[AsyncMock, AsyncMock], client_connected: Client,