• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

bleedingdeacons / integrity / 30934395685
91%

Build:
DEFAULT BRANCH: main
Ran 04 Aug 2026 05:35PM UTC
Jobs 1
Files 14
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

04 Aug 2026 05:32PM UTC coverage: 90.07% (-0.8%) from 90.833%
30934395685

push

github

web-flow
test(admin): cover SettingsPage and drop the src/Admin exclusion (#42)

src/Admin was excluded from the coverage source set as "admin render glue:
markup, no logic worth unit-testing". Amber covers its entire src/Admin on
this same tooling, so the exclusion was habit rather than necessity — and it
was hiding real branches: an interval-clamping sanitize callback, the audit
filter and pagination parsing, nine permission checkboxes, and every
capability guard.

53 tests, three techniques, matching what Amber does:

  - Registration (init, addMenuPage, registerSettings, enqueueAssets) runs for
    real and is asserted against WpState, which records hooks, menus and
    enqueued handles.
  - Capability guards call wp_die(), which the shared stubs turn into a
    WpDieException, so all seven "no permission" branches are expectException.
  - The four handle* methods end in wp_redirect() followed by a bare exit.
    wp_redirect is recorded rather than thrown, so exit runs and would take
    PHPUnit with it — that path genuinely cannot complete in-process.

That last point is why this commit also touches production code. The
branchiest logic on the page — the permission checkboxes, including the rule
that members:clear implies members:read — was written inline in
handleCreateKey, behind the exit, so no test could reach it. It is now
parsePermissions() and parseIpWhitelist(), reachable by reflection exactly as
Amber drives its own redirect-and-exit handlers.

parsePermissions() is a pure extraction: members:read is still appended inside
the loop rather than after it, so the resulting order is byte-identical to
what the inline code produced.

parseIpWhitelist() carries ONE deliberate change. array_values() is now applied
after array_filter(); without it a blank line between two addresses left a gap
in the keys, so the value serialised as a JSON object ({"0":"…","2":"…"})
rather than an array. Every consumer treats it as a list.

Coverage: the plugin reads 89.80%... (continued)

2576 of 2860 relevant lines covered (90.07%)

3.37 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
95.96
-0.51% integrity/integrity/src/Auth/ApiKeyManager.php
Jobs
ID Job ID Ran Files Coverage
1 30934395685.1 04 Aug 2026 05:35PM UTC 14
90.07
GitHub Action Run
Source Files on build 30934395685
  • Tree
  • List 14
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30934395685
  • 3bd56ca1 on github
  • Prev Build on main (#30927009867)
  • Next Build on main (#31002775847)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc