From b93ac8fa1f2af912def1216ffc267fc1eb319eca Mon Sep 17 00:00:00 2001 From: Julien Date: Mon, 9 Sep 2024 21:38:53 +0200 Subject: [PATCH 1/9] feat: add support for postgres17rc1 --- .../docker/docker-compose.postgres.yml | 8 +++++ src/pytest_databases/docker/postgres.py | 31 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/pytest_databases/docker/docker-compose.postgres.yml b/src/pytest_databases/docker/docker-compose.postgres.yml index 596d7d0..bc3bace 100644 --- a/src/pytest_databases/docker/docker-compose.postgres.yml +++ b/src/pytest_databases/docker/docker-compose.postgres.yml @@ -39,6 +39,14 @@ services: - "${POSTGRES16_PORT:-5427}:5432" # use a non-standard port here environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret} + postgres17: + networks: + - default + image: postgres:17rc1 + ports: + - "${POSTGRES17_PORT:-5428}:5432" # use a non-standard port here + environment: + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret} networks: default: driver: bridge diff --git a/src/pytest_databases/docker/postgres.py b/src/pytest_databases/docker/postgres.py index b2c4264..947d8be 100644 --- a/src/pytest_databases/docker/postgres.py +++ b/src/pytest_databases/docker/postgres.py @@ -93,6 +93,10 @@ def postgres15_port() -> int: def postgres16_port() -> int: return 5427 +@pytest.fixture(scope="session") +def postgres17_port() -> int: + return 5428 + @pytest.fixture(scope="session") def default_postgres_service_name() -> str: @@ -249,6 +253,33 @@ def postgres16_service( return postgres_docker_services +@pytest.fixture(autouse=False, scope="session") +def postgres17_service( + postgres_docker_services: DockerServiceRegistry, + postgres_docker_compose_files: list[Path], + postgres17_port: int, + postgres_database: str, + postgres_user: str, + postgres_password: str, +) -> Generator[DockerServiceRegistry, None, None]: + os.environ["POSTGRES_PASSWORD"] = postgres_password + os.environ["POSTGRES_USER"] = postgres_user + os.environ["POSTGRES_DATABASE"] = postgres_database + os.environ["POSTGRES17_PORT"] = str(postgres17_port) + postgres_docker_services.start( + "postgres17", + docker_compose_files=postgres_docker_compose_files, + timeout=45, + pause=1, + check=postgres_responsive, + port=postgres17_port, + database=postgres_database, + user=postgres_user, + password=postgres_password, + ) + yield postgres_docker_services + + # alias to the latest @pytest.fixture(autouse=False, scope="session") def postgres_service( From 87829749f9475dd41430c3bb1be2546b66b4921a Mon Sep 17 00:00:00 2001 From: Julien Date: Mon, 9 Sep 2024 22:10:11 +0200 Subject: [PATCH 2/9] test: add test for postgres17 --- tests/docker/test_postgres.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/docker/test_postgres.py b/tests/docker/test_postgres.py index 74ec326..a71a95a 100644 --- a/tests/docker/test_postgres.py +++ b/tests/docker/test_postgres.py @@ -87,6 +87,16 @@ def test_postgres_16_config( assert postgres_user == "postgres" assert postgres_password == "super-secret" +def test_postgres_17_config( + postgres17_port: int, + postgres_database: str, + postgres_user: str, + postgres_password: str, +) -> None: + assert postgres17_port == 5428 + assert postgres_database == "postgres" + assert postgres_user == "postgres" + assert postgres_password == "super-secret" def test_postgres_services( postgres_docker_ip: str, @@ -195,6 +205,29 @@ def test_postgres_16_services( ) assert ping +def test_postgres_17_services( + postgres_docker_ip: str, + postgres17_service: DockerServiceRegistry, + postgres17_port: int, + postgres_database: str, + postgres_user: str, + postgres_password: str, +) -> None: + ping = postgres_responsive( + postgres_docker_ip, + port=postgres17_port, + database=postgres_database, + user=postgres_user, + password=postgres_password, + ) + assert ping + +def test_postgres_17_services_after_start( + postgres17_startup_connection: psycopg.Connection, +) -> None: + postgres17_startup_connection.execute("CREATE TABLE if not exists simple_table as SELECT 1") + result = postgres17_startup_connection.execute("select * from simple_table").fetchone() + assert bool(result is not None and result[0] == 1) def test_postgres_16_services_after_start( postgres16_startup_connection: psycopg.Connection, From 390702b9686b0ef2929f4cbe613bf40f4d1611a2 Mon Sep 17 00:00:00 2001 From: Julien Date: Fri, 27 Sep 2024 08:33:18 +0200 Subject: [PATCH 3/9] chore: replace postgres rc1 image by final version --- src/pytest_databases/docker/docker-compose.postgres.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pytest_databases/docker/docker-compose.postgres.yml b/src/pytest_databases/docker/docker-compose.postgres.yml index bc3bace..edab03e 100644 --- a/src/pytest_databases/docker/docker-compose.postgres.yml +++ b/src/pytest_databases/docker/docker-compose.postgres.yml @@ -42,7 +42,7 @@ services: postgres17: networks: - default - image: postgres:17rc1 + image: postgres:17 ports: - "${POSTGRES17_PORT:-5428}:5432" # use a non-standard port here environment: From 3e90a51f05fbc2aac0ea1bafdd5a1e1c1a6c4f1b Mon Sep 17 00:00:00 2001 From: Julien Date: Fri, 27 Sep 2024 08:34:02 +0200 Subject: [PATCH 4/9] chore: update README to include postgres17 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44fe7a1..42562bf 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ It is designed to offer pre-configured testing setups for many different types a `pytest-databases` currently utilizes `docker compose` (or the legacy `docker-compose`) commands to manage the startup and shutdown of each database service. The following databases are currently available: -- **Postgres**: Version 12, 13, 14, 15, and 16 are available +- **Postgres**: Version 12, 13, 14, 15, 16 and 17 are available - **MySQL**: Version 5.6, 5.7 and 8 are available - **Oracle**: Version 18c XE and 23C Free are available - **SQL Server**: Version 2022 is available From fac125bc13d53fcaa155cb9d6ac2e12f72ef8ed0 Mon Sep 17 00:00:00 2001 From: Julien Date: Fri, 27 Sep 2024 08:35:14 +0200 Subject: [PATCH 5/9] feat: modified default postgres version used from 16 to 17 --- tests/docker/test_postgres.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/docker/test_postgres.py b/tests/docker/test_postgres.py index a71a95a..be983e9 100644 --- a/tests/docker/test_postgres.py +++ b/tests/docker/test_postgres.py @@ -21,8 +21,8 @@ def test_postgres_default_config( postgres_user: str, postgres_password: str, ) -> None: - assert default_postgres_service_name == "postgres16" - assert postgres_port == 5427 + assert default_postgres_service_name == "postgres17" + assert postgres_port == 5428 assert postgres_database == "postgres" assert postgres_user == "postgres" assert postgres_password == "super-secret" From e299f153af42991fe963ca5e87e46b10849e369f Mon Sep 17 00:00:00 2001 From: Julien Date: Fri, 27 Sep 2024 08:39:22 +0200 Subject: [PATCH 6/9] chore(docs): add uv installation --- docs/index.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index 9609856..9bfd667 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -20,9 +20,17 @@ Installing ``pytest-databases`` is as easy as calling your favorite Python packa python3 -m pip install pytest-databases - .. tab-item:: pipx + .. tab-item:: uv :sync: key2 + .. code-block:: bash + :caption: Using `uv `_ + + uv add pytest-databases + + .. tab-item:: pipx + :sync: key3 + .. code-block:: bash :caption: Using `pipx `_ From 0d74444f5d3956bd09031a9994409e861d097d36 Mon Sep 17 00:00:00 2001 From: Julien Date: Fri, 27 Sep 2024 08:45:28 +0200 Subject: [PATCH 7/9] fix: default postgres version --- src/pytest_databases/docker/postgres.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pytest_databases/docker/postgres.py b/src/pytest_databases/docker/postgres.py index 947d8be..2ff5dc5 100644 --- a/src/pytest_databases/docker/postgres.py +++ b/src/pytest_databases/docker/postgres.py @@ -100,7 +100,7 @@ def postgres17_port() -> int: @pytest.fixture(scope="session") def default_postgres_service_name() -> str: - return "postgres16" + return "postgres17" @pytest.fixture(scope="session") From 856d446809d2a9c42503039efd950ecf54462d2b Mon Sep 17 00:00:00 2001 From: Cody Fincher Date: Sun, 20 Oct 2024 02:04:49 +0000 Subject: [PATCH 8/9] fix: set default port --- src/pytest_databases/docker/postgres.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pytest_databases/docker/postgres.py b/src/pytest_databases/docker/postgres.py index 2ff5dc5..6c53414 100644 --- a/src/pytest_databases/docker/postgres.py +++ b/src/pytest_databases/docker/postgres.py @@ -104,8 +104,8 @@ def default_postgres_service_name() -> str: @pytest.fixture(scope="session") -def postgres_port(postgres16_port: int) -> int: - return postgres16_port +def postgres_port(postgres17_port: int) -> int: + return postgres17_port @pytest.fixture(scope="session") From 9c19784944249d38c8ca92540f84a40c0c702f25 Mon Sep 17 00:00:00 2001 From: Cody Fincher Date: Sun, 20 Oct 2024 02:12:05 +0000 Subject: [PATCH 9/9] fix: add pg 17 startup fixture --- src/pytest_databases/docker/postgres.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/pytest_databases/docker/postgres.py b/src/pytest_databases/docker/postgres.py index 6c53414..7469964 100644 --- a/src/pytest_databases/docker/postgres.py +++ b/src/pytest_databases/docker/postgres.py @@ -329,6 +329,25 @@ def postgres_startup_connection( ) as conn: yield conn +@pytest.fixture(autouse=False, scope="session") +def postgres17_startup_connection( + postgres17_service: DockerServiceRegistry, + postgres_docker_ip: str, + postgres17_port: int, + postgres_database: str, + postgres_user: str, + postgres_password: str, +) -> Generator[psycopg.Connection, None, None]: + with psycopg.connect( + _make_connection_string( + host=postgres_docker_ip, + port=postgres17_port, + user=postgres_user, + password=postgres_password, + database=postgres_database, + ), + ) as conn: + yield conn @pytest.fixture(autouse=False, scope="session") def postgres16_startup_connection(