Skip to content

testing(e2e): Transport fallback chain REST→AJAX→bypass and ad-blocker simulation #200

@parhumm

Description

@parhumm

Summary

E2E tests for the REST→AJAX→bypass fallback chain, ad-blocker simulation (block REST+AJAX → bypass must still track), and complete-block graceful failure.

Motivation

#174 (high): REST + sendBeacon broken — TrackingRestController overwrites raw_post_array for text/plain requests. Ad-blocker bypass is a key differentiating feature.

Dependencies

Implementation

Files to create

  • tests/e2e/helpers/transport.ts (skill spec §2.5)
  • tests/e2e/specs/transport/transport-fallback.spec.ts

transport.ts route blocking

```typescript
blockTransport('rest'): page.route('/wp-json/slimstat/', r => r.abort())
blockTransport('ajax'): page.route('/admin-ajax.phpaction=slimstat', r => r.abort())
blockTransport('bypass'): page.route('
/wp-content/plugins/wp-slimstat/**', r => r.abort())
```

Test scenarios

  1. All available → REST used (URL contains /wp-json/slimstat/)
  2. Block REST → AJAX fallback (admin-ajax.php) — @link Outbound link tracking broken with REST + sendBeacon #174
  3. Block REST+AJAX → bypass transport used (plugin file)
  4. Ad-blocker simulation (REST+AJAX blocked) → bypass tracks → DB row confirmed
  5. All blocked → 0 DB rows, 0 console errors

Standards

  • blockTransport() uses page.route() — never JS-side override (skill spec §2.5)
  • Scenario 4 asserts DB row via getCorrelatedRows() — not just request capture
  • Transport robustness gate: bypass success rate ≥98% when REST+AJAX blocked (research 01 §C)

Acceptance criteria

References

  • Research 01 §D — Transport robustness, §C — correctness gates
  • Skill spec §2.5 (transport.ts)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions