arreglos de grok

This commit is contained in:
2026-05-22 13:25:01 +02:00
parent 2ebd8fb16b
commit 8f7f14c95b
641 changed files with 78143 additions and 941 deletions
+135
View File
@@ -0,0 +1,135 @@
/**
* enrich.js
* Shared logic to generate rich metadata (steps, automatable, notYet, dependencies)
* for a test case. Used by both the editor and (optionally) the report.
*/
function enrichTestCase(t) {
const id = t.id || '';
const group = t.group || '';
const isCore = t.module === 'core';
const isPbx = t.module === 'pbx';
const status = t.status || 'manual';
const isAutomated = status === 'automated';
const isPartial = status === 'partial';
const isManual = status === 'manual';
let steps = [];
let automatable = [];
let notYet = [];
let dependencies = [];
// === STEPS ===
steps.push('Open admin portal or repository URL in browser context');
if (id.includes('repository') || id.includes('documentation')) {
steps.push('Navigate to the download / documentation portal');
steps.push('Search or locate the relevant file/link by filename pattern');
steps.push('Assert presence and visibility of the expected document');
} else if (group.includes('security') || group.includes('configuration')) {
steps.push('Log in to the admin portal (if required)');
steps.push('Navigate to the relevant settings section');
steps.push('Read current configuration values via UI or API');
} else if (group.includes('calls') || group.includes('codecs')) {
steps.push('Ensure SIP endpoints / softphones are registered');
steps.push('Initiate or receive call using the required scenario');
steps.push('Verify audio path, signaling, and media parameters');
} else if (group.includes('upgrade') || group.includes('installation')) {
steps.push('Prepare clean or previous-version VM/image');
steps.push('Perform installation or upgrade procedure');
steps.push('Post-install verification via portal + external tools');
} else {
steps.push('Execute the main verification or configuration action described in the test');
steps.push('Capture evidence (screenshot, log, API response)');
steps.push('Assert expected outcome');
}
// === AUTOMATION BREAKDOWN ===
if (isAutomated) {
automatable.push('Full end-to-end execution via Playwright against the admin portal UI');
automatable.push('Navigation, form interaction, and assertions are scriptable');
} else if (isPartial) {
automatable.push('Portal UI configuration and verification steps (already partially automated)');
automatable.push('Data extraction and reporting of current settings');
}
if (isManual || isPartial) {
if (t.manualReason) notYet.push(t.manualReason);
if (t.partialNotes) notYet.push(t.partialNotes);
}
if (!isAutomated) {
notYet.push('Requires external SIP endpoints or physical phones for media/audio validation');
}
if (group.includes('virtualization') || group.includes('availability') || group.includes('performance')) {
notYet.push('Hypervisor-level operations (vCenter, libvirt, vSphere) not reachable from browser automation');
notYet.push('Long-running load or HA failover scenarios need dedicated lab infrastructure');
}
if (group.includes('calls') || group.includes('codecs')) {
notYet.push('Real RTP/SRTP media path and audio quality verification (human ear or PESQ/MOS tools)');
notYet.push('External SIP trunk / PSTN connectivity and DID numbers');
}
if (id.includes('security') && (id.includes('cve') || id.includes('vulnerab'))) {
notYet.push('Full CVE / dependency scanning (Trivy, Grype, OWASP Dependency-Check) in CI pipeline');
}
// === DEPENDENCIES ===
dependencies.push({ label: 'Admin Portal', value: 'https://pbx.local:4443 (configure via $BASE_URL)' });
dependencies.push({ label: 'Repository URL', value: '${BASE_URL}/downloads or $REPO_URL' });
if (isCore) dependencies.push({ label: 'Protocol', value: 'HTTPS (admin portal) + optional SSH/CLI' });
if (isPbx) dependencies.push({ label: 'Protocol', value: 'HTTPS + SIP (UDP/TCP/TLS) + RTP/SRTP' });
if (group.includes('calls') || group.includes('codecs') || group.includes('extensions')) {
dependencies.push({ label: 'SIP Endpoints', value: 'At least 2 registered SIP clients (deskphone or softphone: Zoiper, MicroSIP, Yealink, etc.)' });
dependencies.push({ label: 'Network', value: 'SIP trunk or local Asterisk/FreeSWITCH simulator for PSTN simulation' });
}
if (group.includes('virtualization')) {
dependencies.push({ label: 'Hypervisor Access', value: 'vCenter, Hyper-V Manager, Proxmox, or virsh (SSH/API)' });
}
if (group.includes('performance') || group.includes('availability')) {
dependencies.push({ label: 'Load Gen', value: 'SIPp or custom load generator + monitoring (Prometheus/Grafana recommended)' });
}
if (id.includes('siem') || id.includes('addm')) {
dependencies.push({ label: 'External Systems', value: 'SIEM server (Splunk, ELK, QRadar) and/or ADDM/ADDM collector' });
}
dependencies.push({ label: 'Credentials', value: 'Admin user with sufficient privileges (portal + SSH where needed)' });
dependencies.push({ label: 'Test Data', value: 'Clean test tenant or lab PBX instance (recommended isolated environment)' });
// Cleanup: remove duplicates and empty
const seen = new Set();
notYet = notYet.filter(item => {
const key = item.trim();
if (!key || seen.has(key)) return false;
seen.add(key);
return true;
});
automatable = [...new Set(automatable.filter(Boolean))];
steps = [...new Set(steps.filter(Boolean))];
// Fallbacks
if (automatable.length === 0) {
automatable.push('Most UI-driven configuration and verification steps via Playwright');
}
if (notYet.length === 0 && !isAutomated) {
notYet.push('No major blockers identified — can be fully automated with current tooling');
}
return {
steps,
automatable,
notYet,
dependencies
};
}
module.exports = { enrichTestCase };