feat:cash-assets-batch-draft-review-and-login-memory

This commit is contained in:
陈煜 committed 2026-10-05 12:29:07 +08:00
1 parent ce8609116b
commit cfbba73791
16 files changed
+872 -46

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { savedLogin, rememberLogin } from '../src/login-preferences';
test('remembered login keeps passwords out of application storage and delegates to the browser', async (t) => {
const values = new Map<string, string>();
const stored: any[] = [];
const old = new Map<string, PropertyDescriptor | undefined>();
for (const key of ['localStorage', 'window', 'navigator'])
old.set(key, Object.getOwnPropertyDescriptor(globalThis, key));
t.after(() => {
for (const [key, descriptor] of old) {
if (descriptor) Object.defineProperty(globalThis, key, descriptor);
else Reflect.deleteProperty(globalThis, key);
}
});
const storage = {
getItem: (key: string) => values.get(key) || null,
setItem: (key: string, value: string) => values.set(key, value),
removeItem: (key: string) => values.delete(key),
};
class BrowserPassword {
constructor(data: unknown) {
Object.assign(this, data);
}
}
Object.defineProperty(globalThis, 'localStorage', { value: storage, configurable: true });
Object.defineProperty(globalThis, 'window', {
value: { isSecureContext: true, PasswordCredential: BrowserPassword },
configurable: true,
});
Object.defineProperty(globalThis, 'navigator', {
value: {
credentials: {
store: async (credential: unknown) => {
stored.push(credential);
},
},
},
configurable: true,
});
await rememberLogin('fixture account', 'synthetic-password-for-test', true);
assert.deepEqual(savedLogin(), { username: 'fixture account', remember: true });
assert.equal(
Array.from(values.values()).some((v) => v.includes('synthetic-password-for-test')),
false,
);
assert.equal(stored.length, 1);
assert.equal(stored[0].id, 'fixture account');
await rememberLogin('fixture account', 'synthetic-password-for-test', false);
assert.equal(stored.length, 1);
assert.deepEqual(savedLogin(), { username: '', remember: false });
// Browser support and storage failure cannot prevent a normal login.
(window as any).isSecureContext = false;
await rememberLogin('http fixture', 'synthetic-password-for-test', true);
assert.equal(stored.length, 1);
values.set('worthpath.login', 'bad json');
assert.deepEqual(savedLogin(), { username: '', remember: false });
});