lexguard-backend / test-workflow.js
github-actions[bot]
Deploy to Hugging Face
b921752
Raw
History Blame Contribute Delete
4.33 kB
const fs = require('fs');
const path = require('path');
const API_URL = 'http://localhost:5001/api';
async function request(endpoint, options = {}) {
const res = await fetch(`${API_URL}${endpoint}`, options);
const contentType = res.headers.get('content-type');
if (contentType && contentType.includes('application/json')) {
const data = await res.json();
return { status: res.status, data };
} else {
const text = await res.text();
return { status: res.status, data: text };
}
}
async function runTest() {
console.log('--- STARTING LEXGUARD API WORKFLOW TEST ---');
let token = null;
let contractId = null;
try {
// 1. Register / Login
console.log('[1/4] Registering test user...');
const email = `testuser_${Date.now()}@example.com`;
let res = await request('/auth/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password: 'testpassword123' })
});
if (res.status !== 201 && res.status !== 200) {
throw new Error('Registration failed: ' + JSON.stringify(res.data));
}
token = res.data.token;
console.log(`✅ Registered successfully. Token: ${token.substring(0, 10)}...`);
// 2. Create Dummy PDF and Upload
console.log('[2/4] Uploading dummy contract...');
const dummyPath = path.join(__dirname, 'dummy_contract.pdf');
const PDFDocument = require('pdfkit');
const doc = new PDFDocument();
doc.pipe(fs.createWriteStream(dummyPath));
doc.text('This is a highly confidential NDA. The employee shall not disclose any trade secrets. Penalty for breach is 1 million dollars.');
doc.end();
await new Promise(resolve => setTimeout(resolve, 500)); // wait for file write
// We append ?sync=true to avoid waiting for the async job queue for this simple test
const fileBuffer = fs.readFileSync(dummyPath);
const fileBlob = new Blob([fileBuffer], { type: 'application/pdf' });
const form = new FormData();
form.append('file', fileBlob, 'dummy_contract.pdf');
form.append('contractCategory', 'other');
res = await request('/contracts?sync=true', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`
},
body: form
});
fs.unlinkSync(dummyPath);
if (res.status !== 201 && res.status !== 202) {
throw new Error('Upload failed: ' + JSON.stringify(res.data));
}
contractId = res.data.data.contractId;
console.log(`✅ Uploaded successfully. Contract ID: ${contractId}`);
console.log(` Status: ${res.data.data.status}`);
// Wait a bit just in case
await new Promise(r => setTimeout(r, 2000));
// 3. Fetch Contract Details & Analytics
console.log('[3/4] Fetching contract details & clauses...');
const detailRes = await request(`/contracts/${contractId}`, {
headers: { 'Authorization': `Bearer ${token}` }
});
if (detailRes.status !== 200) throw new Error('Fetch details failed');
const clauseRes = await request(`/contracts/${contractId}/clauses-detailed?limit=10`, {
headers: { 'Authorization': `Bearer ${token}` }
});
if (clauseRes.status !== 200) throw new Error('Fetch clauses failed');
const summaryRes = await request(`/contracts/${contractId}/risk-summary`, {
headers: { 'Authorization': `Bearer ${token}` }
});
if (summaryRes.status !== 200) throw new Error('Fetch summary failed');
console.log(`✅ Fetched details successfully. Found ${clauseRes.data.data.total} clauses.`);
// 4. Test Chat (Agent 5)
console.log('[4/4] Testing Contract Chat (Agent 5)...');
const chatRes = await request(`/contracts/${contractId}/chat`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({ message: 'What is this contract about?' })
});
if (chatRes.status !== 200) {
throw new Error('Chat failed: ' + JSON.stringify(chatRes.data));
}
console.log(`✅ Chat responded: ${chatRes.data.data.reply.substring(0, 50)}...`);
console.log('--- ALL TESTS PASSED SUCCESSFULLY ---');
} catch (err) {
console.error('❌ TEST FAILED:', err.message);
process.exit(1);
}
}
runTest();