Files
FlowPilot/tests/kiro-register-page-fatal-state.test.js
T
2026-05-19 14:49:46 +08:00

108 lines
3.1 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const vm = require('node:vm');
const source = fs.readFileSync('content/kiro/register-page.js', 'utf8');
function createHarness({ href, hostname, title = '', bodyText = '' }) {
const context = {
console: { log() {}, warn() {}, error() {}, info() {} },
location: { href, hostname },
document: {
title,
body: {
textContent: bodyText,
},
documentElement: {
getAttribute() {
return '1';
},
setAttribute() {},
},
querySelector() {
return null;
},
querySelectorAll() {
return [];
},
},
window: {},
globalThis: null,
resetStopState() {},
isStopError() {
return false;
},
throwIfStopped() {},
sleep() {
return Promise.resolve();
},
fillInput() {},
MouseEvent: class {},
PointerEvent: class {},
KeyboardEvent: class {},
};
context.window = context;
context.globalThis = context;
context.window.getComputedStyle = () => ({ display: 'block', visibility: 'visible' });
vm.createContext(context);
vm.runInContext(source, context);
return context;
}
test('kiro register content detects aws request error page as a proxy failure', () => {
const harness = createHarness({
href: 'https://profile.aws.amazon.com/signup',
hostname: 'profile.aws.amazon.com',
title: '错误',
bodyText: '抱歉,处理您的请求时出错。请重试。',
});
const detected = harness.detectKiroRegisterPageState();
assert.equal(detected.state, 'proxy_error_page');
assert.match(detected.fatalMessage, /切换代理/);
});
test('kiro register content does not misclassify the normal name page as a proxy failure', () => {
const harness = createHarness({
href: 'https://profile.aws.amazon.com/signup',
hostname: 'profile.aws.amazon.com',
title: 'Enter your name',
bodyText: '输入您的姓名 继续',
});
const fatal = harness.detectKiroFatalPageState('输入您的姓名 继续', harness.location.href, harness.document.title);
assert.equal(fatal, null);
});
test('kiro register content treats Kiro web success callback as signed in', () => {
const harness = createHarness({
href: 'https://app.kiro.dev/signin?auth_status=success&redirect_from=KiroIDE',
hostname: 'app.kiro.dev',
title: 'Kiro',
bodyText: 'Signed in',
});
const detected = harness.detectKiroRegisterPageState();
assert.equal(detected.state, 'kiro_web_signed_in');
});
test('kiro register content extracts signed-in account email from Kiro account page text', () => {
const harness = createHarness({
href: 'https://app.kiro.dev/settings/account',
hostname: 'app.kiro.dev',
title: 'Account',
bodyText: 'Account Email scrap-aged-quirk@duck.com support@kiro.dev',
});
const detected = harness.detectKiroRegisterPageState();
assert.equal(detected.state, 'kiro_web_signed_in');
assert.equal(detected.accountEmail, 'scrap-aged-quirk@duck.com');
assert.equal(detected.email, 'scrap-aged-quirk@duck.com');
});