This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git


The following commit(s) were added to refs/heads/main by this push:
     new 1a75e9e  Add a minimal end to end test framework
1a75e9e is described below

commit 1a75e9ede8aa53818059d4f80324da5a637dea82
Author: Sean B. Palmer <[email protected]>
AuthorDate: Sun Dec 7 11:38:05 2025 +0000

    Add a minimal end to end test framework
---
 pyproject.toml           |  1 +
 tests/Dockerfile.e2e     |  6 ++++++
 tests/docker-compose.yml | 13 ++++++++++++
 tests/e2e/test_hello.py  | 20 +++++++++++++++++++
 tests/run-e2e.sh         |  9 +++++++++
 tests/run-tests.sh       |  2 +-
 uv.lock                  | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
 7 files changed, 101 insertions(+), 1 deletion(-)

diff --git a/pyproject.toml b/pyproject.toml
index 71cb1b8..6dde85b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -59,6 +59,7 @@ test = [
   "netifaces>=0.11.0",
   "playwright>=1.51.0",
   "pytest-asyncio>=0.24",
+  "pytest-playwright>=0.7.2",
   "pytest>=8.0",
 ]
 
diff --git a/tests/Dockerfile.e2e b/tests/Dockerfile.e2e
new file mode 100644
index 0000000..ca28ce8
--- /dev/null
+++ b/tests/Dockerfile.e2e
@@ -0,0 +1,6 @@
+FROM mcr.microsoft.com/playwright/python:v1.51.0-noble
+
+RUN pip3 install --no-cache-dir --break-system-packages pytest 
pytest-playwright
+
+COPY tests/e2e /run/tests/e2e
+WORKDIR /run/tests
diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml
index d81b161..c56f19f 100644
--- a/tests/docker-compose.yml
+++ b/tests/docker-compose.yml
@@ -31,6 +31,19 @@ services:
     environment:
       - ATR_BASE_URL=https://atr:8080
 
+  e2e:
+    build:
+      context: ..
+      dockerfile: tests/Dockerfile.e2e
+    depends_on:
+      atr:
+        condition: service_healthy
+    networks:
+      - test-network
+    command: pytest e2e/ -v
+    environment:
+      - ATR_BASE_URL=https://atr:8080
+
 networks:
   test-network:
     driver: bridge
diff --git a/tests/e2e/test_hello.py b/tests/e2e/test_hello.py
new file mode 100644
index 0000000..b9d0ad8
--- /dev/null
+++ b/tests/e2e/test_hello.py
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+def test_hello() -> None:
+    assert True
diff --git a/tests/run-e2e.sh b/tests/run-e2e.sh
new file mode 100755
index 0000000..58aee80
--- /dev/null
+++ b/tests/run-e2e.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -eu
+
+cd "$(dirname "$0")"
+
+echo "Building and running ATR e2e tests..."
+docker compose up atr e2e --build --abort-on-container-exit --exit-code-from 
e2e
+
+docker compose down -v
diff --git a/tests/run-tests.sh b/tests/run-tests.sh
index cf63630..eedd3ba 100755
--- a/tests/run-tests.sh
+++ b/tests/run-tests.sh
@@ -4,7 +4,7 @@ set -eu
 cd "$(dirname "$0")"
 
 echo "Building and running ATR integration tests..."
-docker compose up --build --abort-on-container-exit --exit-code-from playwright
+docker compose up atr playwright --build --abort-on-container-exit 
--exit-code-from playwright
 
 # Clean up
 docker compose down -v
diff --git a/uv.lock b/uv.lock
index edba195..fd39706 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1346,6 +1346,34 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/04/93/2fa34714b7a4ae72f2f8dad66ba17dd9a2c793220719e736dda28b7aec27/pytest_asyncio-1.2.0-py3-none-any.whl";,
 hash = 
"sha256:8e17ae5e46d8e7efe51ab6494dd2010f4ca8dae51652aa3c8d55acf50bfb2e99", size 
= 15095, upload-time = "2025-09-12T07:33:52.639Z" },
 ]
 
