Files
FlowPilot/tests/background-paypal-account-store-module.test.js
2026-04-28 16:23:30 +08:00

92 lines
3.1 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
test('background imports paypal account store module', () => {
const source = fs.readFileSync('background.js', 'utf8');
assert.match(source, /background\/paypal-account-store\.js/);
assert.match(source, /paypal-utils\.js/);
});
test('paypal account store module exposes a factory', () => {
const source = fs.readFileSync('background/paypal-account-store.js', 'utf8');
const globalScope = {};
const api = new Function('self', `${source}; return self.MultiPageBackgroundPayPalAccountStore;`)(globalScope);
assert.equal(typeof api?.createPayPalAccountStore, 'function');
});
test('paypal account store selects account and keeps legacy paypal credentials in sync', async () => {
const source = fs.readFileSync('background/paypal-account-store.js', 'utf8');
const globalScope = {};
const api = new Function('self', `${source}; return self.MultiPageBackgroundPayPalAccountStore;`)(globalScope);
let latestState = {
paypalAccounts: [],
currentPayPalAccountId: '',
paypalEmail: '',
paypalPassword: '',
};
const broadcasts = [];
const store = api.createPayPalAccountStore({
broadcastDataUpdate(payload) {
broadcasts.push(payload);
},
findPayPalAccount(accounts, accountId) {
return (Array.isArray(accounts) ? accounts : []).find((account) => account.id === accountId) || null;
},
getState: async () => latestState,
normalizePayPalAccount(account = {}) {
return {
id: String(account.id || 'generated'),
email: String(account.email || '').trim().toLowerCase(),
password: String(account.password || ''),
createdAt: Number(account.createdAt) || 1,
updatedAt: Number(account.updatedAt) || 1,
lastUsedAt: Number(account.lastUsedAt) || 0,
};
},
normalizePayPalAccounts(accounts) {
return Array.isArray(accounts) ? accounts.slice() : [];
},
setPersistentSettings: async (updates) => {
latestState = { ...latestState, ...updates };
},
setState: async (updates) => {
latestState = { ...latestState, ...updates };
},
upsertPayPalAccountInList(accounts, nextAccount) {
const list = Array.isArray(accounts) ? accounts.slice() : [];
const existingIndex = list.findIndex((account) => account.id === nextAccount.id);
if (existingIndex >= 0) {
list[existingIndex] = nextAccount;
return list;
}
list.push(nextAccount);
return list;
},
});
const account = await store.upsertPayPalAccount({
id: 'pp-1',
email: 'User@Example.com',
password: 'secret',
});
assert.equal(account.email, 'user@example.com');
const selected = await store.setCurrentPayPalAccount('pp-1');
assert.equal(selected.id, 'pp-1');
assert.equal(latestState.currentPayPalAccountId, 'pp-1');
assert.equal(latestState.paypalEmail, 'user@example.com');
assert.equal(latestState.paypalPassword, 'secret');
assert.deepStrictEqual(
broadcasts.at(-1),
{
currentPayPalAccountId: 'pp-1',
paypalEmail: 'user@example.com',
paypalPassword: 'secret',
}
);
});