Merge pull request #8092 from cmecklenborg/pytester_refactor_test_pastebin

Migrate test_pastebin.py from testdir to pytester
This commit is contained in:
Ran Benita 2020-12-02 18:17:59 +02:00 committed by GitHub
commit 954151cdbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 17 deletions

View File

@ -3,6 +3,8 @@ from typing import List
from typing import Union from typing import Union
import pytest import pytest
from _pytest.monkeypatch import MonkeyPatch
from _pytest.pytester import Pytester
class TestPasteCapture: class TestPasteCapture:
@ -13,11 +15,11 @@ class TestPasteCapture:
monkeypatch.setattr(plugin, "create_new_paste", pastebinlist.append) monkeypatch.setattr(plugin, "create_new_paste", pastebinlist.append)
return pastebinlist return pastebinlist
def test_failed(self, testdir, pastebinlist): def test_failed(self, pytester: Pytester, pastebinlist) -> None:
testpath = testdir.makepyfile( testpath = pytester.makepyfile(
""" """
import pytest import pytest
def test_pass(): def test_pass() -> None:
pass pass
def test_fail(): def test_fail():
assert 0 assert 0
@ -25,16 +27,16 @@ class TestPasteCapture:
pytest.skip("") pytest.skip("")
""" """
) )
reprec = testdir.inline_run(testpath, "--pastebin=failed") reprec = pytester.inline_run(testpath, "--pastebin=failed")
assert len(pastebinlist) == 1 assert len(pastebinlist) == 1
s = pastebinlist[0] s = pastebinlist[0]
assert s.find("def test_fail") != -1 assert s.find("def test_fail") != -1
assert reprec.countoutcomes() == [1, 1, 1] assert reprec.countoutcomes() == [1, 1, 1]
def test_all(self, testdir, pastebinlist): def test_all(self, pytester: Pytester, pastebinlist) -> None:
from _pytest.pytester import LineMatcher from _pytest.pytester import LineMatcher
testpath = testdir.makepyfile( testpath = pytester.makepyfile(
""" """
import pytest import pytest
def test_pass(): def test_pass():
@ -45,7 +47,7 @@ class TestPasteCapture:
pytest.skip("") pytest.skip("")
""" """
) )
reprec = testdir.inline_run(testpath, "--pastebin=all", "-v") reprec = pytester.inline_run(testpath, "--pastebin=all", "-v")
assert reprec.countoutcomes() == [1, 1, 1] assert reprec.countoutcomes() == [1, 1, 1]
assert len(pastebinlist) == 1 assert len(pastebinlist) == 1
contents = pastebinlist[0].decode("utf-8") contents = pastebinlist[0].decode("utf-8")
@ -59,17 +61,17 @@ class TestPasteCapture:
] ]
) )
def test_non_ascii_paste_text(self, testdir, pastebinlist): def test_non_ascii_paste_text(self, pytester: Pytester, pastebinlist) -> None:
"""Make sure that text which contains non-ascii characters is pasted """Make sure that text which contains non-ascii characters is pasted
correctly. See #1219. correctly. See #1219.
""" """
testdir.makepyfile( pytester.makepyfile(
test_unicode="""\ test_unicode="""\
def test(): def test():
assert '' == 1 assert '' == 1
""" """
) )
result = testdir.runpytest("--pastebin=all") result = pytester.runpytest("--pastebin=all")
expected_msg = "*assert '' == 1*" expected_msg = "*assert '' == 1*"
result.stdout.fnmatch_lines( result.stdout.fnmatch_lines(
[ [
@ -87,7 +89,7 @@ class TestPaste:
return request.config.pluginmanager.getplugin("pastebin") return request.config.pluginmanager.getplugin("pastebin")
@pytest.fixture @pytest.fixture
def mocked_urlopen_fail(self, monkeypatch): def mocked_urlopen_fail(self, monkeypatch: MonkeyPatch):
"""Monkeypatch the actual urlopen call to emulate a HTTP Error 400.""" """Monkeypatch the actual urlopen call to emulate a HTTP Error 400."""
calls = [] calls = []
@ -102,7 +104,7 @@ class TestPaste:
return calls return calls
@pytest.fixture @pytest.fixture
def mocked_urlopen_invalid(self, monkeypatch): def mocked_urlopen_invalid(self, monkeypatch: MonkeyPatch):
"""Monkeypatch the actual urlopen calls done by the internal plugin """Monkeypatch the actual urlopen calls done by the internal plugin
function that connects to bpaste service, but return a url in an function that connects to bpaste service, but return a url in an
unexpected format.""" unexpected format."""
@ -124,7 +126,7 @@ class TestPaste:
return calls return calls
@pytest.fixture @pytest.fixture
def mocked_urlopen(self, monkeypatch): def mocked_urlopen(self, monkeypatch: MonkeyPatch):
"""Monkeypatch the actual urlopen calls done by the internal plugin """Monkeypatch the actual urlopen calls done by the internal plugin
function that connects to bpaste service.""" function that connects to bpaste service."""
calls = [] calls = []
@ -144,7 +146,7 @@ class TestPaste:
monkeypatch.setattr(urllib.request, "urlopen", mocked) monkeypatch.setattr(urllib.request, "urlopen", mocked)
return calls return calls
def test_pastebin_invalid_url(self, pastebin, mocked_urlopen_invalid): def test_pastebin_invalid_url(self, pastebin, mocked_urlopen_invalid) -> None:
result = pastebin.create_new_paste(b"full-paste-contents") result = pastebin.create_new_paste(b"full-paste-contents")
assert ( assert (
result result
@ -152,12 +154,12 @@ class TestPaste:
) )
assert len(mocked_urlopen_invalid) == 1 assert len(mocked_urlopen_invalid) == 1
def test_pastebin_http_error(self, pastebin, mocked_urlopen_fail): def test_pastebin_http_error(self, pastebin, mocked_urlopen_fail) -> None:
result = pastebin.create_new_paste(b"full-paste-contents") result = pastebin.create_new_paste(b"full-paste-contents")
assert result == "bad response: HTTP Error 400: Bad request" assert result == "bad response: HTTP Error 400: Bad request"
assert len(mocked_urlopen_fail) == 1 assert len(mocked_urlopen_fail) == 1
def test_create_new_paste(self, pastebin, mocked_urlopen): def test_create_new_paste(self, pastebin, mocked_urlopen) -> None:
result = pastebin.create_new_paste(b"full-paste-contents") result = pastebin.create_new_paste(b"full-paste-contents")
assert result == "https://bpaste.net/show/3c0c6750bd" assert result == "https://bpaste.net/show/3c0c6750bd"
assert len(mocked_urlopen) == 1 assert len(mocked_urlopen) == 1
@ -169,7 +171,7 @@ class TestPaste:
assert "code=full-paste-contents" in data.decode() assert "code=full-paste-contents" in data.decode()
assert "expiry=1week" in data.decode() assert "expiry=1week" in data.decode()
def test_create_new_paste_failure(self, pastebin, monkeypatch): def test_create_new_paste_failure(self, pastebin, monkeypatch: MonkeyPatch) -> None:
import io import io
import urllib.request import urllib.request