import os import sys import pytest from unittest import mock from main import check_env, check_dashboard_files class _version_info: def __init__(self, major, minor): self.major = major self.minor = minor def test_check_env(monkeypatch): version_info_correct = _version_info(3, 10) version_info_wrong = _version_info(3, 9) monkeypatch.setattr(sys, "version_info", version_info_correct) with mock.patch("os.makedirs") as mock_makedirs: check_env() mock_makedirs.assert_any_call("data/config", exist_ok=True) mock_makedirs.assert_any_call("data/plugins", exist_ok=True) mock_makedirs.assert_any_call("data/temp", exist_ok=True) monkeypatch.setattr(sys, "version_info", version_info_wrong) with pytest.raises(SystemExit): check_env() @pytest.mark.asyncio async def test_check_dashboard_files(monkeypatch): monkeypatch.setattr(os.path, "exists", lambda x: False) async def mock_get(*args, **kwargs): class MockResponse: status = 200 async def read(self): return b"content" return MockResponse() with mock.patch("aiohttp.ClientSession.get", new=mock_get): with mock.patch("builtins.open", mock.mock_open()) as mock_file: with mock.patch("zipfile.ZipFile.extractall") as mock_extractall: async def mock_aenter(_): await check_dashboard_files() mock_file.assert_called_once_with("data/dashboard.zip", "wb") mock_extractall.assert_called_once() async def mock_aexit(obj, exc_type, exc, tb): return mock_extractall.__aenter__ = mock_aenter mock_extractall.__aexit__ = mock_aexit