Files
AstrBot/tests/test_main.py
2024-12-25 12:50:29 +08:00

48 lines
1.8 KiB
Python

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