Skip to content

MPT-22435 derive product-document e2e fixtures from a created product - #351

Merged
jentyk merged 2 commits into
mainfrom
claude/nifty-sammet-44b0e2
Jun 19, 2026
Merged

jentyk merged 2 commits into
mainfrom
claude/nifty-sammet-44b0e2

Conversation

@jentyk

@jentyk jentyk commented Jun 19, 2026 •

Copy link
Copy Markdown
Member

What

The catalog product-document e2e tests now create their own product per test instead of reusing the hardcoded seeded product (catalog.product.id / PRD-7255-3950).

  • Hoist created_product / async_created_product into tests/e2e/catalog/product/conftest.py so the documents/ subpackage can use them.
  • vendor_document_service / async_vendor_document_service now build off created_product.id / async_created_product.id.
  • Rework the get/download tests to create their own document (dropping the seeded document_id); the download assertion now checks the uploaded file name (empty.pdf).
  • Consolidate the duplicated async document-service fixture (removing the previously unused conftest fixture).

Why

The seeded product is shared across runs. Documents accumulated on it over time until it reached the server-side per-product maximum, after which document creation failed at fixture setup:

mpt_api_client.exceptions.MPTAPIError: 400 Bad Request -
Cannot create additional documents because the maximum number of documents has been reached.
POST /public/v1/catalog/products/PRD-7255-3950/documents

Creating a fresh product per test starts each test from zero documents, eliminating the limit failure and removing the dependency on shared seeded state. Same pattern as #339 (order asset fixtures derived from a created order).

Fixes MPT-22435.

Reviewer notes

  • The server preserves the uploaded filename, so the download tests assert the exact uploaded name (empty.pdf) rather than the old seeded pdf - empty.pdf.
  • components / fixVersions are required on the linked Jira bug; set to Extension Python SDK / v6.

Verification

  • Scoped e2e run against the live API: 32 passed (tests/e2e/catalog/product/documents + the two product test modules).
  • make check (ruff format/check, flake8, mypy, uv lock) clean.
  • Unit suite: 2310 passed.

🤖 Generated with Claude Code

Closes MPT-22435

Release Notes

  • Refactored catalog product-document e2e tests to create a fresh product (and associated documents) per test instead of reusing a hardcoded seeded product, preventing document accumulation and max-document fixture setup failures
  • Hoisted created_product and async_created_product fixtures to tests/e2e/catalog/product/conftest.py so document subpackage tests can reuse dynamically created products
  • Updated vendor_document_service and async_vendor_document_service fixtures to derive service context from the dynamically created product IDs
  • Reworked document get/download tests to create their own documents (removing dependence on a seeded document_id) and updated download assertions to expect empty.pdf
  • Consolidated async document-service fixture logic by centralizing it in the shared product conftest
  • Refactored sync/async document lifecycle tests to use shared e2e helpers from tests/e2e/helper.py, removing hand-rolled lifecycle/teardown and standardizing assertions
  • Extended shared helper fixture creation functions with an optional upload_file parameter to support file-backed document creation
  • Cleaned up local product test fixtures by removing redundant fixture implementations now provided by shared conftest

…PT-22435)

The catalog product-document e2e tests created documents against a
hardcoded seeded product (catalog.product.id / PRD-7255-3950). That shared
product accumulated documents across runs until it reached the server-side
per-product maximum, after which document creation failed at fixture setup
with "400 ... maximum number of documents has been reached", turning the
suite red.

Point the document-service fixtures at a freshly created product per test:
- Hoist created_product / async_created_product into the product conftest so
  the documents subpackage can use them.
- vendor_document_service / async_vendor_document_service now build off
  created_product.id / async_created_product.id.
- Rework the get/download tests to create their own document (dropping the
  seeded document_id) and assert the uploaded file name.
- Consolidate the duplicated async document-service fixture.

Verified: scoped e2e run green (32 passed), make check clean, unit suite
2310 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jentyk
jentyk requested a review from a team as a code owner June 19, 2026 09:10
@jentyk
jentyk requested review from d3rky and svazquezco June 19, 2026 09:10
@github-actions

github-actions Bot commented Jun 19, 2026 •

Copy link
Copy Markdown
Warnings
⚠️

This PR contains 2 commits.

Please squash them into a single commit to keep the git history clean and easy to follow.

Multiple commits are acceptable only in the following cases:

  1. One commit is a technical refactoring, and another introduces business logic changes.
  2. You are doing a complex multi-step refactoring (although in this case we still recommend splitting it into separate PRs).

