from unittest.mock import Mock

import pytest

from fenrirscreenreader.commands.commands import subprocess as subprocess_command


@pytest.mark.unit
def test_script_command_executes_without_shell(monkeypatch):
    process = Mock()
    process.communicate.return_value = (b"done", b"")
    popen = Mock(return_value=process)
    monkeypatch.setattr(subprocess_command, "Popen", popen)
    output_manager = Mock()
    command = subprocess_command.command()
    command.initialize(
        {
            "general": {"curr_user": "Username"},
            "runtime": {"OutputManager": output_manager},
        },
        "/tmp/script with spaces",
    )

    command._thread_run()

    popen.assert_called_once_with(
        ["/tmp/script with spaces", "Username"],
        stdout=subprocess_command.PIPE,
        stderr=subprocess_command.PIPE,
    )
    output_manager.present_text.assert_called_once_with(
        "done", sound_icon="", interrupt=False
    )
