jo
This commit is contained in:
135
venv/lib/python3.11/site-packages/pytest_flask/fixtures.py
Normal file
135
venv/lib/python3.11/site-packages/pytest_flask/fixtures.py
Normal file
@@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env python
|
||||
import socket
|
||||
import warnings
|
||||
|
||||
import pytest
|
||||
from flask import _request_ctx_stack
|
||||
|
||||
from ._internal import _determine_scope
|
||||
from ._internal import _make_accept_header
|
||||
from ._internal import _rewrite_server_name
|
||||
from ._internal import deprecated
|
||||
from .live_server import LiveServer
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def client(app):
|
||||
"""A Flask test client. An instance of :class:`flask.testing.TestClient`
|
||||
by default.
|
||||
"""
|
||||
with app.test_client() as client:
|
||||
yield client
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def client_class(request, client):
|
||||
"""Uses to set a ``client`` class attribute to current Flask test client::
|
||||
|
||||
@pytest.mark.usefixtures('client_class')
|
||||
class TestView:
|
||||
|
||||
def login(self, email, password):
|
||||
credentials = {'email': email, 'password': password}
|
||||
return self.client.post(url_for('login'), data=credentials)
|
||||
|
||||
def test_login(self):
|
||||
assert self.login('foo@example.com', 'pass').status_code == 200
|
||||
|
||||
"""
|
||||
if request.cls is not None:
|
||||
request.cls.client = client
|
||||
|
||||
|
||||
@pytest.fixture(scope=_determine_scope)
|
||||
def live_server(request, app, pytestconfig):
|
||||
"""Run application in a separate process.
|
||||
|
||||
When the ``live_server`` fixture is applied, the ``url_for`` function
|
||||
works as expected::
|
||||
|
||||
def test_server_is_up_and_running(live_server):
|
||||
index_url = url_for('index', _external=True)
|
||||
assert index_url == 'http://localhost:5000/'
|
||||
|
||||
res = urllib2.urlopen(index_url)
|
||||
assert res.code == 200
|
||||
|
||||
"""
|
||||
# Set or get a port
|
||||
port = app.config.get("LIVESERVER_PORT", None)
|
||||
if not port:
|
||||
port = pytestconfig.getvalue("live_server_port")
|
||||
|
||||
if port == 0:
|
||||
# Bind to an open port
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(("", 0))
|
||||
port = s.getsockname()[1]
|
||||
s.close()
|
||||
|
||||
host = pytestconfig.getvalue("live_server_host")
|
||||
|
||||
# Explicitly set application ``SERVER_NAME`` for test suite
|
||||
original_server_name = app.config["SERVER_NAME"] or "localhost"
|
||||
final_server_name = _rewrite_server_name(original_server_name, str(port))
|
||||
app.config["SERVER_NAME"] = final_server_name
|
||||
|
||||
wait = request.config.getvalue("live_server_wait")
|
||||
clean_stop = request.config.getvalue("live_server_clean_stop")
|
||||
server = LiveServer(app, host, port, wait, clean_stop)
|
||||
if request.config.getvalue("start_live_server"):
|
||||
server.start()
|
||||
|
||||
request.addfinalizer(server.stop)
|
||||
yield server
|
||||
|
||||
if original_server_name is not None:
|
||||
app.config["SERVER_NAME"] = original_server_name
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def config(app):
|
||||
"""An application config."""
|
||||
return app.config
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def request_ctx(app):
|
||||
"""The request context which contains all request relevant information,
|
||||
e.g. `session`, `g`, `flashes`, etc.
|
||||
"""
|
||||
warnings.warn(
|
||||
"In Werzeug 2.0.0, the Client request methods "
|
||||
"(client.get, client.post) always return an instance of TestResponse. This "
|
||||
"class provides a reference to the request object through 'response.request' "
|
||||
"The fixture 'request_ctx' is deprecated and will be removed in the future, using TestResponse.request "
|
||||
"is the prefered way.",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
return _request_ctx_stack.top
|
||||
|
||||
|
||||
@pytest.fixture(params=["application/json", "text/html"])
|
||||
def mimetype(request):
|
||||
return request.param
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def accept_mimetype(mimetype):
|
||||
return _make_accept_header(mimetype)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def accept_json(request):
|
||||
return _make_accept_header("application/json")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def accept_jsonp():
|
||||
return _make_accept_header("application/json-p")
|
||||
|
||||
|
||||
@pytest.fixture(params=["*", "*/*"])
|
||||
def accept_any(request):
|
||||
return _make_accept_header(request.param)
|
||||
Reference in New Issue
Block a user