✅ Found Jira issue key in the title: MPT-22435

Generated by 🚫 dangerJS against 3fee2a1

@coderabbitai

coderabbitai Bot commented Jun 19, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 2376eddb-b371-40f4-a524-e0696eeee54a

📥 Commits

Reviewing files that changed from the base of the PR and between 2b04870 and 3fee2a1.

📒 Files selected for processing (3)
  • tests/e2e/catalog/product/documents/test_async_document.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
  • tests/e2e/helper.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • softwareone-platform/mpt-extension-skills (manual)
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/e2e/catalog/product/documents/test_async_document.py
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🧰 Additional context used
📓 Path-based instructions (2)
**/*

⚙️ CodeRabbit configuration file

**/*: For each subsequent commit in this PR, explicitly verify if previous review comments have been resolved

Files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
**

⚙️ CodeRabbit configuration file

**: # AGENTS.md

Working protocol for any task in this repository:

  1. Identify the task type and select only the local repository files that are relevant to that task.
  2. Read only those relevant local files before making changes.
  3. If any selected local file references shared standards or shared operational guidance that are relevant to the same task, read those shared documents too before proceeding.
  4. Treat repository-local documents as repository-specific additions, restrictions, or overrides to shared guidance.
  5. If a repository-local rule conflicts with a shared rule, the local repository rule takes precedence.

Python API client for the SoftwareONE Marketplace Platform (MPT) API. Provides synchronous
(MPTClient) and asynchronous (AsyncMPTClient) clients built on httpx, with typed
resource services, mixin-based HTTP operations, and an RQL query builder.

Documentation Reading Order

When applicable, read the repository documentation in this order:

  1. README.md — repository overview, quick start, and documentation map
  2. docs/usage.md — installation, configuration, Python usage examples, and supported Docker-based commands
  3. docs/architecture.md — layered architecture, directory structure, and key abstractions
  4. docs/local-development.md — Docker-only setup and execution model
  5. docs/testing.md — repository-specific testing strategy and command mapping
  6. docs/contributing.md — repository-specific workflow and links to shared standards
  7. docs/documentation.md — repository-specific documentation rules
  8. docs/unit_tests.md — unit test structure and guidance
  9. docs/e2e_tests.md — end-to-end test setup and execution

Then inspect the code paths relevant to the task:

  • mpt_api_client/mpt_client.py — public sync and async client entry points
  • mpt_api_client/http/ — HTTP clients, services, query state, and reusable mixins
  • mpt_api_client/resources/ — domain resource groups such as catalog, commerce, billing, and integrati...

Files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
🧠 Learnings (7)
📚 Learning: 2025-12-12T15:02:20.732Z
Learnt from: robcsegal
Repo: softwareone-platform/mpt-api-python-client PR: 160
File: tests/e2e/commerce/agreement/attachment/test_async_agreement_attachment.py:55-58
Timestamp: 2025-12-12T15:02:20.732Z
Learning: In pytest with pytest-asyncio, if a test function uses async fixtures but contains no await, declare the test function as def (synchronous) instead of async def. Pytest-asyncio will resolve the async fixtures automatically; this avoids linter complaints about unnecessary async functions. This pattern applies to any test file under the tests/ directory that uses such fixtures.

Applied to files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
📚 Learning: 2026-04-02T09:35:03.825Z
Learnt from: jentyk
Repo: softwareone-platform/mpt-api-python-client PR: 269
File: tests/e2e/helpdesk/chats/links/test_sync_links.py:18-18
Timestamp: 2026-04-02T09:35:03.825Z
Learning: In this repository’s test suite, flake8-aaa/flake8-aaa codes use short two-digit suffixes (e.g., `# noqa: AAA01`), not three-digit variants like `AAA001`. If you see `# noqa: AAA01` in a test file (e.g., when the Act step is performed via a pytest fixture rather than inline code), treat it as valid and intentional—do not flag it as an invalid/no-longer-needed noqa, and do not suggest removing it even if Ruff reports `RUF102`, since `AAA` is configured under `tool.ruff.lint.external` and these noqa directives are expected to be preserved.

Applied to files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
📚 Learning: 2026-01-08T08:34:05.465Z
Learnt from: albertsola
Repo: softwareone-platform/mpt-api-python-client PR: 183
File: tests/e2e/catalog/price_lists/conftest.py:29-30
Timestamp: 2026-01-08T08:34:05.465Z
Learning: In end-to-end tests (e.g., tests/e2e/...), reuse existing API resources for read-only operations and safe mutations to speed up test execution. Reserve isolated fixtures (e.g., created_price_list) for destructive tests that require per-test creation and cleanup. Ensure tests document when a fixture creates/destroys data and clearly indicate which operations are destructive, so tests stay fast and properly isolated.

