feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
This commit is contained in:
parent
5cd1de6859
commit
708e20f747
406 changed files with 42464 additions and 6199 deletions
106
tests/e2e/system-verification.js
Normal file
106
tests/e2e/system-verification.js
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
// tests/e2e/system-verification.js
|
||||
// Automated E2E verification script for C# .NET API Backend & BackOffice
|
||||
|
||||
const API_BASE = 'http://localhost:5000';
|
||||
|
||||
async function runE2EVerification() {
|
||||
console.log('==================================================');
|
||||
console.log(' D3RO Voice — Closed Loop E2E Automated Test');
|
||||
console.log('==================================================');
|
||||
|
||||
try {
|
||||
// 1. Health & Server Stats
|
||||
console.log('\n[1/5] Testing Server Stats & Health...');
|
||||
const statsRes = await fetch(`${API_BASE}/api/admin/stats`);
|
||||
if (!statsRes.ok) throw new Error(`Stats endpoint failed with status ${statsRes.status}`);
|
||||
const stats = await statsRes.json();
|
||||
console.log(' ✓ Server Stats:', JSON.stringify(stats));
|
||||
|
||||
// 2. User Registration & Login
|
||||
console.log('\n[2/5] Testing User Registration & Mandatory Login Guard...');
|
||||
const testEmail = `e2e_user_${Date.now()}@d3ro.ai`;
|
||||
const testPassword = 'Password123!';
|
||||
|
||||
const regRes = await fetch(`${API_BASE}/api/auth/register`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email: testEmail, password: testPassword })
|
||||
});
|
||||
if (!regRes.ok) throw new Error(`Registration failed: ${await regRes.text()}`);
|
||||
const regData = await regRes.json();
|
||||
console.log(` ✓ Registration successful for: ${regData.email} (Role: ${regData.role})`);
|
||||
|
||||
const loginRes = await fetch(`${API_BASE}/api/auth/login`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email: testEmail, password: testPassword })
|
||||
});
|
||||
if (!loginRes.ok) throw new Error(`Login failed: ${await loginRes.text()}`);
|
||||
const loginData = await loginRes.json();
|
||||
const token = loginData.token;
|
||||
console.log(' ✓ Login successful, JWT token issued.');
|
||||
|
||||
// Verify unauthenticated request fails
|
||||
const unauthRes = await fetch(`${API_BASE}/api/llm/generate`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ prompt: 'Test' })
|
||||
});
|
||||
if (unauthRes.status !== 401) throw new Error(`Expected 401 Unauthenticated, got ${unauthRes.status}`);
|
||||
console.log(' ✓ Mandatory Login Guard verified (Unauthenticated request rejected with 401).');
|
||||
|
||||
// 3. Dynamic Model Endpoint Creation (Admin)
|
||||
console.log('\n[3/5] Testing Dynamic Service Model & Endpoint Addition...');
|
||||
const newModelId = `e2e-model-${Date.now()}`;
|
||||
const createEpRes = await fetch(`${API_BASE}/api/admin/endpoints`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
modelId: newModelId,
|
||||
modelName: 'E2E Dynamic Custom Model',
|
||||
provider: 'OpenAI',
|
||||
endpointUrl: 'https://api.openai.com/v1/chat/completions',
|
||||
apiKey: 'sk-e2e-dummy-key',
|
||||
costPer1kPromptTokens: 0.00020,
|
||||
costPer1kCompletionTokens: 0.00080
|
||||
})
|
||||
});
|
||||
if (!createEpRes.ok) throw new Error(`Endpoint creation failed: ${await createEpRes.text()}`);
|
||||
const epData = await createEpRes.json();
|
||||
console.log(` ✓ Dynamic Model Endpoint added: ${epData.modelId}`);
|
||||
|
||||
// 4. AI Generation & Usage Cost Calculation
|
||||
console.log('\n[4/5] Testing AI Generation & Token Cost Calculation...');
|
||||
const genRes = await fetch(`${API_BASE}/api/llm/generate`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
prompt: 'Self-verification prompt for D3RO Voice E2E test',
|
||||
model: newModelId
|
||||
})
|
||||
});
|
||||
if (!genRes.ok) throw new Error(`AI generation failed: ${await genRes.text()}`);
|
||||
const genData = await genRes.json();
|
||||
console.log(' ✓ AI Generation result:', JSON.stringify(genData));
|
||||
if (typeof genData.cost !== 'number') throw new Error('Cost calculation missing in response');
|
||||
|
||||
// 5. BackOffice Usage & Cost Analytics Report
|
||||
console.log('\n[5/5] Testing BackOffice Usage & Cost Analytics Report...');
|
||||
const usageRes = await fetch(`${API_BASE}/api/admin/usage`);
|
||||
if (!usageRes.ok) throw new Error(`Usage report failed: ${await usageRes.text()}`);
|
||||
const usageData = await usageRes.json();
|
||||
console.log(' ✓ Usage Report received:', JSON.stringify(usageData));
|
||||
|
||||
console.log('\n==================================================');
|
||||
console.log(' SUCCESS: ALL E2E VERIFICATION CHECKS PASSED!');
|
||||
console.log('==================================================');
|
||||
} catch (err) {
|
||||
console.error('\n❌ E2E VERIFICATION FAILED:', err);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
runE2EVerification();
|
||||
Loading…
Add table
Add a link
Reference in a new issue