perf(testing): share MongoDB across vibetuner_db tests#1726
Merged
Conversation
Move the per-test database to a session-scoped fixture so init_beanie runs index registration once per test session instead of per test. Each test still gets a clean slate via per-collection truncation (setup + teardown), and per-test init_beanie now runs with skip_indexes=True since indexes already exist on the shared DB. Index/uniqueness behavior is preserved because indexes live on the session DB. Per-xdist-worker DB namespacing keeps parallel runs isolated. Validated against radio's full suite: 178s -> 151s (15% faster), all 107 tests passing. Local Mongo via testcontainers covers the new integration tests for cross-test isolation, cleanup, and uniqueness. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
davidpoblador
pushed a commit
that referenced
this pull request
Apr 28, 2026
🤖 I have created a release *beep* *boop* --- ## [10.8.0](v10.7.0...v10.8.0) (2026-04-28) ### Features * add BrandSettings env-var surface for favicon and email branding ([#1720](#1720)) ([3d22717](3d22717)) * i18n primitives for per-tenant locale flows ([#1718](#1718)) ([177fe5e](177fe5e)) ### Bug Fixes * restore gettext plural-form support in lint-po ([#1725](#1725)) ([fe0dacb](fe0dacb)) * **template:** scope babel.cfg python extraction to src/ ([#1722](#1722)) ([b729964](b729964)) * theme default screens with DaisyUI semantic tokens ([#1714](#1714)) ([4467168](4467168)) ### Performance Improvements * **testing:** share MongoDB across vibetuner_db tests ([#1726](#1726)) ([c9064e4](c9064e4)) ### Miscellaneous Chores * **py:** use PEP 639 SPDX license expression ([#1727](#1727)) ([855f9f4](855f9f4)) ### Documentation Updates * **i18n:** clarify locale_names vs language_picker overlap ([#1723](#1723)) ([87733bd](87733bd)) * **template:** document i18n primitives in scaffolded agent rules ([#1724](#1724)) ([27a3b98](27a3b98)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #1721.
vibetuner_dbnow sits on top of a session-scoped MongoDB database. Beanie index registration runs once for the whole test session instead of once per test.init_beanieruns withskip_indexes=Truesince the indexes already live on the shared DB. Uniqueness/index behavior is preserved.PYTEST_XDIST_WORKERso parallel runs don't collide.Validation
AsyncMongoClienthandshake (TCP+TLS+auth ~5-8 RTTs) — pymongo binds the client to its event loop, so reusing the session client would force every test usingvibetuner_dbonto a session-scoped event loop, which is a breaking change for downstream test suites.vibetuner-py/tests/integration/usetestcontainers[mongodb]for a real Dockerised Mongo. They cover: cross-test data isolation, session DB reuse, and persistence of unique-index enforcement across per-test cleanup.Caveats / breaking-change risks
Documented in the fixture docstring and the docs site:
pytest-xdist; otherwise multiple processes pointing at the same Mongo will collide on the session DB.Test plan
uv run python -m pytest tests/unit/test_vibetuner_db_fixture.pyDOCKER_HOST=… uv run python -m pytest tests/integration/test_vibetuner_db_real.pycd /Users/dpoblador/repos/radio && uv run python -m pytest tests/against patchedvibetuner-py🤖 Generated with Claude Code