QRun-IO/ci-policy: ci / fork-guard (pull_request) Skipped
QRun-IO/ci-policy: native / fork-deny (pull_request) Skipped
QRun-IO/ci-policy: native / dotnet-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / Scoped workflow [workflow f1d46718955078331817c6206b822a94bc7d769f] (pull_request) Successful in 9s
QRun-IO/ci-policy: ci / head-profile (pull_request) Skipped
QRun-IO/ci-policy: native / native-result (pull_request) Successful in 9s
QRun-IO/ci-policy: ci / repository-policy (pull_request) Skipped
QRun-IO/ci-policy: ci / application-template-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / gradle-1 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (pull_request) Skipped
QRun-IO/ci-policy: ci / node-8 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-9 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-10 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (pull_request) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-13 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-14 (pull_request) Skipped
QRun-IO/ci-policy: ci / android-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / original-business (pull_request) Skipped
QRun-IO/ci-policy: ci / original-mcp (pull_request) Skipped
QRun-IO/ci-policy: ci / original-voyage (pull_request) Skipped
QRun-IO/ci-policy: ci / original-cli (pull_request) Skipped
QRun-IO/ci-policy: ci / not-enrolled (pull_request) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (pull_request) Skipped
Shared Java Maven CI with Docker / secrets (push) Successful in 38s
QRun-IO/ci-policy: Shared Java Maven CI with Docker / secrets (pull_request) Successful in 38s
qbit release candidate / cut-rc (pull_request) Failing after 18s
Release candidate / release-rc (pull_request) Failing after 18s
qbit release candidate / tag-and-release (pull_request) Skipped
QRun-IO/ci-policy: Shared Java Maven CI with Docker / verify (pull_request) Failing after 15m39s
QRun-IO/ci-policy: Shared Java Maven CI with Docker / gate (pull_request) Failing after 24s
QRun-IO/ci-policy: ci / java-docker-3 (pull_request) Failing after 1h14m34s
QRun-IO/ci-policy: ci / ci-result (pull_request) Failing after 10s
Shared Java Maven CI with Docker / verify (push) Failing after 17m19s
Shared Java Maven CI with Docker / gate (push) Failing after 24s
qrun-release / release (push) Failing after 1h16m30s
qrun-release / postpublish (push) Skipped
Add user and group QQQ application-role access editing, bounded catalogs, webhook inbox and SQL mirrors, refreshed session permissions, and deferred invitation assignments. Include the isolated local review host, browser acceptance scripts, documentation and the token-widget column mapping fix. User approved this RC checkpoint. Full 1.0 gates remain documented, including the schema-drift matcher and PostgreSQL integration errors from the full gate. Companion UI: QRun-IO/qqq-frontend-next#205. Co-Authored-By: GPT-6 <noreply@openai.com>
43 lines
2.4 KiB
JavaScript
43 lines
2.4 KiB
JavaScript
/* Copyright 2026 Kingsrook, LLC. SPDX-License-Identifier: Apache-2.0 */
|
|
const path = require('node:path');
|
|
const { createRequire } = require('node:module');
|
|
const frontend = process.env.QBIT_REVIEW_FRONTEND || path.join(process.env.USERPROFILE, '.cache', 'qqq-authentik-access-ui');
|
|
const { chromium, expect } = createRequire(path.join(frontend, 'package.json'))('@playwright/test');
|
|
|
|
/** Send a reset email to synthetic Sam, then render the resulting token. */
|
|
async function main()
|
|
{
|
|
const browser = await chromium.launch({ headless: true });
|
|
try
|
|
{
|
|
const page = await browser.newPage();
|
|
page.setDefaultTimeout(30000);
|
|
await page.goto('http://127.0.0.1:18300/app/authentik_user');
|
|
await page.getByText('review.sam', { exact: true }).first().click();
|
|
await page.waitForURL(/\/authentik_user\/\d+\/?$/);
|
|
const userURL = page.url();
|
|
await page.getByRole('button', { name: 'Record actions menu', exact: true }).click();
|
|
await page.getByRole('menuitem', { name: 'Send Password Reset Email', exact: true }).click();
|
|
await page.getByRole('textbox', { name: 'Reason', exact: true }).fill('Local token widget regression verification');
|
|
await page.getByRole('button', { name: 'Next', exact: true }).last().click();
|
|
const review = page.getByRole('form', { name: 'Review', exact: true });
|
|
await review.waitFor();
|
|
await expect(review).toContainText('OK: 1');
|
|
await page.getByRole('button', { name: 'Submit', exact: true }).click();
|
|
const result = page.getByRole('form', { name: 'Result', exact: true });
|
|
await result.waitFor();
|
|
await expect(result).toContainText('OK: 1');
|
|
await page.goto(userURL);
|
|
await page.getByRole('tab', { name: 'Tokens and app passwords', exact: true }).click();
|
|
await expect(page.getByRole('cell', { name: 'verification', exact: true }).first()).toBeVisible({ timeout: 30000 });
|
|
await expect(page.getByRole('cell', { name: 'Owner permissions', exact: true }).first()).toBeVisible();
|
|
await expect(page.getByText(/An error occurred loading widget content|Error executing query/)).toHaveCount(0);
|
|
console.log('PASS: Tokens and app passwords renders a real password-reset token without a query error.');
|
|
}
|
|
finally
|
|
{
|
|
await browser.close();
|
|
}
|
|
}
|
|
main().catch(error => { console.error(error.message.replace(/[a-f0-9]{32,}/g, '<identifier>')); process.exitCode = 1; });
|