Implement Task 3.1: Core Extractor Logic with TDD approach. Changes: - Add ExtractorService class with batch processing and download support - Update ERP_LOCATORS with extractor-specific selectors from Python reference - Add integration tests for single and multiple order extraction - Add unit tests for batch creation logic - Update existing tests to skip gracefully without ERP credentials Features: - Navigate to discrete material plan page with nested iframes - Setup query interface (search icon, order query, limit settings) - Batch download with configurable batch size (default: 100) - Progress callback support for real-time updates - Error handling for individual batch failures - File download handling with proper wait strategies Reference: playwrite/utils/discrete_material_plan_extractor.py Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
import { ErpAuthService } from '../../src/main/services/erp/erp-auth';
|
|
import type { ErpConfig } from '../../src/main/types/erp.types';
|
|
|
|
describe('ERP Authentication Service (Integration)', () => {
|
|
let authService: ErpAuthService;
|
|
const config: ErpConfig = {
|
|
url: process.env.ERP_URL || '',
|
|
username: process.env.ERP_USERNAME || '',
|
|
password: process.env.ERP_PASSWORD || '',
|
|
};
|
|
|
|
// Check if we have ERP credentials
|
|
const hasCredentials = !!(config.url && config.username && config.password);
|
|
|
|
beforeAll(() => {
|
|
if (!hasCredentials) {
|
|
console.warn('Skipping ERP auth tests: credentials not configured');
|
|
return;
|
|
}
|
|
authService = new ErpAuthService(config);
|
|
});
|
|
|
|
it('should login successfully', async () => {
|
|
if (!hasCredentials) {
|
|
console.warn('Skipping test: ERP credentials not configured');
|
|
return;
|
|
}
|
|
|
|
const session = await authService.login();
|
|
|
|
expect(session).toBeDefined();
|
|
expect(session.browser).toBeDefined();
|
|
expect(session.context).toBeDefined();
|
|
expect(session.page).toBeDefined();
|
|
expect(session.isLoggedIn).toBe(true);
|
|
}, 30000);
|
|
|
|
it('should navigate to main page after login', async () => {
|
|
if (!hasCredentials) {
|
|
console.warn('Skipping test: ERP credentials not configured');
|
|
return;
|
|
}
|
|
|
|
const session = await authService.login();
|
|
|
|
const url = session.page.url();
|
|
expect(url).toContain(config.url);
|
|
}, 30000);
|
|
|
|
afterAll(async () => {
|
|
if (hasCredentials && authService) {
|
|
await authService.close();
|
|
}
|
|
});
|
|
});
|