]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
✅ Simplify tests for websockets (#13202)
authorAlejandra <90076947+alejsdev@users.noreply.github.com>
Sun, 19 Jan 2025 22:40:39 +0000 (22:40 +0000)
committerGitHub <noreply@github.com>
Sun, 19 Jan 2025 22:40:39 +0000 (22:40 +0000)
tests/test_tutorial/test_websockets/test_tutorial002.py
tests/test_tutorial/test_websockets/test_tutorial002_an.py [deleted file]
tests/test_tutorial/test_websockets/test_tutorial002_an_py310.py [deleted file]
tests/test_tutorial/test_websockets/test_tutorial002_an_py39.py [deleted file]
tests/test_tutorial/test_websockets/test_tutorial002_py310.py [deleted file]

index bb5ccbf8ef61ea9a5ed24366f1d9665abde1e9c7..51aa5752a6d5b95b45ca85b97de9d330a44de51f 100644 (file)
@@ -1,18 +1,37 @@
+import importlib
+
 import pytest
+from fastapi import FastAPI
 from fastapi.testclient import TestClient
 from fastapi.websockets import WebSocketDisconnect
 
-from docs_src.websockets.tutorial002 import app
+from ...utils import needs_py39, needs_py310
+
+
+@pytest.fixture(
+    name="app",
+    params=[
+        "tutorial002",
+        pytest.param("tutorial002_py310", marks=needs_py310),
+        "tutorial002_an",
+        pytest.param("tutorial002_an_py39", marks=needs_py39),
+        pytest.param("tutorial002_an_py310", marks=needs_py310),
+    ],
+)
+def get_app(request: pytest.FixtureRequest):
+    mod = importlib.import_module(f"docs_src.websockets.{request.param}")
+
+    return mod.app
 
 
-def test_main():
+def test_main(app: FastAPI):
     client = TestClient(app)
     response = client.get("/")
     assert response.status_code == 200, response.text
     assert b"<!DOCTYPE html>" in response.content
 
 
-def test_websocket_with_cookie():
+def test_websocket_with_cookie(app: FastAPI):
     client = TestClient(app, cookies={"session": "fakesession"})
     with pytest.raises(WebSocketDisconnect):
         with client.websocket_connect("/items/foo/ws") as websocket:
@@ -30,7 +49,7 @@ def test_websocket_with_cookie():
             assert data == f"Message text was: {message}, for item ID: foo"
 
 
-def test_websocket_with_header():
+def test_websocket_with_header(app: FastAPI):
     client = TestClient(app)
     with pytest.raises(WebSocketDisconnect):
         with client.websocket_connect("/items/bar/ws?token=some-token") as websocket:
@@ -48,7 +67,7 @@ def test_websocket_with_header():
             assert data == f"Message text was: {message}, for item ID: bar"
 
 
-def test_websocket_with_header_and_query():
+def test_websocket_with_header_and_query(app: FastAPI):
     client = TestClient(app)
     with pytest.raises(WebSocketDisconnect):
         with client.websocket_connect("/items/2/ws?q=3&token=some-token") as websocket:
@@ -70,7 +89,7 @@ def test_websocket_with_header_and_query():
             assert data == f"Message text was: {message}, for item ID: 2"
 
 
-def test_websocket_no_credentials():
+def test_websocket_no_credentials(app: FastAPI):
     client = TestClient(app)
     with pytest.raises(WebSocketDisconnect):
         with client.websocket_connect("/items/foo/ws"):
@@ -79,7 +98,7 @@ def test_websocket_no_credentials():
             )  # pragma: no cover
 
 
-def test_websocket_invalid_data():
+def test_websocket_invalid_data(app: FastAPI):
     client = TestClient(app)
     with pytest.raises(WebSocketDisconnect):
         with client.websocket_connect("/items/foo/ws?q=bar&token=some-token"):
