Files
FlowPilot/tests/background-kiro-state-module.test.js
T
2026-05-19 12:16:59 +08:00

147 lines
5.3 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
function loadKiroStateApi() {
const source = fs.readFileSync('background/kiro/state.js', 'utf8');
const globalScope = {};
return new Function('self', `${source}; return self.MultiPageBackgroundKiroState;`)(globalScope);
}
test('background imports kiro state module and routes Kiro runtime through dedicated helpers', () => {
const source = fs.readFileSync('background.js', 'utf8');
assert.match(source, /background\/kiro\/state\.js/);
assert.match(source, /const kiroStateHelpers = self\.MultiPageBackgroundKiroState/);
assert.match(source, /kiroStateHelpers\?\.buildStateView/);
assert.match(source, /kiroStateHelpers\?\.buildSessionStatePatch/);
assert.match(source, /kiroStateHelpers\?\.buildDownstreamResetPatch/);
assert.match(source, /kiroStateHelpers\?\.applyNodeCompletionPayload/);
});
test('kiro state module exposes canonical nested kiroRuntime view', () => {
const api = loadKiroStateApi();
const view = api.buildStateView({
kiroTargetId: 'kiro-rs',
kiroRuntime: {
session: {
currentStage: 'desktop-authorize',
registerTabId: 88,
pageState: 'name_entry',
pageUrl: 'https://view.awsapps.com/start',
},
register: {
email: 'aws-user@example.com',
fullName: 'Ada Lovelace',
loginUrl: 'https://app.kiro.dev/signin',
status: 'waiting_name',
},
webAuth: {
status: 'signin_started',
hasAccessToken: false,
hasSessionToken: false,
},
desktopAuth: {
clientId: 'client-001',
clientSecret: 'secret-001',
refreshToken: 'refresh-001',
status: 'authorized',
},
upload: {
targetId: 'kiro-rs',
status: 'ready_to_upload',
credentialId: 321,
},
},
});
assert.equal(view.kiroTargetId, 'kiro-rs');
assert.equal(view.kiroRuntime.session.currentStage, 'desktop-authorize');
assert.equal(view.kiroRuntime.session.registerTabId, 88);
assert.equal(view.kiroRuntime.register.email, 'aws-user@example.com');
assert.equal(view.kiroRuntime.register.loginUrl, 'https://app.kiro.dev/signin');
assert.equal(view.kiroRuntime.webAuth.status, 'signin_started');
assert.equal(view.kiroRuntime.desktopAuth.clientId, 'client-001');
assert.equal(view.kiroRuntime.desktopAuth.refreshToken, 'refresh-001');
assert.equal(view.kiroRuntime.upload.status, 'ready_to_upload');
assert.equal(view.kiroRuntime.upload.credentialId, 321);
});
test('kiro state session patch accepts canonical nested runtime updates', () => {
const api = loadKiroStateApi();
const patch = api.buildSessionStatePatch({
kiroRuntime: api.buildDefaultRuntimeState(),
}, {
kiroRuntime: {
session: {
currentStage: 'register',
pageState: 'otp_page',
pageUrl: 'https://signin.aws/register',
},
register: {
email: 'aws-user@example.com',
fullName: 'Ada Lovelace',
verificationRequestedAt: 1700000000000,
},
desktopAuth: {
status: 'waiting_callback',
},
upload: {
status: 'waiting_register',
},
},
});
assert.equal(patch.kiroRuntime.session.currentStage, 'register');
assert.equal(patch.kiroRuntime.session.pageState, 'otp_page');
assert.equal(patch.kiroRuntime.session.pageUrl, 'https://signin.aws/register');
assert.equal(patch.kiroRuntime.register.email, 'aws-user@example.com');
assert.equal(patch.kiroRuntime.register.fullName, 'Ada Lovelace');
assert.equal(patch.kiroRuntime.register.verificationRequestedAt, 1700000000000);
assert.equal(patch.kiroRuntime.desktopAuth.status, 'waiting_callback');
assert.equal(patch.kiroRuntime.upload.status, 'waiting_register');
});
test('kiro state reset helpers clear downstream runtime and fresh keep-state preserves only target selection', () => {
const api = loadKiroStateApi();
const currentState = {
kiroTargetId: 'kiro-rs',
kiroRuntime: {
session: {
currentStage: 'upload',
registerTabId: 88,
},
register: {
email: 'aws-user@example.com',
fullName: 'Ada Lovelace',
status: 'completed',
},
desktopAuth: {
clientId: 'client-001',
clientSecret: 'secret-001',
refreshToken: 'refresh-001',
status: 'authorized',
},
upload: {
targetId: 'kiro-rs',
status: 'uploaded',
credentialId: 321,
},
},
};
const resetPatch = api.buildDownstreamResetPatch('kiro-submit-email', currentState);
assert.equal(resetPatch.kiroRuntime.session.currentStage, 'register');
assert.equal(resetPatch.kiroRuntime.register.email, '');
assert.equal(resetPatch.kiroRuntime.register.fullName, '');
assert.equal(resetPatch.kiroRuntime.desktopAuth.refreshToken, '');
assert.equal(resetPatch.kiroRuntime.upload.status, '');
assert.equal(resetPatch.kiroRuntime.upload.credentialId, null);
const keepState = api.buildFreshKeepState(currentState);
assert.equal(keepState.kiroTargetId, 'kiro-rs');
assert.equal(keepState.kiroRuntime.register.email, '');
assert.equal(keepState.kiroRuntime.desktopAuth.refreshToken, '');
assert.equal(keepState.kiroRuntime.upload.status, '');
assert.equal(keepState.kiroRuntime.upload.targetId, 'kiro-rs');
});