Skip to content

MPT-19910: add e2e tests for currency endpoints#275

Merged
albertsola merged 2 commits into
mainfrom
MPT-19910/add-currency-endpoints-e2e-tests
Apr 2, 2026
Merged

MPT-19910: add e2e tests for currency endpoints#275
albertsola merged 2 commits into
mainfrom
MPT-19910/add-currency-endpoints-e2e-tests

Conversation

@albertsola

@albertsola albertsola commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds end-to-end tests for the CurrenciesService and AsyncCurrenciesService covering all operations exposed by the service.

Changes

  • tests/e2e/exchange/__init__.py — new module init
  • tests/e2e/exchange/currencies/__init__.py — new module init
  • tests/e2e/exchange/currencies/conftest.py — fixtures for service, currency ID, currency data, and created currency (with icon upload + teardown)
  • tests/e2e/exchange/currencies/test_sync_currencies.py — sync e2e tests
  • tests/e2e/exchange/currencies/test_async_currencies.py — async e2e tests
  • e2e_config.test.json — added exchange.currency.id seeded value

Tests covered

Test Sync Async
create
get
get not found (404)
update
delete
filter + iterate
download icon

Closes MPT-19910

  • Add comprehensive end-to-end tests for CurrenciesService and AsyncCurrenciesService covering create, retrieve, update, delete, filter/iterate, and icon download operations
  • Add pytest fixtures in tests/e2e/exchange/currencies/conftest.py providing sync/async service instances, deterministic currency test data, logo file fixture, and lifecycle management (create + teardown with delete; teardown ignores MPTAPIError)
  • Add synchronous e2e tests in tests/e2e/exchange/currencies/test_sync_currencies.py validating CRUD, 404 handling, filtering with iteration, and icon download (asserting FileModel)
  • Add asynchronous e2e tests in tests/e2e/exchange/currencies/test_async_currencies.py mirroring sync tests with async/await patterns; module-level flaky mark applied
  • Update e2e_config.test.json to add exchange.currency.id (CUR-6831), add helpdesk channel/chat IDs, and reorder related config entries for logical grouping

@albertsola albertsola requested a review from a team as a code owner April 2, 2026 15:47
@albertsola albertsola changed the title MPT-19910: add e2e tests for currency endpoints MPT-19910: add e2e tests for currency endpoints (WIP) Apr 2, 2026
@coderabbitai

coderabbitai Bot commented Apr 2, 2026

Copy link
Copy Markdown

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: db365f58-5a4c-4100-bbe0-6c0038f19e50

📥 Commits

Reviewing files that changed from the base of the PR and between 45d37c8 and 6fdb67a.

📒 Files selected for processing (6)
  • e2e_config.test.json
  • tests/e2e/exchange/__init__.py
  • tests/e2e/exchange/currencies/__init__.py
  • tests/e2e/exchange/currencies/conftest.py
  • tests/e2e/exchange/currencies/test_async_currencies.py
  • tests/e2e/exchange/currencies/test_sync_currencies.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • e2e_config.test.json
  • tests/e2e/exchange/currencies/test_sync_currencies.py
  • tests/e2e/exchange/currencies/test_async_currencies.py

📝 Walkthrough

Walkthrough

Added exchange.currency.id to test config and reordered some ID entries; introduced E2E fixtures and resource-management teardown for exchange currencies; added synchronous and asynchronous E2E test suites covering CRUD, filtering, error cases, and icon download.

Changes

