test/admin-settings-email.test.js
Rama main · réplica de lectura del repositorio original.
var test = require('node:test');
var assert = require('node:assert/strict');
var fs = require('node:fs');
var path = require('node:path');
var playwright = require('playwright');
test('SMTP opens as a summary and preserves draft, secret and cancellation contracts', async function (t) {
var browser = await playwright.chromium.launch();
t.after(function () { return browser.close(); });
var page = await browser.newPage();
await page.setContent('<div id="body"></div>');
await page.addScriptTag({ content: fs.readFileSync(path.join(__dirname, '../lib/public/modules/store.js'), 'utf8').replace(/export \{[^}]+\};?/g, '') });
await page.evaluate(function () {
window.cfg = {host:'smtp.example.com',port:587,user:'user',pass:'••••••••',from:'mail@example.com'};
window.apiGet = async function () { return {smtp: window.cfg}; };
window.apiPost = async function (url, data) { window.saved = data; return window.fail ? {error:'Save failed'} : {ok:true}; };
window.escapeHtml = function (value) { var el = document.createElement('span'); el.textContent = value; return el.innerHTML; };
window.iconHtml = function () {return '';};
window.refreshIcons = window.showToast = function () {};
window.setSettingsDraft = function () {store.set({serverSettingsDrafts:{smtp:true}});};
window.clearSettingsDraft = function () {store.set({serverSettingsDrafts:{}});};
window.showConfirmDialog = function (message, title, callback) {window.confirmation = callback;};
});
await page.addScriptTag({content:fs.readFileSync(path.join(__dirname, '../lib/public/modules/admin-settings-email.js'), 'utf8').replace(/^import .*$/gm, '').replace(/export /g, '')});
await page.evaluate(function () {loadSmtpTab(document.querySelector('#body'));});
await page.locator('#smtp-edit').waitFor();
assert.equal(await page.locator('input').count(), 0);
assert.match(await page.locator('#body').textContent(), /Configured · hidden/);
await page.locator('#smtp-edit').click();
assert.equal(await page.evaluate(function () {return document.activeElement.id;}), 'smtp-host');
await page.locator('#smtp-host').fill('changed.example.com');
await page.locator('#smtp-cancel').click();
assert.equal(await page.locator('#smtp-host').inputValue(), 'changed.example.com');
await page.evaluate(function () {window.confirmation();});
assert.equal(await page.evaluate(function () {return document.activeElement.id;}), 'smtp-edit');
await page.locator('#smtp-edit').click();
assert.equal(await page.locator('#smtp-host').inputValue(), 'smtp.example.com');
await page.locator('#smtp-host').fill('saved.example.com');
await page.evaluate(function () {window.fail = true;});
await page.locator('#smtp-save').click();
await page.locator('#smtp-error').filter({hasText:'Save failed'}).waitFor();
assert.equal(await page.locator('#smtp-host').inputValue(), 'saved.example.com');
assert.equal(await page.evaluate(function () {return store.get('serverSettingsDrafts').smtp;}), true);
await page.evaluate(function () {window.fail = false;});
await page.locator('#smtp-save').click();
await page.locator('#smtp-edit').waitFor();
assert.equal(await page.locator('input').count(), 0);
assert.match(await page.locator('#body').textContent(), /saved.example.com/);
await page.locator('#smtp-edit').click();
assert.equal(await page.locator('#smtp-pass').inputValue(), '••••••••');
await page.locator('#smtp-save').click();
await page.locator('#smtp-edit').waitFor();
assert.equal(await page.evaluate(function () {return window.saved.pass;}), '••••••••');
await page.locator('#smtp-edit').click();
await page.locator('#smtp-remove').click();
await page.evaluate(function () {window.confirmation();});
await page.locator('#smtp-edit').waitFor();
assert.match(await page.locator('#body').textContent(), /SMTP is not configured/);
assert.equal(await page.locator('input').count(), 0);
await page.locator('#smtp-edit').click();
assert.equal(await page.locator('#smtp-host').inputValue(), '');
await page.locator('#smtp-cancel').click();
assert.equal(await page.locator('input').count(), 0);
});