Applied to files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
📚 Learning: 2026-01-08T23:38:19.565Z
Learnt from: robcsegal
Repo: softwareone-platform/mpt-api-python-client PR: 186
File: tests/e2e/billing/ledger/charge/test_sync_ledger_charge.py:33-39
Timestamp: 2026-01-08T23:38:19.565Z
Learning: In Python e2e tests under tests/e2e, hardcoded external IDs (e.g., INV12345) are intentional because they come from seeded test data. Ensure the test data seeds consistently include these IDs; if seeds change, update tests accordingly. Prefer using a named constant for such IDs (e.g., INV_EXTERNAL_ID) and document the dependency on seed data to avoid brittle tests.

Applied to files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
📚 Learning: 2026-02-02T13:05:41.144Z
Learnt from: albertsola
Repo: softwareone-platform/mpt-api-python-client PR: 201
File: tests/unit/resources/accounts/mixins/test_activatable_mixin.py:132-139
Timestamp: 2026-02-02T13:05:41.144Z
Learning: In the mpt-api-python-client repository, tests are configured to use pytest asyncio mode auto, which auto-detects async test functions and runs them without requiring pytest.mark.asyncio. Reviewers should rely on this behavior for all Python test files under tests/, and avoid adding unnecessary asyncio markers in async tests. Ensure test files in tests/ adhere to this convention unless a specific test requires an explicit marker.

Applied to files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
📚 Learning: 2026-04-16T13:00:41.320Z
Learnt from: jentyk
Repo: softwareone-platform/mpt-api-python-client PR: 303
File: tests/e2e/helpdesk/chats/participants/conftest.py:25-31
Timestamp: 2026-04-16T13:00:41.320Z
Learning: In mpt-api-python-client, do not treat list-wrapped arguments to CreateMixin.create() / AsyncCreateMixin.create() as an error. ResourceData is intentionally typed as Resource | list[Resource] (see mpt_api_client/models/model.py), so create() should accept either a single resource dict or a list of resource dicts (e.g., create([chat_participant_data])) to perform a batch create and return a ModelCollection. Therefore, reviewers should only flag list-wrapped create() arguments when there is evidence they violate the expected API contract beyond this documented batch-create behavior.

Applied to files:

  • tests/e2e/helper.py
  • tests/e2e/catalog/product/documents/test_sync_document.py
📚 Learning: 2026-01-08T08:34:19.306Z
Learnt from: albertsola
Repo: softwareone-platform/mpt-api-python-client PR: 183
File: tests/e2e/catalog/price_lists/items/conftest.py:26-27
Timestamp: 2026-01-08T08:34:19.306Z
Learning: In tests/e2e/catalog/price_lists/items/conftest.py, the price_list_item fixture is seeded to always provide an item. Do not add StopIteration handling in this test fixture since absence of items is not expected; treat StopIteration as an upstream test setup failure rather than a recoverable condition.

Applied to files:

  • tests/e2e/catalog/product/documents/test_sync_document.py
🔇 Additional comments (5)
tests/e2e/helper.py (1)

36-45: LGTM!

Also applies to: 49-58

tests/e2e/catalog/product/documents/test_sync_document.py (4)

13-19: LGTM!


22-26: LGTM!


39-45: LGTM!


69-72: LGTM!


📝 Walkthrough

Walkthrough

created_product and async_created_product fixtures are extracted from individual product test files into a shared tests/e2e/catalog/product/conftest.py. Test helpers in helper.py are enhanced to accept optional file uploads. The document conftest replaces document_id with document_data and wires service fixtures to use created-product ids. All sync and async document tests are updated to use the shared service fixtures and created_document_from_file instead of standalone ids, with download filename assertions corrected to "empty.pdf".

Changes

Product fixture centralization and helper enhancement