Cohort / File(s) Summary
Configuration
e2e_config.test.json
Inserted exchange.currency.id and added helpdesk.channel.id, helpdesk.chat.id; reordered several existing ID entries (commerce, notifications, commerce.user). No ID values changed otherwise.
Test Fixtures
tests/e2e/exchange/currencies/conftest.py
New pytest fixtures: currencies_service, async_currencies_service, session currency_id (reads exchange.currency.id), deterministic currency_data(short_uuid), and lifecycle fixtures created_currency / async_created_currency with teardown that catches MPTAPIError.
Test Suites
tests/e2e/exchange/currencies/test_sync_currencies.py, tests/e2e/exchange/currencies/test_async_currencies.py
New sync and async E2E tests (file-level flaky mark) for create/get/update/delete, 404 handling, filter iteration assertions, and icon download; assertions include field values and FileModel type checks.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Jira Issue Key In Title ✅ Passed The PR title contains exactly one Jira issue key (MPT-19910) in the correct format, properly positioned at the beginning.
Test Coverage Required ✅ Passed PR modifies only test and configuration files; no source code in mpt_api_client/ directory was changed. PR summary confirms no exported/public code entities were altered.
Single Commit Required ✅ Passed The pull request contains exactly one commit (6fdb67a) with all changes for adding E2E tests for currency endpoints, including e2e_config.test.json updates and new test fixtures in tests/e2e/exchange/currencies/.

✏️ 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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/e2e/exchange/currencies/conftest.py`:
- Around line 42-45: The teardown currently catches all MPTAPIError when calling
currencies_service.delete(currency.id) which hides real failures; change the
handler to only suppress expected not-found errors by checking the error's
status/code (e.g., error.status == 404 or error.code == "not_found") and
silently ignore those, but for any other MPTAPIError re-raise or log and raise
so real teardown failures surface; apply the same change to the other similar
block that calls currencies_service.delete.

In `@tests/e2e/exchange/currencies/test_async_currencies.py`:
- Around line 29-36: The test_update_currency may send an empty file because
logo_fd was already consumed by the initial create call; before calling
async_currencies_service.update in test_update_currency, reset the file-like
object's cursor (e.g., call logo_fd.seek(0)) so the uploaded file is read from
the start when async_currencies_service.update(...) is invoked; update
references: test_update_currency, async_currencies_service.update, and
async_created_currency.create.

In `@tests/e2e/exchange/currencies/test_sync_currencies.py`:
- Around line 29-33: The test test_update_currency uses logo_fd previously
consumed during creation, so reset the file pointer before reuse: ensure logo_fd
is rewound (e.g., call logo_fd.seek(0) or equivalent) right before invoking
currencies_service.update(created_currency.id, update_data, file=logo_fd) so the
upload reads the file from the beginning; check logo_fd supports seek to avoid
flaky EOF uploads.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 461d270a-eb76-4c9f-982b-6e0345f9febf

📥 Commits

Reviewing files that changed from the base of the PR and between 5340a75 and d89775a.

📒 Files selected for processing (6)
  • e2e_config.test.json
  • tests/e2e/exchange/__init__.py
  • tests/e2e/exchange/currencies/__init__.py
  • tests/e2e/exchange/currencies/conftest.py
  • tests/e2e/exchange/currencies/test_async_currencies.py
  • tests/e2e/exchange/currencies/test_sync_currencies.py

Comment thread tests/e2e/exchange/currencies/test_async_currencies.py
Comment thread tests/e2e/exchange/currencies/test_sync_currencies.py
@albertsola albertsola force-pushed the MPT-19910/add-currency-endpoints-e2e-tests branch 2 times, most recently from bb0d8b0 to 45d37c8 Compare April 2, 2026 16:11
@albertsola albertsola force-pushed the MPT-19910/add-currency-endpoints-e2e-tests branch from 45d37c8 to 6fdb67a Compare April 2, 2026 16:18

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (2)
tests/e2e/exchange/currencies/conftest.py (2)

40-43: ⚠️ Potential issue | 🟠 Major

Teardown still swallows all API errors (duplicate of previous review).

The teardown continues to catch all MPTAPIError exceptions without discriminating. Only 404 (resource already deleted) should be suppressed; other failures (permissions, network issues, etc.) should surface to prevent resource leaks and mask real problems.

🛡️ Proposed fix to check error status
     try:
         currencies_service.delete(currency.id)
     except MPTAPIError as error:
-        print(f"TEARDOWN - Unable to delete currency {currency.id}: {error.title}")  # noqa: WPS421
+        if error.status != 404:
+            raise
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/exchange/currencies/conftest.py` around lines 40 - 43, The teardown
currently swallows all MPTAPIError exceptions in the call to
currencies_service.delete(currency.id); modify the except block for MPTAPIError
to inspect the HTTP status on the exception (e.g., error.status or
error.status_code) and only suppress/log and continue when it equals 404
(resource already gone), otherwise re-raise the exception so
permission/network/errors surface and don't get masked.

