Add a CI smoke test for the self-locating bootstrap in an isolated child process

Open
#57 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
68/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
php
Domain
ci-cd, testing-qa

Research direction

Start with src/Unit/bootstrap.php and src/Integration/bootstrap.php, then inspect the existing GitHub Actions workflows. Run a smoke test without defining the WPMEDIA_PHPUNIT_* or WP_TESTS_DIR constants, requiring a bootstrap and checking both derived constants. Done means CI runs it on every push, a second bootstrap invocation is safe, and regressions fail loudly.

Written by the indexing model from the issue text.

Description

enhancement Made by AI

🤖 AI-generated — created by an automated pipeline. Review before acting on this.

Context
PR #55 (issue #52) made src/Unit/bootstrap.php and src/Integration/bootstrap.php self-locating: when WPMEDIA_PHPUNIT_ROOT_DIR is not already defined, each bootstrap now require_onces src/BootstrapManager.php and calls BootstrapManager::setupConstants('unit'|'integration') to derive the two WPMEDIA_PHPUNIT_* constants. This is the exact code path that runs when PHPUnit re-executes the bootstrap standalone in an isolated @runInSeparateProcess child.

However, the package's own test suite cannot exercise this new branch because its bootstraps go through Tests/{Unit,Integration}/init-tests.php, which pre-defines the constants first. This means the self-derivation branch is validated today only by manual smoke testing, not by CI. A regression (e.g., a wrong relative path in the require_once, or a change to getRootDir()/setupConstants()) could silently break isolated-child consumers without any CI signal.

Dependencies

  • Issue #52 / PR #55 (the self-locating changes themselves) — should already be merged

What needs to be done
Add a small CI smoke test script (e.g., a standalone PHP script or harness in a dedicated .github/workflows/ step) that:

  1. Does NOT pre-define WPMEDIA_PHPUNIT_ROOT_DIR, WPMEDIA_PHPUNIT_ROOT_TEST_DIR, or WP_TESTS_DIR
  2. Requires the self-locating guard logic from src/Unit/bootstrap.php (or src/Integration/bootstrap.php)
  3. Validates the self-derivation behavior
  4. Consider also testing a synthetic vendor/wp-media/phpunit consumer layout to mirror the real isolated-child scenario

Acceptance Criteria

  • CI step (or new workflow) runs the smoke test on every push
  • Smoke test confirms both WPMEDIA_PHPUNIT_ROOT_DIR and WPMEDIA_PHPUNIT_ROOT_TEST_DIR are defined after bootstrap require
  • No fatal "Undefined constant" errors occur during the smoke test
  • A second invocation of the bootstrap short-circuits (no double-define errors under convertWarningsToExceptions)
  • CI fails loudly if the self-locating behavior regresses

Additional information
This hardens the #52 behavior so it cannot silently regress. It is not a blocker but strongly improves confidence in the isolated-process bootstrap contract for downstream consumers.

Contributes to #30. Follow-up to #52 / PR #55.

Dominant language
PHP
Stars
4
Forks
2
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from wp-media/phpunit

All issues in wp-media/phpunit

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.