Layer / File(s) Summary
Shared product fixtures and enhanced helper utilities
tests/e2e/catalog/product/conftest.py, tests/e2e/catalog/product/test_sync_product.py, tests/e2e/catalog/product/test_async_product.py, tests/e2e/helper.py
created_product and async_created_product fixtures are added to the shared conftest with create/yield/delete teardown and MPTAPIError handling. Duplicate local fixture definitions are removed from both product test files. async_create_fixture_resource_and_delete and create_fixture_resource_and_delete helper functions are enhanced to accept an optional upload_file parameter and conditionally pass it to service.create(..., file=upload_file).
Document conftest: wire to created product fixtures
tests/e2e/catalog/product/documents/conftest.py
document_id fixture is replaced by document_data returning a full payload dictionary. vendor_document_service and async_vendor_document_service fixtures now accept created_product and async_created_product parameters and derive product id from those fixtures using .id property.
Sync document tests refactored to use shared fixtures
tests/e2e/catalog/product/documents/test_sync_document.py
Document creation fixtures now use create_fixture_resource_and_delete helper. test_update_document delegates to assert_update_resource helper. test_get_document and test_download_document use created_document_from_file.id instead of document_id; expected filename updated to "empty.pdf". test_filter_documents uses assert_service_filter_with_iterate helper. test_review_and_publish_document calls review via vendor_document_service and derives ops_service from created_product.id.
Async document tests refactored to use shared fixtures
tests/e2e/catalog/product/documents/test_async_document.py
Document creation fixtures now use async_create_fixture_resource_and_delete helper. All async document CRUD tests rewired from async_document_service to async_vendor_document_service, using created_document_from_file_async.id for get/download operations; expected filename updated to "empty.pdf". test_filter_documents_async uses assert_async_service_filter_with_iterate helper. test_review_and_publish_document_async calls review via async_vendor_document_service and derives ops_service from async_created_product.id. Not-found and delete tests updated to use async_vendor_document_service.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Documentation Up To Date ✅ Passed This PR is a test-only refactoring that changes e2e test fixture strategy from shared seeded products to fresh per-test products, fixing server-side document limits. While it modifies test strategy...

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@albertsola albertsola left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have a set of helpers to simplify all that code

