134 lines
4.1 KiB
JavaScript
134 lines
4.1 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
|
|
test('hosted sms pool manager deletes all entries and clears old fallback fields', async () => {
|
|
const source = fs.readFileSync('sidepanel/hosted-sms-pool-manager.js', 'utf8');
|
|
const windowObject = {};
|
|
const api = new Function('window', `${source}; return window.SidepanelHostedSmsPoolManager;`)(windowObject);
|
|
|
|
let text = '+15822452843----http://a.62-us.com/api/get_sms?key=old';
|
|
let usage = { [text]: { useCount: 2, usedAt: 1, lastError: 'failed' } };
|
|
let fallbackCleared = false;
|
|
const handlers = {};
|
|
const manager = api.createHostedSmsPoolManager({
|
|
dom: {
|
|
btnHostedSmsPoolRefresh: { disabled: false, addEventListener() {} },
|
|
btnHostedSmsPoolClearUsed: { disabled: false, addEventListener() {} },
|
|
btnHostedSmsPoolDeleteAll: {
|
|
disabled: false,
|
|
addEventListener(type, handler) {
|
|
handlers[type] = handler;
|
|
},
|
|
},
|
|
inputHostedSmsPoolImport: { disabled: false, addEventListener() {} },
|
|
btnHostedSmsPoolImport: { disabled: false, addEventListener() {} },
|
|
hostedSmsPoolSummary: { textContent: '' },
|
|
hostedSmsPoolList: { innerHTML: '' },
|
|
},
|
|
helpers: {
|
|
openConfirmModal: async () => true,
|
|
showToast() {},
|
|
},
|
|
state: {
|
|
getText: () => text,
|
|
setText: (nextText) => {
|
|
text = nextText;
|
|
},
|
|
getUsage: () => usage,
|
|
setUsage: (nextUsage) => {
|
|
usage = nextUsage;
|
|
},
|
|
getCurrentEntry: () => null,
|
|
isVisible: () => true,
|
|
},
|
|
actions: {
|
|
persistPool: async () => {},
|
|
clearFallback: () => {
|
|
fallbackCleared = true;
|
|
},
|
|
},
|
|
});
|
|
|
|
manager.bindEvents();
|
|
await handlers.click();
|
|
|
|
assert.equal(text, '');
|
|
assert.deepEqual(usage, {});
|
|
assert.equal(fallbackCleared, true);
|
|
});
|
|
|
|
test('hosted sms pool manager accepts phone and relay url as two-line import hint format', async () => {
|
|
const source = fs.readFileSync('sidepanel/hosted-sms-pool-manager.js', 'utf8');
|
|
const windowObject = {};
|
|
const originalDocument = global.document;
|
|
global.document = {
|
|
createElement() {
|
|
return {
|
|
className: '',
|
|
innerHTML: '',
|
|
appendChild() {},
|
|
querySelector() {
|
|
return { addEventListener() {} };
|
|
},
|
|
};
|
|
},
|
|
};
|
|
try {
|
|
const api = new Function('window', `${source}; return window.SidepanelHostedSmsPoolManager;`)(windowObject);
|
|
let text = '';
|
|
let usage = {};
|
|
const handlers = {};
|
|
const manager = api.createHostedSmsPoolManager({
|
|
dom: {
|
|
btnHostedSmsPoolRefresh: { disabled: false, addEventListener() {} },
|
|
btnHostedSmsPoolClearUsed: { disabled: false, addEventListener() {} },
|
|
btnHostedSmsPoolDeleteAll: { disabled: false, addEventListener() {} },
|
|
inputHostedSmsPoolImport: {
|
|
value: '1234567890\n\nhttps://mail.test.com/api/text-relay/eca_tr_xxxxxxxxx',
|
|
disabled: false,
|
|
addEventListener() {},
|
|
},
|
|
btnHostedSmsPoolImport: {
|
|
disabled: false,
|
|
addEventListener(type, handler) {
|
|
handlers[type] = handler;
|
|
},
|
|
},
|
|
hostedSmsPoolSummary: { textContent: '' },
|
|
hostedSmsPoolList: { innerHTML: '', appendChild() {} },
|
|
inputHostedSmsPoolSearch: { value: '', addEventListener() {} },
|
|
selectHostedSmsPoolFilter: { value: 'all', addEventListener() {} },
|
|
},
|
|
helpers: {
|
|
openConfirmModal: async () => true,
|
|
showToast() {},
|
|
},
|
|
state: {
|
|
getText: () => text,
|
|
setText: (nextText) => {
|
|
text = nextText;
|
|
},
|
|
getUsage: () => usage,
|
|
setUsage: (nextUsage) => {
|
|
usage = nextUsage;
|
|
},
|
|
getCurrentEntry: () => null,
|
|
isVisible: () => true,
|
|
},
|
|
actions: {
|
|
persistPool: async () => {},
|
|
clearFallback() {},
|
|
},
|
|
});
|
|
|
|
manager.bindEvents();
|
|
await handlers.click();
|
|
|
|
assert.equal(text, '1234567890----https://mail.test.com/api/text-relay/eca_tr_xxxxxxxxx');
|
|
assert.deepEqual(usage, {});
|
|
} finally {
|
|
global.document = originalDocument;
|
|
}
|
|
});
|