108 lines
3.1 KiB
JavaScript
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');
|
|
});
|