test: enhance E2E and integration testing infrastructure

- Add comprehensive TypeScript types to E2E test helpers
- Improve medication, auth, modal, and wait helper classes with proper typing
- Enhance test data with readonly type assertions for better immutability
- Update integration tests with better error handling and assertions
- Improve Playwright type definitions for better IDE support
- Add environment variable support to manual test scripts
This commit is contained in:
William Valentin
2025-09-07 15:22:33 -07:00
parent 172bb2bd74
commit b4a9318324
6 changed files with 152 additions and 100 deletions

View File

@@ -1,78 +1,100 @@
#!/usr/bin/env bun
const fetch = require('node-fetch');
// Production environment test script
console.log('🧪 Testing Production Environment...\n');
describe('Production Environment', () => {
jest.setTimeout(30000);
// Test 1: Check if CouchDB is accessible
console.log('1⃣ Testing CouchDB connection...');
try {
const response = await fetch('http://localhost:5984/', {
headers: {
Authorization: 'Basic ' + btoa('admin:password'),
},
});
test('CouchDB is accessible', async () => {
console.log('1⃣ Testing CouchDB connection...');
if (response.ok) {
const data = await response.json();
console.log('✅ CouchDB is accessible');
console.log(` Version: ${data.version}`);
} else {
console.log('❌ CouchDB connection failed');
}
} catch (error) {
console.log('❌ CouchDB connection error:', error.message);
}
try {
const response = await fetch('http://localhost:5984/', {
headers: {
Authorization:
'Basic ' + Buffer.from('admin:password').toString('base64'),
},
});
// Test 2: Check if databases exist
console.log('\n2⃣ Checking databases...');
try {
const response = await fetch('http://localhost:5984/_all_dbs', {
headers: {
Authorization: 'Basic ' + btoa('admin:password'),
},
});
if (response.ok) {
const databases = await response.json();
console.log('✅ Available databases:', databases);
const requiredDbs = [
'users',
'medications',
'settings',
'taken_doses',
'reminders',
];
const missing = requiredDbs.filter(db => !databases.includes(db));
if (missing.length === 0) {
console.log('✅ All required databases exist');
} else {
console.log('⚠️ Missing databases:', missing);
if (response.ok) {
const data = await response.json();
console.log('✅ CouchDB is accessible');
console.log(` Version: ${data.version}`);
expect(data.version).toBeDefined();
} else {
console.log('❌ CouchDB connection failed');
fail('CouchDB connection failed');
}
} catch (error) {
console.log('❌ CouchDB connection error:', error.message);
throw error;
}
}
} catch (error) {
console.log('❌ Database check error:', error.message);
}
});
// Test 3: Check if frontend is accessible
console.log('\n3⃣ Testing frontend accessibility...');
try {
const response = await fetch('http://localhost:8080/');
test('Required databases exist', async () => {
console.log('2⃣ Checking databases...');
if (response.ok) {
console.log('✅ Frontend is accessible at http://localhost:8080');
} else {
console.log('❌ Frontend connection failed');
}
} catch (error) {
console.log('❌ Frontend connection error:', error.message);
}
try {
const response = await fetch('http://localhost:5984/_all_dbs', {
headers: {
Authorization:
'Basic ' + Buffer.from('admin:password').toString('base64'),
},
});
console.log('\n🎯 Production Environment Test Summary:');
console.log(' • CouchDB: http://localhost:5984');
console.log(' • Frontend: http://localhost:8080');
console.log(' • Admin Login: admin@localhost / admin123!');
console.log(
'\n🚀 Your medication reminder app is ready for production testing!'
);
if (response.ok) {
const databases = await response.json();
console.log('✅ Available databases:', databases);
const requiredDbs = [
'users',
'medications',
'settings',
'taken_doses',
'reminders',
];
const missing = requiredDbs.filter(db => !databases.includes(db));
if (missing.length === 0) {
console.log('✅ All required databases exist');
expect(missing).toHaveLength(0);
} else {
console.log('⚠️ Missing databases:', missing);
console.warn(`Missing databases: ${missing.join(', ')}`);
}
} else {
fail('Failed to fetch database list');
}
} catch (error) {
console.log('❌ Database check error:', error.message);
throw error;
}
});
test('Frontend is accessible', async () => {
console.log('3⃣ Testing frontend accessibility...');
try {
const response = await fetch('http://localhost:8080/');
if (response.ok) {
console.log('✅ Frontend is accessible at http://localhost:8080');
expect(response.status).toBe(200);
} else {
console.log('❌ Frontend connection failed');
console.warn('Frontend may not be running');
}
} catch (error) {
console.log('❌ Frontend connection error:', error.message);
console.warn('Frontend may not be running');
}
});
afterAll(() => {
console.log('\n🎯 Production Environment Test Summary:');
console.log(' • CouchDB: http://localhost:5984');
console.log(' • Frontend: http://localhost:8080');
console.log(' • Admin Login: admin@localhost / admin123!');
console.log(
'\n🚀 Your medication reminder app is ready for production testing!'
);
});
});