52-55: ⚠️ Potential issue | 🟠 Major

Async teardown has the same error suppression issue (duplicate).

Same as the sync version: all MPTAPIError exceptions are caught without checking the status. Only 404 should be ignored; other errors must surface.

🛡️ Proposed fix to check error status
     try:
         await async_currencies_service.delete(currency.id)
     except MPTAPIError as error:
-        print(f"TEARDOWN - Unable to delete currency {currency.id}: {error.title}")  # noqa: WPS421
+        if error.status != 404:
+            raise
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/exchange/currencies/conftest.py` around lines 52 - 55, The async
teardown is suppressing all MPTAPIError exceptions—update the exception handler
around async_currencies_service.delete(currency.id) so it only ignores the error
when the MPTAPIError indicates a 404 (e.g., check error.status == 404 or
equivalent property on MPTAPIError) and re-raise or let other errors surface;
keep the existing log for the 404 case but do not swallow non-404 errors.
🧹 Nitpick comments (1)
tests/e2e/exchange/currencies/conftest.py (1)

23-31: Currency code generation is functional but has minor collision risk.

The digit-to-alpha translation for generating unique currency codes works correctly. Since short_uuid is hex (0-9a-f), the first three characters could theoretically collide (e.g., "abc" → "ABC", "afc" → "AFC" differ by only one char). For sequential E2E tests this is likely acceptable, but be aware of potential collisions if tests run concurrently.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/exchange/currencies/conftest.py` around lines 23 - 31, The currency
code generation in fixture currency_data uses only the first three chars of
short_uuid and a digit->alpha map (digit_to_alpha) which can lead to collisions
in concurrent runs; update currency_data to produce a more unique code by
expanding the input (e.g., use the first 4–6 characters of short_uuid or append
a short random/timestamp suffix) and keep the same translation logic
(digit_to_alpha) and .upper() call so existing downstream expectations remain
valid; ensure the resulting code still meets any length/format constraints
expected by the system.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/e2e/exchange/currencies/conftest.py`:
- Line 43: Remove the inline "# noqa: WPS421" from the print statement in
tests/e2e/exchange/currencies/conftest.py (the print(f"TEARDOWN - Unable to
delete currency {currency.id}: {error.title}") line) and add a per-file-ignores
entry in pyproject.toml under [tool.flake8] to suppress WPS421 for this file (or
for the broader tests/e2e/**/conftest.py pattern if preferred); update the
per-file-ignores list to include the path and WPS421 so the inline suppression
can be deleted.

---

Duplicate comments:
In `@tests/e2e/exchange/currencies/conftest.py`:
- Around line 40-43: The teardown currently swallows all MPTAPIError exceptions
in the call to currencies_service.delete(currency.id); modify the except block
for MPTAPIError to inspect the HTTP status on the exception (e.g., error.status
or error.status_code) and only suppress/log and continue when it equals 404
(resource already gone), otherwise re-raise the exception so
permission/network/errors surface and don't get masked.
- Around line 52-55: The async teardown is suppressing all MPTAPIError
exceptions—update the exception handler around
async_currencies_service.delete(currency.id) so it only ignores the error when
the MPTAPIError indicates a 404 (e.g., check error.status == 404 or equivalent
property on MPTAPIError) and re-raise or let other errors surface; keep the
existing log for the 404 case but do not swallow non-404 errors.

---

Nitpick comments:
In `@tests/e2e/exchange/currencies/conftest.py`:
- Around line 23-31: The currency code generation in fixture currency_data uses
only the first three chars of short_uuid and a digit->alpha map (digit_to_alpha)
which can lead to collisions in concurrent runs; update currency_data to produce
a more unique code by expanding the input (e.g., use the first 4–6 characters of
short_uuid or append a short random/timestamp suffix) and keep the same
translation logic (digit_to_alpha) and .upper() call so existing downstream
expectations remain valid; ensure the resulting code still meets any
length/format constraints expected by the system.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: e744d9b9-f101-4864-b678-bf5a0a182f4b

📥 Commits

Reviewing files that changed from the base of the PR and between d89775a and 45d37c8.

📒 Files selected for processing (1)
  • tests/e2e/exchange/currencies/conftest.py

Comment thread tests/e2e/exchange/currencies/conftest.py
@albertsola albertsola changed the title MPT-19910: add e2e tests for currency endpoints (WIP) MPT-19910: add e2e tests for currency endpoints Apr 2, 2026
@sonarqubecloud

sonarqubecloud Bot commented Apr 2, 2026

Copy link
Copy Markdown

@albertsola albertsola merged commit 170e5c0 into main Apr 2, 2026
4 checks passed
@albertsola albertsola deleted the MPT-19910/add-currency-endpoints-e2e-tests branch April 2, 2026 18:00
d3rky added a commit that referenced this pull request May 20, 2026
Bumps the python-development group with 4 updates:
[mypy](https://github.com/python/mypy),
[pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures),
[ruff](https://github.com/astral-sh/ruff) and
[types-python-dateutil](https://github.com/python/typeshed).

Updates `mypy` from 2.0.0 to 2.1.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python/mypy/blob/master/CHANGELOG.md">mypy's
changelog</a>.</em></p>
<blockquote>
<h1>Mypy Release Notes</h1>
<h2>Next Release</h2>
<h2>Mypy 2.1</h2>
<p>We’ve just uploaded mypy 2.1.0 to the Python Package Index (<a
href="https://pypi.org/project/mypy/">PyPI</a>).
Mypy is a static type checker for Python. This release includes new
features, performance
improvements and bug fixes. You can install it as follows:</p>
<pre><code>python3 -m pip install -U mypy
</code></pre>
<p>You can read the full documentation for this release on <a
href="http://mypy.readthedocs.io">Read the Docs</a>.</p>
<h3>librt.vecs: Fast Growable Array Type for Mypyc</h3>
<p>The new <code>librt.vecs</code> module provides an efficient growable
array type <code>vec</code> that is
optimized for mypyc use. It provides fast, packed arrays with integer
and floating point
value types, which can be <strong>several times faster</strong> than
<code>list</code>, and tens of times faster
than <code>array.array</code> in code compiled using mypyc. It also
supports nested <code>vec</code> objects and
non-value-type items, such as <code>vec[vec[str]]</code>.</p>
<p>Refer to the <a
href="https://mypyc.readthedocs.io/en/latest/librt_vecs.html">documentation</a>
for
the details.</p>
<p>Contributed by Jukka Lehtosalo.</p>
<h3>librt.random: Fast Pseudo-Random Number Generation</h3>
<p>The new <code>librt.random</code> module provides fast pseudo-random
number generation that is
optimized for code compiled using mypyc. It can be 3x to 10x faster than
the stdlib
<code>random</code> module in compiled code.</p>
<p>Refer to the <a
href="https://mypyc.readthedocs.io/en/latest/librt_random.html">documentation</a>
for
the details.</p>
<p>Contributed by Jukka Lehtosalo (PR <a
href="https://redirect.github.com/python/mypy/pull/21433">21433</a>).</p>
<h3>Mypyc Improvements</h3>
<ul>
<li>Make compilation order with multiple files consistent (Piotr
Sawicki, PR <a
href="https://redirect.github.com/python/mypy/pull/21419">21419</a>)</li>
<li>Fix crash on accessing <code>StopAsyncIteration</code> (Piotr
Sawicki, PR <a
href="https://redirect.github.com/python/mypy/pull/21406">21406</a>)</li>
<li>Fix incremental compilation with <code>separate</code> flag
(Vaggelis Danias, PR <a
href="https://redirect.github.com/python/mypy/pull/21299">21299</a>)</li>
</ul>
<h3>Fixes to Crashes</h3>
<ul>
<li>Fix crash on partial type with <code>--allow-redefinition</code> and
<code>global</code> declaration (Jukka Lehtosalo, PR <a
href="https://redirect.github.com/python/mypy/pull/21428">21428</a>)</li>
<li>Fix broken awaitable generator patching (Ivan Levkivskyi, PR <a
href="https://redirect.github.com/python/mypy/pull/21435">21435</a>)</li>
</ul>
<h3>Changes to Messages</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/python/mypy/commit/c1c336d7e34eb313080c79b156518c58d27c7234"><code>c1c336d</code></a>
Remove +dev from version</li>
<li><a
href="https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7"><code>74df14b</code></a>
Add changelog for mypy 2.1 (<a
href="https://redirect.github.com/python/mypy/issues/21464">#21464</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff"><code>022d9bc</code></a>
Revert &quot;TypeForm: Enable by default (<a
href="https://redirect.github.com/python/mypy/issues/21262">#21262</a>)&quot;</li>
<li><a
href="https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c"><code>8826288</code></a>
[mypyc] Document librt.random (<a
href="https://redirect.github.com/python/mypy/issues/21463">#21463</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96"><code>3f4067b</code></a>
Bump librt version to 0.11.0 (<a
href="https://redirect.github.com/python/mypy/issues/21458">#21458</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e"><code>2b1eb58</code></a>
[mypyc] Enable incremental self-compilation (<a
href="https://redirect.github.com/python/mypy/issues/21369">#21369</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc"><code>8152f4a</code></a>
Respect file config comments for stale modules (<a
href="https://redirect.github.com/python/mypy/issues/21444">#21444</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92"><code>116d60b</code></a>
Fix nondeterminism from nonassociativity of overload joins (<a
href="https://redirect.github.com/python/mypy/issues/21455">#21455</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210"><code>6c4af8e</code></a>
Fix function call message change for small number of args (<a
href="https://redirect.github.com/python/mypy/issues/21432">#21432</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800"><code>4b8fdca</code></a>
[mypyc] Add librt.random module (<a
href="https://redirect.github.com/python/mypy/issues/21433">#21433</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/python/mypy/compare/v2.0.0...v2.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-rerunfailures` from 16.1 to 16.2
<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.2 (2026-05-13)</h2>
<p>Breaking changes
++++++++++++++++</p>
<ul>
<li>Drop support for pytest 8.0. Minimum pytest version is now 8.1.</li>
</ul>
<p>Features
++++++++</p>
<ul>
<li>Add support for pytest 9.0.</li>
</ul>
<p>Bug fixes
+++++++++</p>
<ul>
<li>
<p>Fix missing teardown for session and module scoped fixtures when
fixture teardown fails.
Fixes
<code>[#314](pytest-dev/pytest-rerunfailures#314)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/314&gt;</code>_.</p>
</li>
<li>
<p>Clear fixture finalizers when removing cached results from failed
fixtures
to fix compatibility with pytest &gt;= 9, which asserts that
<code>_finalizers</code> is
empty before executing a fixture.
Fixes
<code>[#323](pytest-dev/pytest-rerunfailures#323)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/323&gt;</code>_.</p>
</li>
<li>
<p>Accept exception classes (not only regex strings) in the
<code>only_rerun</code> and
<code>rerun_except</code> marker keyword arguments instead of crashing
with an
internal error.
Fixes
<code>[#275](pytest-dev/pytest-rerunfailures#275)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/275&gt;</code>_.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/88a84d8471219ae517dfd3752a181b22e51a2b8c"><code>88a84d8</code></a>
Preparing release 16.2</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/5e0ad6a3080d778f2d3de8975aceafed0c843b12"><code>5e0ad6a</code></a>
fix: accept exception classes in only_rerun and rerun_except markers (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/327">#327</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/928aa2bb654b18157e6614c15f22091e9997d540"><code>928aa2b</code></a>
Update minimum pytest version to 8.1 and add support for pytest 9.0 (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/325">#325</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/b53ef720219427c569bddee7e37d92cc3423e2c9"><code>b53ef72</code></a>
Fix support for pytest-main. (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/324">#324</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/d9ef70e5451f604dcc764861f4b0a65dc9dfd202"><code>d9ef70e</code></a>
Preserve session and module teardown when fixture teardown fails (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/319">#319</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/a22edc3de88eeb17f3dcdf482b3f5a13ea9af874"><code>a22edc3</code></a>
Bump actions/cache from 4 to 5 in the actions group (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/317">#317</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/365dc54ba3069f55a870cda2c3e1e3c33c68f326"><code>365dc54</code></a>
Bump actions/checkout from 5 to 6 in the actions group (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/316">#316</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/a484d569b55875c827f091c5f17b9087ab9169d9"><code>a484d56</code></a>
Update to current versions of pre-commit hooks. (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/312">#312</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/3447ea8684e5b74656f0a2d6b3de34b046bab0ce"><code>3447ea8</code></a>
Back to development: 16.2</li>
<li>See full diff in <a
href="https://github.com/pytest-dev/pytest-rerunfailures/compare/16.1...16.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruff` from 0.15.12 to 0.15.13
<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.15.13</h2>
<h2>Release Notes</h2>
<p>Released on 2026-05-14.</p>
<h3>Preview features</h3>
<ul>
<li>Add a rule to flag lazy imports that are eagerly evaluated (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25016">#25016</a>)</li>
<li>[<code>pylint</code>] Standardize diagnostic message
(<code>PLR0914</code>, <code>PLR0917</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24996">#24996</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix <code>F811</code> false positive for class methods (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24933">#24933</a>)</li>
<li>Fix setting selection for multi-folder workspace (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24819">#24819</a>)</li>
<li>[<code>eradicate</code>] Fix false positive for lines with leading
whitespace (<code>ERA001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25122">#25122</a>)</li>
<li>[<code>flake8-pyi</code>] Fix false positive for f-string debug
specifier (<code>PYI016</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24098">#24098</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Always include panic payload in panic diagnostic message (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24873">#24873</a>)</li>
<li>Restrict <code>PYI034</code> for in-place operations to enclosing
class (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24511">#24511</a>)</li>
<li>Improve error message for parameters that are declared
<code>global</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24902">#24902</a>)</li>
<li>Update known stdlib (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25103">#25103</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s
for literal known modules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25123">#25123</a>)</li>
</ul>
<h3>CLI</h3>
<ul>
<li>Add TOML examples to <code>--config</code> help text (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25013">#25013</a>)</li>
<li>Colorize ruff check 'All checks passed' (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25085">#25085</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Increase max allowed value of <code>line-length</code> setting (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24962">#24962</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add <code>D203</code> to rules that conflict with the formatter (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25044">#25044</a>)</li>
<li>Clarify <code>COM819</code> and formatter interaction (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25045">#25045</a>)</li>
<li>Clarify that <code>NotImplemented</code> is a value, not an
exception (<code>F901</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25054">#25054</a>)</li>
<li>Update number of lint rules supported (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24942">#24942</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Simplify the playground's markdown template (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24924">#24924</a>)</li>
</ul>
<h3>Contributors</h3>
<!-- 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.15.13</h2>
<p>Released on 2026-05-14.</p>
<h3>Preview features</h3>
<ul>
<li>Add a rule to flag lazy imports that are eagerly evaluated (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25016">#25016</a>)</li>
<li>[<code>pylint</code>] Standardize diagnostic message
(<code>PLR0914</code>, <code>PLR0917</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24996">#24996</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix <code>F811</code> false positive for class methods (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24933">#24933</a>)</li>
<li>Fix setting selection for multi-folder workspace (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24819">#24819</a>)</li>
<li>[<code>eradicate</code>] Fix false positive for lines with leading
whitespace (<code>ERA001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25122">#25122</a>)</li>
<li>[<code>flake8-pyi</code>] Fix false positive for f-string debug
specifier (<code>PYI016</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24098">#24098</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Always include panic payload in panic diagnostic message (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24873">#24873</a>)</li>
<li>Restrict <code>PYI034</code> for in-place operations to enclosing
class (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24511">#24511</a>)</li>
<li>Improve error message for parameters that are declared
<code>global</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24902">#24902</a>)</li>
<li>Update known stdlib (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25103">#25103</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s
for literal known modules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25123">#25123</a>)</li>
</ul>
<h3>CLI</h3>
<ul>
<li>Add TOML examples to <code>--config</code> help text (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25013">#25013</a>)</li>
<li>Colorize ruff check 'All checks passed' (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25085">#25085</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Increase max allowed value of <code>line-length</code> setting (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24962">#24962</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add <code>D203</code> to rules that conflict with the formatter (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25044">#25044</a>)</li>
<li>Clarify <code>COM819</code> and formatter interaction (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25045">#25045</a>)</li>
<li>Clarify that <code>NotImplemented</code> is a value, not an
exception (<code>F901</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25054">#25054</a>)</li>
<li>Update number of lint rules supported (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24942">#24942</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Simplify the playground's markdown template (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24924">#24924</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</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/2afb467ce397e4a89c13a0a814c62cfecb0e9e49"><code>2afb467</code></a>
Bump 0.15.13 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25157">#25157</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/300879600fa3af7cde1e675c63de6ad9d0797d1b"><code>3008796</code></a>
[ty] classify TypeVar semantic tokens as type parameters (<a
href="https://redirect.github.com/astral-sh/ruff/issues/24891">#24891</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/79470e31877acb6074f3bbff2a49e508822ae4e8"><code>79470e3</code></a>
[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s for
literal known modules (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25123">#25123</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/2522549901d50f18775999f0fb802b19229417f0"><code>2522549</code></a>
Remove shellcheck from prek (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25154">#25154</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/7db7170020f539d6d2bc01dbd0b0c09fab91dc06"><code>7db7170</code></a>
[ty] Support TypedDict key completions in incomplete, anonymous contexts
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/25">#25</a>...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/bb3dd535f1c5a83e2e56ac93a771fadbeeceebd0"><code>bb3dd53</code></a>
[ty] Run full iteration analysis on narrowed typevars (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25143">#25143</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/828cdb7732efcb16a53f4ee5f011cf653b834d1a"><code>828cdb7</code></a>
[ty] Isolate file-watching test environment (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25151">#25151</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/89e1d8670ea4d3af60c8143ee552dc750200718d"><code>89e1d86</code></a>
[ty] Preserve TypedDict keys through dict unpacking (<a
href="https://redirect.github.com/astral-sh/ruff/issues/24523">#24523</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/86f3064d6fffa5697d174f26b840bd6857b381da"><code>86f3064</code></a>
[ty] Avoid accessing <code>args[0]</code> for <code>static_assert</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/25149">#25149</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/ed819f947dc27e36eac8bb3134153c4668d76a3a"><code>ed819f9</code></a>
[ty] Treat custom enum <code>__new__</code> values as dynamic (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25136">#25136</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.15.12...0.15.13">compare
view</a></li>
</ul>
</details>
<br />

Updates `types-python-dateutil` from 2.9.0.20260508 to 2.9.0.20260518
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/python/typeshed/commits">compare view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>
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