+[[package]]
+name = "pytest-base-url"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "pytest" },
+    { name = "requests" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/ae/1a/b64ac368de6b993135cb70ca4e5d958a5c268094a3a2a4cac6f0021b6c4f/pytest_base_url-2.1.0.tar.gz";,
 hash = 
"sha256:02748589a54f9e63fcbe62301d6b0496da0d10231b753e950c63e03aee745d45", size 
= 6702, upload-time = "2024-01-31T22:43:00.81Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/98/1c/b00940ab9eb8ede7897443b771987f2f4a76f06be02f1b3f01eb7567e24a/pytest_base_url-2.1.0-py3-none-any.whl";,
 hash = 
"sha256:3ad15611778764d451927b2a53240c1a7a591b521ea44cebfe45849d2d2812e6", size 
= 5302, upload-time = "2024-01-31T22:42:58.897Z" },
+]
+
+[[package]]
+name = "pytest-playwright"
+version = "0.7.2"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "playwright" },
+    { name = "pytest" },
+    { name = "pytest-base-url" },
+    { name = "python-slugify" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/e8/6b/913e36aa421b35689ec95ed953ff7e8df3f2ee1c7b8ab2a3f1fd39d95faf/pytest_playwright-0.7.2.tar.gz";,
 hash = 
"sha256:247b61123b28c7e8febb993a187a07e54f14a9aa04edc166f7a976d88f04c770", size 
= 16928, upload-time = "2025-11-24T03:43:22.53Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/76/61/4d333d8354ea2bea2c2f01bad0a4aa3c1262de20e1241f78e73360e9b620/pytest_playwright-0.7.2-py3-none-any.whl";,
 hash = 
"sha256:8084e015b2b3ecff483c2160f1c8219b38b66c0d4578b23c0f700d1b0240ea38", size 
= 16881, upload-time = "2025-11-24T03:43:24.423Z" },
+]
+
 [[package]]
 name = "python-dateutil"
 version = "2.9.0.post0"
@@ -1376,6 +1404,18 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/aa/19/c147f78cc18c8788f54d4a16a22f6c05deba85ead5672d3ddf6dcba5a5fe/python_gnupg-0.5.5-py2.py3-none-any.whl";,
 hash = 
"sha256:51fa7b8831ff0914bc73d74c59b99c613de7247b91294323c39733bb85ac3fc1", size 
= 21916, upload-time = "2025-08-04T19:26:54.307Z" },
 ]
 
+[[package]]
+name = "python-slugify"
+version = "8.0.4"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "text-unidecode" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz";,
 hash = 
"sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size 
= 10921, upload-time = "2024-02-08T18:32:45.488Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl";,
 hash = 
"sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size 
= 10051, upload-time = "2024-02-08T18:32:43.911Z" },
+]
+
 [[package]]
 name = "pyyaml"
 version = "6.0.3"
@@ -1703,6 +1743,15 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/df/cb/e1da7e340586a078404c7e4328bfefc930867ace8a9a55916fd220cf9547/standard_imghdr-3.13.0-py3-none-any.whl";,
 hash = 
"sha256:30a1bff5465605bb496f842a6ac3cc1f2131bf3025b0da28d4877d6d4b7cc8e9", size 
= 4639, upload-time = "2024-10-30T16:01:13.829Z" },
 ]
 
+[[package]]
+name = "text-unidecode"
+version = "1.3"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz";,
 hash = 
"sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size 
= 76885, upload-time = "2019-08-30T21:36:45.405Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl";,
 hash = 
"sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size 
= 78154, upload-time = "2019-08-30T21:37:03.543Z" },
+]
+
 [[package]]
 name = "tooling-trusted-releases"
 version = "0.0.1"
@@ -1758,6 +1807,7 @@ test = [
     { name = "playwright" },
     { name = "pytest" },
     { name = "pytest-asyncio" },
+    { name = "pytest-playwright" },
 ]
 
 [package.metadata]
@@ -1812,6 +1862,7 @@ test = [
     { name = "playwright", specifier = ">=1.51.0" },
     { name = "pytest", specifier = ">=8.0" },
     { name = "pytest-asyncio", specifier = ">=0.24" },
+    { name = "pytest-playwright", specifier = ">=0.7.2" },
 ]
 
 [[package]]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to