import os
import sys
import pytest
from unittest import mock
from updater import paths

def test_is_frozen():
    not_frozen = paths.is_frozen()
    assert not_frozen == False
    sys.frozen = True
    frozen = paths.is_frozen()
    assert frozen == True
    del sys.frozen

@pytest.mark.parametrize("is_frozen, expected_result", [
    # When frozen, path should resolve to the executable file.
    (True, sys.executable),
    # When not frozen, it should resolve to the main file being run.
    (False, sys.argv[0])
])
def test_get_executable(is_frozen, expected_result):
    with mock.patch("updater.paths.is_frozen", return_value=is_frozen):
        result = paths.get_executable()
    assert result == expected_result

def test_get_executable_mac():
    old_value = paths.is_mac
    paths.is_mac = True
    sys.frozen = True
    mac_fake_items = ["python", "myapp"]
    with mock.patch("updater.paths.is_frozen", return_value=True):
        with mock.patch("os.listdir", return_value=mac_fake_items):
            result = paths.get_executable()
    assert result != sys.executable
    assert "python" not in result
    del sys.frozen
    paths.is_mac = old_value
def test_executable_directory():
    result = paths.executable_directory()
    assert result == os.path.dirname(sys.argv[0])

def test_app_path():
    result = paths.app_path()
    assert result == os.path.dirname(sys.argv[0])
    old_value = paths.is_mac
    paths.is_mac = True
    sys.frozen = True
    with mock.patch("updater.paths.executable_directory", return_value="/path/to/content/resources"):
        mac_result = paths.app_path()
        assert mac_result == os.path.abspath(os.path.join("/path", "to"))

    paths.is_mac = old_value
    del sys.frozen