diff --git a/tests/test_tutorial/test_websockets/test_tutorial002_an.py b/tests/test_tutorial/test_websockets/test_tutorial002_an.py
deleted file mode 100644 (file)
index ec78d70..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-from fastapi.websockets import WebSocketDisconnect
-
-from docs_src.websockets.tutorial002_an import app
-
-
-def test_main():
-    client = TestClient(app)
-    response = client.get("/")
-    assert response.status_code == 200, response.text
-    assert b"<!DOCTYPE html>" in response.content
-
-
-def test_websocket_with_cookie():
-    client = TestClient(app, cookies={"session": "fakesession"})
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-
-
-def test_websocket_with_header():
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/bar/ws?token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-
-
-def test_websocket_with_header_and_query():
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/2/ws?q=3&token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-
-
-def test_websocket_no_credentials():
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
-
-
-def test_websocket_invalid_data():
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws?q=bar&token=some-token"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
diff --git a/tests/test_tutorial/test_websockets/test_tutorial002_an_py310.py b/tests/test_tutorial/test_websockets/test_tutorial002_an_py310.py
deleted file mode 100644 (file)
index 23b4bcb..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-import pytest
-from fastapi import FastAPI
-from fastapi.testclient import TestClient
-from fastapi.websockets import WebSocketDisconnect
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="app")
-def get_app():
-    from docs_src.websockets.tutorial002_an_py310 import app
-
-    return app
-
-
-@needs_py310
-def test_main(app: FastAPI):
-    client = TestClient(app)
-    response = client.get("/")
-    assert response.status_code == 200, response.text
-    assert b"<!DOCTYPE html>" in response.content
-
-
-@needs_py310
-def test_websocket_with_cookie(app: FastAPI):
-    client = TestClient(app, cookies={"session": "fakesession"})
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-
-
-@needs_py310
-def test_websocket_with_header(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/bar/ws?token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-
-
-@needs_py310
-def test_websocket_with_header_and_query(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/2/ws?q=3&token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-
-
-@needs_py310
-def test_websocket_no_credentials(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
-
-
-@needs_py310
-def test_websocket_invalid_data(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws?q=bar&token=some-token"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
diff --git a/tests/test_tutorial/test_websockets/test_tutorial002_an_py39.py b/tests/test_tutorial/test_websockets/test_tutorial002_an_py39.py
deleted file mode 100644 (file)
index 2d77f05..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-import pytest
-from fastapi import FastAPI
-from fastapi.testclient import TestClient
-from fastapi.websockets import WebSocketDisconnect
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="app")
-def get_app():
-    from docs_src.websockets.tutorial002_an_py39 import app
-
-    return app
-
-
-@needs_py39
-def test_main(app: FastAPI):
-    client = TestClient(app)
-    response = client.get("/")
-    assert response.status_code == 200, response.text
-    assert b"<!DOCTYPE html>" in response.content
-
-
-@needs_py39
-def test_websocket_with_cookie(app: FastAPI):
-    client = TestClient(app, cookies={"session": "fakesession"})
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-
-
-@needs_py39
-def test_websocket_with_header(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/bar/ws?token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-
-
-@needs_py39
-def test_websocket_with_header_and_query(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/2/ws?q=3&token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-
-
-@needs_py39
-def test_websocket_no_credentials(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
-
-
-@needs_py39
-def test_websocket_invalid_data(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws?q=bar&token=some-token"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
diff --git a/tests/test_tutorial/test_websockets/test_tutorial002_py310.py b/tests/test_tutorial/test_websockets/test_tutorial002_py310.py
deleted file mode 100644 (file)
index 03bc27b..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-import pytest
-from fastapi import FastAPI
-from fastapi.testclient import TestClient
-from fastapi.websockets import WebSocketDisconnect
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="app")
-def get_app():
-    from docs_src.websockets.tutorial002_py310 import app
-
-    return app
-
-
-@needs_py310
-def test_main(app: FastAPI):
-    client = TestClient(app)
-    response = client.get("/")
-    assert response.status_code == 200, response.text
-    assert b"<!DOCTYPE html>" in response.content
-
-
-@needs_py310
-def test_websocket_with_cookie(app: FastAPI):
-    client = TestClient(app, cookies={"session": "fakesession"})
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: fakesession"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: foo"
-
-
-@needs_py310
-def test_websocket_with_header(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/bar/ws?token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: bar"
-
-
-@needs_py310
-def test_websocket_with_header_and_query(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/2/ws?q=3&token=some-token") as websocket:
-            message = "Message one"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-            message = "Message two"
-            websocket.send_text(message)
-            data = websocket.receive_text()
-            assert data == "Session cookie or query token value is: some-token"
-            data = websocket.receive_text()
-            assert data == "Query parameter q is: 3"
-            data = websocket.receive_text()
-            assert data == f"Message text was: {message}, for item ID: 2"
-
-
-@needs_py310
-def test_websocket_no_credentials(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover
-
-
-@needs_py310
-def test_websocket_invalid_data(app: FastAPI):
-    client = TestClient(app)
-    with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/items/foo/ws?q=bar&token=some-token"):
-            pytest.fail(
-                "did not raise WebSocketDisconnect on __enter__"
-            )  # pragma: no cover