From 942dca3444a3fe978074fa180ca9e1106ad7ae88 Mon Sep 17 00:00:00 2001 From: George Edward Bulmer Date: Tue, 13 Feb 2018 13:31:27 +0000 Subject: [PATCH] Add test for pastebin_version() --- qutebrowser/utils/version.py | 6 +-- tests/unit/utils/test_version.py | 67 ++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 09a1a6efa..71e33886f 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -453,7 +453,7 @@ def opengl_vendor(): # pragma: no cover old_context.makeCurrent(old_surface) -def pastebin_version(): +def pastebin_version(pbclient=None): """Pastebin the version and log the url to messages.""" def _yank_url(url): utils.set_clipboard(url) @@ -478,8 +478,8 @@ def pastebin_version(): http_client = httpclient.HTTPClient() misc_api = pastebin.PastebinClient.MISC_API_URL - pbclient = pastebin.PastebinClient(http_client, parent=app, - api_url=misc_api) + pbclient = pbclient or pastebin.PastebinClient(http_client, parent=app, + api_url=misc_api) pbclient.success.connect(_on_paste_version_success) pbclient.error.connect(_on_paste_version_err) diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index da65422a7..84d89680c 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -35,9 +35,11 @@ import datetime import attr import pkg_resources import pytest +from PyQt5.QtCore import pyqtSignal, QUrl, QObject import qutebrowser from qutebrowser.utils import version, usertypes, utils +from qutebrowser.misc import pastebin from qutebrowser.browser import pdfjs @@ -950,3 +952,68 @@ def test_opengl_vendor(): """Simply call version.opengl_vendor() and see if it doesn't crash.""" pytest.importorskip("PyQt5.QtOpenGL") return version.opengl_vendor() + + +class HTTPPostStub(QObject): + + """A stub class for HTTPClient. + + Attributes: + url: the last url send by post() + data: the last data send by post() + """ + + success = pyqtSignal(str) + error = pyqtSignal(str) + + def __init__(self, parent=None): + super().__init__(parent) + self.url = None + self.data = None + + def post(self, url, data=None): + self.url = url + self.data = data + + +@pytest.fixture +def pbclient(): + http_stub = HTTPPostStub() + client = pastebin.PastebinClient(http_stub) + return client + + +def test_pastebin_version(pbclient, monkeypatch): + """Test version.pastebin_version() twice.""" + patches = { + '_path_info': lambda: {'PATH DESC': 'PATH NAME'}, + '_uptime': lambda: datetime.timedelta(hours=1, minutes=23, seconds=45), + } + + for name, val in patches.items(): + monkeypatch.setattr('qutebrowser.utils.version.' + name, val) + + version.pastebin_version(pbclient) + pbclient.success.emit("test") + assert version.pastebin_url == "test" + + version.pastebin_version(pbclient) + assert version.pastebin_url == "test" + + +def test_pastebin_version_error(pbclient, monkeypatch): + """Test version.pastebin_version() with errors.""" + patches = { + '_path_info': lambda: {'PATH DESC': 'PATH NAME'}, + '_uptime': lambda: datetime.timedelta(hours=1, minutes=23, seconds=45), + } + + for name, val in patches.items(): + monkeypatch.setattr('qutebrowser.utils.version.' + name, val) + + version.pastebin_url = None + version.pastebin_version(pbclient) + try: + pbclient.error.emit("test") + except: + assert version.pastebin_url is None