Move download_stub to helpers/fixtures
I am adding support for downloading dependant assets in browser/greasemonkey and want to mock the download manager for testing.
This commit is contained in:
parent
cba93954cd
commit
fa1ac8d93c
@ -523,3 +523,12 @@ class ModelValidator:
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def model_validator(qtmodeltester):
|
def model_validator(qtmodeltester):
|
||||||
return ModelValidator(qtmodeltester)
|
return ModelValidator(qtmodeltester)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def download_stub(win_registry, tmpdir, stubs):
|
||||||
|
"""Register a FakeDownloadManager."""
|
||||||
|
stub = stubs.FakeDownloadManager(tmpdir)
|
||||||
|
objreg.register('qtnetwork-download-manager', stub)
|
||||||
|
yield
|
||||||
|
objreg.delete('qtnetwork-download-manager')
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
"""Fake objects/stubs."""
|
"""Fake objects/stubs."""
|
||||||
|
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
import contextlib
|
||||||
|
import shutil
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
from PyQt5.QtCore import pyqtSignal, QPoint, QProcess, QObject, QUrl
|
from PyQt5.QtCore import pyqtSignal, QPoint, QProcess, QObject, QUrl
|
||||||
@ -29,7 +31,7 @@ from PyQt5.QtNetwork import (QNetworkRequest, QAbstractNetworkCache,
|
|||||||
QNetworkCacheMetaData)
|
QNetworkCacheMetaData)
|
||||||
from PyQt5.QtWidgets import QCommonStyle, QLineEdit, QWidget, QTabBar
|
from PyQt5.QtWidgets import QCommonStyle, QLineEdit, QWidget, QTabBar
|
||||||
|
|
||||||
from qutebrowser.browser import browsertab
|
from qutebrowser.browser import browsertab, downloads
|
||||||
from qutebrowser.utils import usertypes
|
from qutebrowser.utils import usertypes
|
||||||
from qutebrowser.mainwindow import mainwindow
|
from qutebrowser.mainwindow import mainwindow
|
||||||
|
|
||||||
@ -558,3 +560,47 @@ class HTTPPostStub(QObject):
|
|||||||
def post(self, url, data=None):
|
def post(self, url, data=None):
|
||||||
self.url = url
|
self.url = url
|
||||||
self.data = data
|
self.data = data
|
||||||
|
|
||||||
|
|
||||||
|
class FakeDownloadItem(QObject):
|
||||||
|
|
||||||
|
"""Mock browser.downloads.DownloadItem."""
|
||||||
|
|
||||||
|
finished = pyqtSignal()
|
||||||
|
|
||||||
|
def __init__(self, fileobj, name, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.fileobj = fileobj
|
||||||
|
self.name = name
|
||||||
|
self.successful = True
|
||||||
|
|
||||||
|
|
||||||
|
class FakeDownloadManager:
|
||||||
|
|
||||||
|
"""Mock browser.downloads.DownloadManager."""
|
||||||
|
|
||||||
|
def __init__(self, tmpdir):
|
||||||
|
self._tmpdir = tmpdir
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def _open_fileobj(self, target):
|
||||||
|
"""Ensure a DownloadTarget's fileobj attribute is available."""
|
||||||
|
if isinstance(target, downloads.FileDownloadTarget):
|
||||||
|
target.fileobj = open(target.filename, 'wb')
|
||||||
|
try:
|
||||||
|
yield target.fileobj
|
||||||
|
finally:
|
||||||
|
target.fileobj.close()
|
||||||
|
else:
|
||||||
|
yield target.fileobj
|
||||||
|
|
||||||
|
def get(self, url, target, **kwargs):
|
||||||
|
"""Return a FakeDownloadItem instance with a fileobj.
|
||||||
|
|
||||||
|
The content is copied from the file the given url links to.
|
||||||
|
"""
|
||||||
|
with self._open_fileobj(target):
|
||||||
|
download_item = FakeDownloadItem(target.fileobj, name=url.path())
|
||||||
|
with (self._tmpdir / url.path()).open('rb') as fake_url_file:
|
||||||
|
shutil.copyfileobj(fake_url_file, download_item.fileobj)
|
||||||
|
return download_item
|
||||||
|
@ -21,16 +21,13 @@
|
|||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import zipfile
|
import zipfile
|
||||||
import shutil
|
|
||||||
import logging
|
import logging
|
||||||
import contextlib
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal, QUrl, QObject
|
from PyQt5.QtCore import QUrl
|
||||||
|
|
||||||
from qutebrowser.browser import adblock, downloads
|
from qutebrowser.browser import adblock
|
||||||
from qutebrowser.utils import objreg
|
|
||||||
|
|
||||||
pytestmark = pytest.mark.usefixtures('qapp', 'config_tmpdir')
|
pytestmark = pytest.mark.usefixtures('qapp', 'config_tmpdir')
|
||||||
|
|
||||||
@ -70,59 +67,6 @@ def basedir(fake_args):
|
|||||||
fake_args.basedir = None
|
fake_args.basedir = None
|
||||||
|
|
||||||
|
|
||||||
class FakeDownloadItem(QObject):
|
|
||||||
|
|
||||||
"""Mock browser.downloads.DownloadItem."""
|
|
||||||
|
|
||||||
finished = pyqtSignal()
|
|
||||||
|
|
||||||
def __init__(self, fileobj, name, parent=None):
|
|
||||||
super().__init__(parent)
|
|
||||||
self.fileobj = fileobj
|
|
||||||
self.name = name
|
|
||||||
self.successful = True
|
|
||||||
|
|
||||||
|
|
||||||
class FakeDownloadManager:
|
|
||||||
|
|
||||||
"""Mock browser.downloads.DownloadManager."""
|
|
||||||
|
|
||||||
def __init__(self, tmpdir):
|
|
||||||
self._tmpdir = tmpdir
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
|
||||||
def _open_fileobj(self, target):
|
|
||||||
"""Ensure a DownloadTarget's fileobj attribute is available."""
|
|
||||||
if isinstance(target, downloads.FileDownloadTarget):
|
|
||||||
target.fileobj = open(target.filename, 'wb')
|
|
||||||
try:
|
|
||||||
yield target.fileobj
|
|
||||||
finally:
|
|
||||||
target.fileobj.close()
|
|
||||||
else:
|
|
||||||
yield target.fileobj
|
|
||||||
|
|
||||||
def get(self, url, target, **kwargs):
|
|
||||||
"""Return a FakeDownloadItem instance with a fileobj.
|
|
||||||
|
|
||||||
The content is copied from the file the given url links to.
|
|
||||||
"""
|
|
||||||
with self._open_fileobj(target):
|
|
||||||
download_item = FakeDownloadItem(target.fileobj, name=url.path())
|
|
||||||
with (self._tmpdir / url.path()).open('rb') as fake_url_file:
|
|
||||||
shutil.copyfileobj(fake_url_file, download_item.fileobj)
|
|
||||||
return download_item
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def download_stub(win_registry, tmpdir):
|
|
||||||
"""Register a FakeDownloadManager."""
|
|
||||||
stub = FakeDownloadManager(tmpdir)
|
|
||||||
objreg.register('qtnetwork-download-manager', stub)
|
|
||||||
yield
|
|
||||||
objreg.delete('qtnetwork-download-manager')
|
|
||||||
|
|
||||||
|
|
||||||
def create_zipfile(directory, files, zipname='test'):
|
def create_zipfile(directory, files, zipname='test'):
|
||||||
"""Return a path to a newly created zip file.
|
"""Return a path to a newly created zip file.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user