Files
computer-playbook/roles/web-app-wordpress/files/playwright/addons/infinito-http-ca-trust.spec.js
kevinveenbirkenbachandClaude Opus 5 c7ddf6eb24 Merge branch 'feature/swarm-nfs' into feature/svc-net-tor
Three conflicts, each resolved by combining both sides rather than picking one.

compose.yml passes both env vars through to the container: swarm-nfs adds
INFINITO_SWARM_MGR_IP, this branch adds INFINITO_TOR_SOCKS_PORT, and neither
substitutes for the other.

daemon.json.j2 takes the data-root block from swarm-nfs and keeps HEAD's dns
key. The incoming side writes networks.internet.dns directly; lookup(
'container_dns') already returns that value as its clearnet entry and prepends
the docker0 bridge on a Tor node in compose mode, so the incoming form is a
strict subset and dropping it loses nothing.

The WordPress CA-trust addon spec gains skipUnlessServiceEnabled("sso") from
swarm-nfs alongside HEAD's gotoOnion and resolveTimeout, and asserts on the
Plugin Name the mu-plugin header declares - the mustuse screen renders that,
not the filename - with resolveTimeout applied to the literal the incoming
side left bare.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 00:47:10 +02:00

52 lines
1.8 KiB
JavaScript

const { test, expect } = require("@playwright/test");
const { skipUnlessAddonEnabled } = require("../addon-gating");
const { skipUnlessServiceEnabled } = require("../service-gating");
const { resolveTimeout } = require("../timeouts");
const { gotoOnion } = require("../personas");
const shared = require("../_shared");
test("addon infinito-http-ca-trust: the CA-trust mu-plugin is loaded by WordPress and outbound HTTPS calls resolve", async ({
browser,
}) => {
skipUnlessAddonEnabled("infinito-http-ca-trust");
skipUnlessServiceEnabled("sso");
test.setTimeout(resolveTimeout(120_000));
const context = await browser.newContext({ ignoreHTTPSErrors: true });
const page = await context.newPage();
try {
await shared.wpAdminLoginViaOidc(
page,
shared.env.wpBaseUrl,
shared.env.adminUsername,
shared.env.adminPassword
);
await gotoOnion(
page,
`${shared.env.wpBaseUrl}/wp-admin/plugins.php?plugin_status=mustuse`,
{ waitUntil: "domcontentloaded", timeout: resolveTimeout(60_000) }
);
await expect(
page.locator("#the-list"),
"the Must-Use plugins screen must list the CA-trust mu-plugin under the Plugin Name its header declares — one absent from this screen was never copied into wp-content/mu-plugins"
).toContainText("Infinito.Nexus HTTP CA Trust", {
timeout: resolveTimeout(30_000),
});
const restResponse = await page.request.get(
`${shared.env.wpBaseUrl}/wp-json/`,
{ failOnStatusCode: false }
);
expect(
restResponse.status(),
"the REST root must answer over HTTPS: WordPress reaching its own TLS endpoint is what this mu-plugin's CA bundle enables"
).toBe(200);
} finally {
await page.close().catch(() => {});
await context.close().catch(() => {});
}
});