Files
GuJumpgate/tests/sidepanel-hosted-sms-pool-manager.test.js
T

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;
}
});