feat: implement ERP authentication service

Implement ErpAuthService with TDD approach:
- Add login(), close(), getSession(), isActive() methods
- Use Playwright chromium with headless:false for debugging
- Manage browser lifecycle and session state
- Handle authentication flow with ERP_LOCATORS
- Add integration tests for login scenarios
- Add unit tests for session management
- Fix dotenv config path in test setup

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-03-01 12:34:54 +08:00
parent 87f6229d49
commit f045d66b65
4 changed files with 195 additions and 2 deletions

View File

@@ -0,0 +1,40 @@
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 || '',
};
beforeAll(() => {
if (!config.url || !config.username || !config.password) {
throw new Error('Missing ERP credentials in environment variables');
}
authService = new ErpAuthService(config);
});
it('should login successfully', async () => {
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 () => {
const session = await authService.login();
const url = session.page.url();
expect(url).toContain(config.url);
}, 30000);
afterAll(async () => {
await authService?.close();
});
});