Comment on lines 10 to 39
@@ -43,37 +38,47 @@ def test_create_from_link_async(created_document_from_link_async, pdf_url, docum
assert created_document_from_link_async.description == document_data["description"]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have helpers that does this for you:

check async_create_fixture_resource_and_delete and create_fixture_resource_and_delete

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 3fee2a1 — both fixtures (sync + async) now use create_fixture_resource_and_delete / async_create_fixture_resource_and_delete. I extended those helpers with an optional upload_file param so the file-backed document fixture can use them too (backward compatible: it is only forwarded to create() when provided, so existing non-file callers are unchanged). 🤖 Generated by AI

Comment on lines +68 to 75
async def test_iterate_documents_async(
async_vendor_document_service, created_document_from_file_async
):
documents = [doc async for doc in async_vendor_document_service.iterate()]

result = any(doc.id == created_document_from_file_async.id for doc in documents)

assert result is True

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check helper: assert_service_filter_with_iterate and assert_async_service_filter_with_iterate

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 3fee2a1 — test_filter_documents / test_filter_documents_async now use assert_service_filter_with_iterate / assert_async_service_filter_with_iterate. 🤖 Generated by AI

Comment on lines 41 to 50
async def test_update_document_async(
async_vendor_document_service, created_document_from_file_async
):
update_data = {"name": "Updated e2e test document - please delete"}

result = await async_document_service.update(created_document_from_file_async.id, update_data)
result = await async_vendor_document_service.update(
created_document_from_file_async.id, update_data
)

assert result.name == update_data["name"]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check helper: assert_update_resource and assert_async_update_resource

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 3fee2a1 — test_update_document / test_update_document_async now use assert_update_resource / assert_async_update_resource. 🤖 Generated by AI

Address review feedback on #351: replace hand-rolled fixture/teardown and
assertion boilerplate with the shared tests/e2e/helper.py helpers.

- created_document_from_file/_url (sync + async) now use
  create_fixture_resource_and_delete / async variant.
- Extend those helpers with an optional upload_file so file-backed document
  creation can use them (backward compatible: forwarded only when provided).
- test_update_document(_async) -> assert_update_resource / async variant.
- test_filter_documents(_async) -> assert_service_filter_with_iterate / async.

Verified: scoped e2e green (20 passed), make check clean, unit suite 2310 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jentyk
jentyk requested a review from albertsola June 19, 2026 10:01
@sonarqubecloud

Copy link
Copy Markdown

@jentyk
jentyk merged commit a1bcd9d into main Jun 19, 2026
6 checks passed
@jentyk
jentyk deleted the claude/nifty-sammet-44b0e2 branch June 19, 2026 10:09
svazquezco added a commit that referenced this pull request Sep 14, 2026
…with 4 updates (#415)

Bumps the python-development group with 4 updates in the / directory:
[ipython](https://github.com/ipython/ipython),
[pytest-randomly](https://github.com/pytest-dev/pytest-randomly),
[pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures)
and [ruff](https://github.com/astral-sh/ruff).

Updates `ipython` from 9.16.1 to 9.17.1
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ipython/ipython/commit/48ff02957a9a0cdb30a63e15f6493e583e9ec54b"><code>48ff029</code></a>
release 9.17.1</li>
<li><a
href="https://github.com/ipython/ipython/commit/ed47107a5218bfc6419fe5f2a79ebda22a77d612"><code>ed47107</code></a>
Have builin-lazy magics have a lower priority than registered on.</li>
<li><a
href="https://github.com/ipython/ipython/commit/19f9ae0a863c21cff52fa07c74b18fc5b482d9c3"><code>19f9ae0</code></a>
back to dev</li>
<li><a
href="https://github.com/ipython/ipython/commit/3278f6f5b71b3152e084478cac8fa20405c49b5a"><code>3278f6f</code></a>
release 9.17.0</li>
<li><a
href="https://github.com/ipython/ipython/commit/40cfb95e634b8807ff66dac1a269610794f7da66"><code>40cfb95</code></a>
Update what's new for 9.17</li>
<li><a
href="https://github.com/ipython/ipython/commit/2ed42ae6a01e77c8a11ead7b168ceb920f4cb563"><code>2ed42ae</code></a>
Fix RST formatting in display_functions.py</li>
<li><a
href="https://github.com/ipython/ipython/commit/a487a06bb1193f4d166210153e7068af694ec2ae"><code>a487a06</code></a>
change emojis</li>
<li><a
href="https://github.com/ipython/ipython/commit/7f0ee55684f08f5af18190aa58d4bb3018fb20d2"><code>7f0ee55</code></a>
Declare IPython's built-in magics lazily</li>
<li><a
href="https://github.com/ipython/ipython/commit/ee0239282e9439ea181a723187ede0cc55475414"><code>ee02392</code></a>
Only run the psutil-free kitty detection test where /proc exists</li>
<li><a
href="https://github.com/ipython/ipython/commit/af386cf710668a2f81abdae3621a8c2fe7be3494"><code>af386cf</code></a>
Annotate <code>_find_dunder</code> and put measured numbers in the
whatsnew</li>
<li>Additional commits viewable in <a
href="https://github.com/ipython/ipython/compare/9.16.1...9.17.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-randomly` from 4.1.0 to 5.0.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-randomly/blob/main/CHANGELOG.rst">pytest-randomly's
changelog</a>.</em></p>
<blockquote>
<h2>5.0.0 (2026-09-01)</h2>
<ul>
<li>
<p>Support Python 3.15.</p>
</li>
<li>
<p>Shuffle tests in a wrapper around the
<code>pytest_collection_modifyitems</code> hook, guaranteeing that the
shuffle runs before all other plugins’ implementations of the hook.</p>
<p>Previously, pytest-randomly shuffled in a plain <code>tryfirst</code>
hook implementation.
When another plugin also implemented the hook with
<code>tryfirst</code>, as pytest-django does, whichever plugin pytest
happened to register later ran first.
Registration order comes from package metadata on disk, which can differ
between seemingly identical environments — even two containers built
from the same <code>Dockerfile</code>, or the same virtual environment
after reinstalling a package.
As a result, the same seed could yield different test orders in
different environments.
Worse, in environments where pytest-randomly ended up shuffling last, it
silently destroyed the other plugin’s ordering — for pytest-django, the
grouping of database tests that mirrors Django’s test runner
(non-transactional database tests, then transactional ones, then the
rest).</p>
<p>Now the shuffle always runs first, and plugins that group tests with
a stable sort apply their grouping on top of the shuffled order, so the
final order is reproducible from the seed alone.
In environments that previously hit the reversed hook order, upgrading
changes the test order for a given seed — restoring both reproducibility
and other plugins’ grouping.</p>
<p><code>PR
[#746](pytest-dev/pytest-randomly#746)
&lt;https://github.com/pytest-dev/pytest-randomly/pull/746&gt;</code><strong>.
Thanks to milssky for the report in <code>Issue
[#701](pytest-dev/pytest-randomly#701)
&lt;https://github.com/pytest-dev/pytest-randomly/issues/701&gt;</code></strong>.</p>
</li>
<li>
<p>Require pytest 8+, the first version to require a version of pluggy
that supports hook wrappers, as used by the above fix.</p>
<p><code>PR
[#746](pytest-dev/pytest-randomly#746)
&lt;https://github.com/pytest-dev/pytest-randomly/pull/746&gt;</code>__.</p>
</li>
<li>
<p>Reset <code>Polyfactory
&lt;https://polyfactory.litestar.dev/&gt;</code>__\’s default random
state at the start of every test, if it is installed.</p>
<p>Thanks to Rahul Kumar in <code>PR
[#735](pytest-dev/pytest-randomly#735)
&lt;https://github.com/pytest-dev/pytest-randomly/issues/735&gt;</code>__.</p>
</li>
<li>
<p>Switch package build backend from setuptools to <code>uv_build
&lt;https://docs.astral.sh/uv/concepts/build-backend/&gt;</code>__.
This makes builds with uv about nine times faster, since uv runs the
backend natively, without creating a build environment or spawning a
Python process.
Additionally, source distributions no longer include test files, which
setuptools previously included incompletely, missing the files needed to
actually run them.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/89ddfb1025cf15a81eb3defec7554740f32bcbe3"><code>89ddfb1</code></a>
Version 5.0.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/0d00951e3fd85145567adfa2b638c7987f3e33ef"><code>0d00951</code></a>
Shuffle before other plugins' collection hooks (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/746">#746</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/817091daca7b0540edb45da652ffc84a766724a1"><code>817091d</code></a>
Upgrade dependencies (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/745">#745</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/42a2066ee95bdb1c606945436d7170ef3a6376c5"><code>42a2066</code></a>
Fix podcast link in README (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/740">#740</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/c2a001d37d14abc95940c923f730a07ccf87b4e2"><code>c2a001d</code></a>
Reset Polyfactory's default random state on each test (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/735">#735</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/cc4762bcb547a455b670b812ea362c483a31e7ef"><code>cc4762b</code></a>
Upgrade dependencies (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/744">#744</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/94aba4ad675e863b65f024ab924688e595fa8a3f"><code>94aba4a</code></a>
Upgrade dependencies (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/743">#743</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/c9140eff32cadcdc14d82a944e63d3ad1b4dbe8c"><code>c9140ef</code></a>
Support Python 3.15 (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/741">#741</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/15f531e2a7c1c88f27febc9c92966472d5bb18fc"><code>15f531e</code></a>
Switch build backend to uv_build (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/739">#739</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-randomly/commit/79eee6c2f5475911d178b1a42b649182cbfc5e9f"><code>79eee6c</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-randomly/issues/738">#738</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-randomly/compare/4.1.0...5.0.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-rerunfailures` from 16.6 to 16.6.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst">pytest-rerunfailures's
changelog</a>.</em></p>
<blockquote>
<h2>16.6.1 (2026-09-03)</h2>
<p>Bug Fixes
+++++++++</p>
<ul>
<li>Ensure teardown reports are passed to
<code>pytest_runtest_logreport</code> for rerun
attempts.
(<code>[#237](pytest-dev/pytest-rerunfailures#237)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/237&gt;</code>_)</li>
<li>Prevent superseded built-in subtest failures from remaining in the
final test
result when rerunning tests with pytest-xdist.
(<code>[#350](pytest-dev/pytest-rerunfailures#350)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/350&gt;</code>_)</li>
<li>Restore module, class, and session scoped fixture teardown when a
<code>flaky</code>
marker condition is falsy.
(<code>[#351](pytest-dev/pytest-rerunfailures#351)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/351&gt;</code>_)</li>
<li>Restore module, class, and session scoped fixture teardown when an
error
raised during teardown rules out a re-run.
(<code>[#356](pytest-dev/pytest-rerunfailures#356)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/356&gt;</code>_)</li>
<li>Keep module, class, and session scoped fixtures alive across re-runs
of a
test whose call phase failed through subtests only.
(<code>[#357](pytest-dev/pytest-rerunfailures#357)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/357&gt;</code>_)</li>
<li>Authenticate xdist StatusDB connections with a per-session token.
(<code>[#358](pytest-dev/pytest-rerunfailures#358)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/358&gt;</code>_)</li>
<li>Ensure negative rerun counts do not skip the initial test execution.
(<code>[#359](pytest-dev/pytest-rerunfailures#359)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/359&gt;</code>_)</li>
</ul>
<p>Misc
++++</p>
<ul>
<li>Replace deprecated <code>Config.getvalue()</code> calls with
<code>Config.getoption()</code>.

(<code>[#345](pytest-dev/pytest-rerunfailures#345)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/345&gt;</code>_)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/dad07a7f360e96c0cbbc4301e36cdc439eb9a36b"><code>dad07a7</code></a>
Preparing release 16.6.1</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/968fb6c1d3982ea35f041ecb62024e79016324bb"><code>968fb6c</code></a>
Prevent negative reruns from skipping initial execution (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/360">#360</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/367df9044cbcf3bbf153269bdab995e1f9eb113c"><code>367df90</code></a>
Keep higher-scoped fixtures alive across re-runs of failed subtests (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/357">#357</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/69ac0a7e66f1f55c1e94a2f237e2659250795ef7"><code>69ac0a7</code></a>
Authenticate xdist StatusDB connections (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/358">#358</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/20decd37b22736b1a92ecb7a6ed598e7fd70cff1"><code>20decd3</code></a>
Restore higher-scoped teardown when a teardown error rules out a re-run
(<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/356">#356</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/84af73d63c1ac3eeeeba73a5e3ac91a44078c7bb"><code>84af73d</code></a>
Fix subtest rerun reporting with xdist (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/352">#352</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/d784cdda0b946c8788939255b6b72df67da82a19"><code>d784cdd</code></a>
Test with pytest-xdist on CI (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/354">#354</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/9f85e063dac5387cb0b17ffcb8aadeca545292a8"><code>9f85e06</code></a>
Restore higher-scoped teardown when a flaky condition is falsy (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/351">#351</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/eab650fb2a2665d61539aafda81ae549440c2834"><code>eab650f</code></a>
Test rerun-except for setup errors (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/349">#349</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/0b0843a83fb7e79c37e626092a77c5f7cd49f4df"><code>0b0843a</code></a>
Fix only_rerun marker precedence test (<a
href="https://github.com/proxy/redirect.github.com/pytest-dev/pytest-rerunfailures/issues/348">#348</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-rerunfailures/compare/16.6...16.6.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruff` from 0.16.5 to 0.16.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.16.7</h2>
<h2>Release Notes</h2>
<p>Released on 2026-09-10.</p>
<h3>Preview features</h3>
<ul>
<li>[<code>ruff</code>] Add rule for default values on method receivers
(<code>RUF077</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/26700">#26700</a>)</li>
<li>[<code>ruff</code>] Recognize <code>re.prefixmatch</code>
(<code>RUF039</code>, <code>RUF055</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28311">#28311</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Alternate nested quotes inside format spec interpolations (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28259">#28259</a>)</li>
<li>[<code>flake8-implicit-str-concat</code>] Mark fix unsafe when it
creates a docstring (<code>ISC003</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/27981">#27981</a>)</li>
<li>[<code>flake8-tidy-imports</code>] Skip fixes for multi-member
imports (<code>TID254</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/26584">#26584</a>)</li>
<li>[<code>pylint</code>] Gate <code>ImportCycleError</code> on Python
3.15 (<code>PLW0133</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28310">#28310</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Correct <code>D211</code> and <code>D203</code> rule conflict
diagnostic (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28444">#28444</a>)</li>
<li>Recognize <code>slice</code> and <code>frozendict</code> generics
(<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28477">#28477</a>)</li>
<li>Stop defining <code>__cached__</code> for Python 3.15 (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28476">#28476</a>)</li>
<li>[<code>pyupgrade</code>] Stop recommending removed
<code>typing.no_type_check_decorator</code> (<code>UP035</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28475">#28475</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Reuse parser name lookups when interning (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28399">#28399</a>)</li>
<li>Speed up inherited configuration resolution (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28299">#28299</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix <code>line-length</code> path in <code>--config</code> example
(<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28392">#28392</a>)</li>
<li>Remove the &quot;Who’s Using Ruff?&quot; list (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28455">#28455</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Embed archive checksums in the shell installer (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28281">#28281</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/The-Compiler"><code>@​The-Compiler</code></a></li>
<li><a
href="https://github.com/mdiniz97"><code>@​mdiniz97</code></a></li>
<li><a href="https://github.com/zsol"><code>@​zsol</code></a></li>
<li><a
href="https://github.com/gorewilliams"><code>@​gorewilliams</code></a></li>
<li><a
href="https://github.com/RafaelJohn9"><code>@​RafaelJohn9</code></a></li>
<li><a href="https://github.com/qatcod"><code>@​qatcod</code></a></li>
<li><a href="https://github.com/zanieb"><code>@​zanieb</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/charliermarsh"><code>@​charliermarsh</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's
changelog</a>.</em></p>
<blockquote>
<h2>0.16.7</h2>
<p>Released on 2026-09-10.</p>
<h3>Preview features</h3>
<ul>
<li>[<code>ruff</code>] Add rule for default values on method receivers
(<code>RUF077</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/26700">#26700</a>)</li>
<li>[<code>ruff</code>] Recognize <code>re.prefixmatch</code>
(<code>RUF039</code>, <code>RUF055</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28311">#28311</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Alternate nested quotes inside format spec interpolations (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28259">#28259</a>)</li>
<li>[<code>flake8-implicit-str-concat</code>] Mark fix unsafe when it
creates a docstring (<code>ISC003</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/27981">#27981</a>)</li>
<li>[<code>flake8-tidy-imports</code>] Skip fixes for multi-member
imports (<code>TID254</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/26584">#26584</a>)</li>
<li>[<code>pylint</code>] Gate <code>ImportCycleError</code> on Python
3.15 (<code>PLW0133</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28310">#28310</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Correct <code>D211</code> and <code>D203</code> rule conflict
diagnostic (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28444">#28444</a>)</li>
<li>Recognize <code>slice</code> and <code>frozendict</code> generics
(<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28477">#28477</a>)</li>
<li>Stop defining <code>__cached__</code> for Python 3.15 (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28476">#28476</a>)</li>
<li>[<code>pyupgrade</code>] Stop recommending removed
<code>typing.no_type_check_decorator</code> (<code>UP035</code>) (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28475">#28475</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Reuse parser name lookups when interning (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28399">#28399</a>)</li>
<li>Speed up inherited configuration resolution (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28299">#28299</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix <code>line-length</code> path in <code>--config</code> example
(<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28392">#28392</a>)</li>
<li>Remove the &quot;Who’s Using Ruff?&quot; list (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28455">#28455</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Embed archive checksums in the shell installer (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/pull/28281">#28281</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/The-Compiler"><code>@​The-Compiler</code></a></li>
<li><a
href="https://github.com/mdiniz97"><code>@​mdiniz97</code></a></li>
<li><a href="https://github.com/zsol"><code>@​zsol</code></a></li>
<li><a
href="https://github.com/gorewilliams"><code>@​gorewilliams</code></a></li>
<li><a
href="https://github.com/RafaelJohn9"><code>@​RafaelJohn9</code></a></li>
<li><a href="https://github.com/qatcod"><code>@​qatcod</code></a></li>
<li><a href="https://github.com/zanieb"><code>@​zanieb</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/charliermarsh"><code>@​charliermarsh</code></a></li>
<li><a
href="https://github.com/nightt5879"><code>@​nightt5879</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/ruff/commit/b5dba861cc38e3f7fb4524c9ceba3e01a474ea13"><code>b5dba86</code></a>
Bump version to 0.16.7 (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28496">#28496</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/5992d0504697d86565d8fc3a4d8245a5f4047d24"><code>5992d05</code></a>
Install rustfmt before linting releases (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28495">#28495</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/1713a1f4325494d883a080d590a25a1946f399e8"><code>1713a1f</code></a>
ensure prepare release changes pass prek (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28488">#28488</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/18cdbb4f3d14058794420e758864795f55336334"><code>18cdbb4</code></a>
use scoped token for release workflow (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28484">#28484</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/c3813a501faf887fd01948c98bb8d58ad26488bd"><code>c3813a5</code></a>
add a workflow for preparing releases (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28486">#28486</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/00948c00a671b81f5358af9f038436bcbb993b38"><code>00948c0</code></a>
Remove the &quot;Who’s Using Ruff?&quot; list (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28455">#28455</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/86a2eba7b48e3c10386f7ab8a5425c7275d2b427"><code>86a2eba</code></a>
[<code>pyupgrade</code>] Stop recommending removed
<code>typing.no_type_check_decorator</code> (`UP...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/609e184aa35f0034b7ef63e3e04327081c484af6"><code>609e184</code></a>
Stop defining <code>__cached__</code> for Python 3.15 (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28476">#28476</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/859ff2f01670c43ffff1ea597c8a2e375ada0fbe"><code>859ff2f</code></a>
[ty] Track symlinked directory status in listings (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28482">#28482</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/77f653825800ddaf3bc221ae6db49a500e1002d5"><code>77f6538</code></a>
Use paid GitHub-hosted runners for Linux (<a
href="https://github.com/proxy/redirect.github.com/astral-sh/ruff/issues/28478">#28478</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.16.5...0.16.7">compare
view</a></li>
</ul>
</details>
<br />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants