Refine admin login flow and verification harness
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m21s
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m21s
This commit is contained in:
@@ -1,29 +1,12 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
import { navigateInBlazor } from './helpers/admin-auth';
|
||||
import { captureEvidence } from './helpers/evidence';
|
||||
|
||||
const baseUrl = process.env.E2E_BASE_URL || 'http://localhost:5001/taxbaik';
|
||||
const baseUrl = process.env.E2E_BASE_URL || 'https://www.taxbaik.com/taxbaik';
|
||||
const username = process.env.E2E_ADMIN_USERNAME || 'test_admin';
|
||||
const password = process.env.E2E_ADMIN_PASSWORD || 'TestAdmin@123456';
|
||||
const password = process.env.E2E_ADMIN_PASSWORD || 'admin123';
|
||||
|
||||
test.describe('Admin Pages E2E (Manual)', () => {
|
||||
let token: string;
|
||||
|
||||
test.beforeAll(async () => {
|
||||
// Login and get token
|
||||
const response = await fetch(`${baseUrl}/api/auth/login`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ username, password })
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Login failed: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
token = data.accessToken;
|
||||
console.log(`✅ Logged in. Token: ${token?.substring(0, 20)}...`);
|
||||
});
|
||||
|
||||
test('Login page loads', async ({ page }) => {
|
||||
await page.goto(`${baseUrl}/admin/login`);
|
||||
await expect(page.locator('text=관리자 로그인')).toBeVisible();
|
||||
@@ -31,58 +14,56 @@ test.describe('Admin Pages E2E (Manual)', () => {
|
||||
});
|
||||
|
||||
test('Dashboard page loads', async ({ page }) => {
|
||||
await page.goto(`${baseUrl}/admin/dashboard`);
|
||||
await page.context().addCookies([{
|
||||
name: 'Authorization',
|
||||
value: `Bearer ${token}`,
|
||||
url: baseUrl
|
||||
}]);
|
||||
await page.reload();
|
||||
await page.goto(`${baseUrl}/admin/login`);
|
||||
await page.fill('input[name="username"]', username);
|
||||
await page.fill('input[name="password"]', password);
|
||||
await page.click('button[type="submit"]');
|
||||
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
||||
|
||||
// Check if dashboard loaded
|
||||
const content = await page.content();
|
||||
expect(content.includes('대시보드') || content.includes('세무')).toBeTruthy();
|
||||
|
||||
// Screenshot
|
||||
await page.screenshot({ path: 'test-results/dashboard.png' });
|
||||
console.log('✅ Dashboard screenshot saved');
|
||||
await captureEvidence(page, test.info(), 'dashboard-manual');
|
||||
});
|
||||
|
||||
test('Blog page loads', async ({ page }) => {
|
||||
await page.goto(`${baseUrl}/admin/blog`);
|
||||
await page.context().addCookies([{
|
||||
name: 'Authorization',
|
||||
value: `Bearer ${token}`,
|
||||
url: baseUrl
|
||||
}]);
|
||||
await page.reload();
|
||||
await page.goto(`${baseUrl}/admin/login`);
|
||||
await page.fill('input[name="username"]', username);
|
||||
await page.fill('input[name="password"]', password);
|
||||
await page.click('button[type="submit"]');
|
||||
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
||||
await navigateInBlazor(page, `${baseUrl}/admin/blog`);
|
||||
|
||||
const content = await page.content();
|
||||
const loaded = content.includes('블로그') || page.url().includes('/admin/blog');
|
||||
console.log(`Blog page loaded: ${loaded}, URL: ${page.url()}`);
|
||||
|
||||
await page.screenshot({ path: 'test-results/blog.png' });
|
||||
console.log('✅ Blog screenshot saved');
|
||||
await captureEvidence(page, test.info(), 'blog-manual');
|
||||
});
|
||||
|
||||
test('Inquiry page loads', async ({ page }) => {
|
||||
await page.goto(`${baseUrl}/admin/inquiries`);
|
||||
await page.context().addCookies([{
|
||||
name: 'Authorization',
|
||||
value: `Bearer ${token}`,
|
||||
url: baseUrl
|
||||
}]);
|
||||
await page.reload();
|
||||
await page.goto(`${baseUrl}/admin/login`);
|
||||
await page.fill('input[name="username"]', username);
|
||||
await page.fill('input[name="password"]', password);
|
||||
await page.click('button[type="submit"]');
|
||||
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
||||
await navigateInBlazor(page, `${baseUrl}/admin/inquiries`);
|
||||
|
||||
const content = await page.content();
|
||||
const loaded = content.includes('문의') || page.url().includes('/admin/inquiries');
|
||||
console.log(`Inquiry page loaded: ${loaded}, URL: ${page.url()}`);
|
||||
|
||||
await page.screenshot({ path: 'test-results/inquiries.png' });
|
||||
console.log('✅ Inquiries screenshot saved');
|
||||
await captureEvidence(page, test.info(), 'inquiries-manual');
|
||||
});
|
||||
|
||||
test('CRM pages load', async ({ page }) => {
|
||||
await page.goto(`${baseUrl}/admin/login`);
|
||||
await page.fill('input[name="username"]', username);
|
||||
await page.fill('input[name="password"]', password);
|
||||
await page.click('button[type="submit"]');
|
||||
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
||||
const pages = [
|
||||
'/admin/tax-profiles',
|
||||
'/admin/contracts',
|
||||
@@ -90,18 +71,12 @@ test.describe('Admin Pages E2E (Manual)', () => {
|
||||
];
|
||||
|
||||
for (const adminPage of pages) {
|
||||
await page.goto(`${baseUrl}${adminPage}`);
|
||||
await page.context().addCookies([{
|
||||
name: 'Authorization',
|
||||
value: `Bearer ${token}`,
|
||||
url: baseUrl
|
||||
}]);
|
||||
await page.reload();
|
||||
await navigateInBlazor(page, `${baseUrl}${adminPage}`);
|
||||
|
||||
const url = page.url();
|
||||
console.log(`✅ Page loaded: ${adminPage} (URL: ${url})`);
|
||||
|
||||
await page.screenshot({ path: `test-results/${adminPage.split('/').pop()}.png` });
|
||||
await captureEvidence(page, test.info(), adminPage.replace(/\//g, '_'));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user