48 lines
1.8 KiB
Python
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 |