Files
2meet-data-optimizer/tests/live/README.md
T
wpdev 336664473b
Anti-EAV Lint + Quality Gate / anti-eav-lint (pull_request) Successful in 15s
Tests / PHP Lint (pull_request) Successful in 17s
Tests / Unit Tests (pull_request) Successful in 51s
Tests / Integration Tests (pull_request) Successful in 1m22s
Tests / PHPCS (pull_request) Successful in 1m12s
Tests / PHPStan (pull_request) Successful in 1m10s
fix(2meet-data-optimizer): keep registered fields out of the public listings REST endpoints
- show_in_rest defaulted to true, so GET /wpdo/v1/listings and /listings/{id} (public by design) returned every registered hot / cold field to anonymous visitors — e.g. infocards tmeetic_ig_access_token_enc / _token_expiry / _user_id and WooCommerce _purchase_note (confirmed on dev36)
- Fields are private unless registered with show_in_rest => true; protected (underscore) and credential-like keys (token, secret, password, api key, private key, credential, salt, nonce) are never exposed
- Zone A list path no longer returns whole rows when nothing is public, and filters / orderby accept public columns only
- Version 1.1.1; CHANGELOG, readme
- Verify: unit 690 (+3), integration 525 (+3 private-column tests, RED on 1.1.0), live suite rest 2/2 (RED on 1.1.0), all live 49/49, phpcs 0, stan OK
2026-09-26 22:22:40 +08:00

3.5 KiB
Raw Blame History

Live test suite

Tests that must run inside a real WordPress site, because the stubbed tests/integration bootstrap cannot reproduce:

  • WP core meta flows (update_metadata() reads the old value through get_metadata_raw() before writing — the shadow_read write-loss bug lives there)
  • the SQL that WP_Query actually builds, and hook priorities
  • HivePress / WooCommerce behaviour (pre_get_posts sort clauses, empty-key meta reads, direct-SQL stock updates)

Never run against a production site. Suites create and delete fixtures (tmdo_live_* users, tmdo-live-* terms). Entity modes are overridden in process through pre_option_wpdo_bridge_modes; nothing is written to wpdo_bridge_modes or wpdo_hook_bus_enabled.

The reference site is dev36 (HivePress + Marketplace + WooCommerce), with this plugin symlinked from the plugins-dev worktree while developing.

Run

wp --path=/var/www/Studio/wp-local-dev36 eval-file tests/live/run.php <suite> [<suite> ...]

Exit code 0 when every test passed, 1 otherwise. Output per test:

Status Meaning
PASS / FAIL normal
XFAIL known bug, test marked xfail with the PR that fixes it; not counted as a failure
XPASS an xfail test passed — counted as a failure so the fixing PR removes the marker
SKIP the site does not register the key / taxonomy the test needs

Suites

Suite Covers
shadow_write writes in shadow_read reach native meta (user, term, HivePress listing)
serialized array meta values are stored serialized in flat tables, never "Array"
resync dual_write / shadow_read: flat follows native after every write (4 entities × 2 modes: update, same value, delete, refused writes, stale flat, key rename by meta_id)
router a routed WP_Query returns the same ids, in order, as native (OR, several post types, untyped numeric compares, named orderby, LIKE, keys of two groups, NOT EXISTS with the status/date copy route, meta orderby: HivePress sort shape, named clause, meta_key + meta_value_num); routed SQL has no GROUP BY
rest anonymous GET of the public listings endpoints returns no protected or credential-like field (1.1.1)
zero_side_effect zone tables that were never created are never queried on save / delete

Tools (tools/)

Benchmark and data-flow helpers used for the 2026-09-26 dev36 integration test. Output files go to the current directory (qbench) or $TMDO_LIVE_OUT (default /tmp, run_batch.sh), never into the repo.

Tool Use
seed.php wp eval-file seed.php <vendors|listings|requests|reviews|products|orders|terms> <n> [tag] — seed through real HivePress / WC APIs
run_batch.sh run_batch.sh <tag> [divisor] — parallel seeding batch (TMDO_LIVE_WP_PATH, TMDO_LIVE_OUT)
clone.sql bench only: clone hp_listing rows to reach large scale (sed "s/__K__/<n>/" clone.sql | wp db query)
checker.php wp eval-file checker.php [entity] — native vs flat consistency per registered key (SQL only)
qbench.php / qdiff.php run 16 WP_Query shapes, then diff two runs (native vs routed): result sets, order, latency, SQL errors
mut.php data-flow mutations through HivePress models, WC CRUD and core APIs; prints native / flat / API values
fe.sh + zz-s36-probe.php front-end search probe (TMDO_LIVE_URL). Copy the probe into wp-content/mu-plugins/ only for the run and remove it afterwards; it only answers requests carrying X-S36-Probe: 1