feat: implement ERP-style split pane master-detail layout for tax profiles, schedules, and contracts backoffice pages
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m31s

This commit is contained in:
2026-06-30 22:44:32 +09:00
parent 80c97fba96
commit b2477d977b
4 changed files with 447 additions and 361 deletions
+11 -11
View File
@@ -90,14 +90,13 @@ test.describe('admin CRM pages', () => {
}
});
test('TaxProfiles modal dialog opens on add button click', async ({ page }) => {
test('TaxProfiles editor panel is visible on add button click', async ({ page }) => {
await navigateInBlazor(page, `${baseUrl}/admin/tax-profiles`);
const addButton = page.getByRole('button', { name: /새 프로필 추가/ });
await expect(addButton).toBeVisible();
await addButton.click();
await expect(page).toHaveURL(/\/taxbaik\/admin\/tax-profiles$/);
await expect(addButton).toBeVisible();
await expect(page.locator('.admin-editor-panel')).toBeVisible({ timeout: 5000 });
});
test('No console errors on CRM page navigation', async ({ page }) => {
@@ -131,11 +130,11 @@ test.describe('admin CRM pages', () => {
const addButton = page.getByRole('button', { name: /새 프로필 추가/ });
await addButton.click();
// 대화상자(MudDialog) 자체의 노출 대기
await expect(page.locator('.mud-dialog')).toBeVisible({ timeout: 5000 });
// 분할 편집기(admin-editor-panel) 노출 대기
await expect(page.locator('.admin-editor-panel')).toBeVisible({ timeout: 5000 });
// mud-select 내의 input 클릭 (이벤트 핸들러 격발 유도)
const select = page.locator('.mud-dialog .mud-select').filter({ hasText: '사업 유형' }).first();
const select = page.locator('.admin-editor-panel .mud-select').filter({ hasText: '사업 유형' }).first();
await page.waitForTimeout(500);
await select.locator('input').click();
@@ -153,9 +152,9 @@ test.describe('admin CRM pages', () => {
const addButton = page.getByRole('button', { name: /새 일정 추가/ });
await addButton.click();
await expect(page.locator('.mud-dialog')).toBeVisible({ timeout: 5000 });
await expect(page.locator('.admin-editor-panel')).toBeVisible({ timeout: 5000 });
const select = page.locator('.mud-dialog .mud-select').filter({ hasText: '신고 유형' }).first();
const select = page.locator('.admin-editor-panel .mud-select').filter({ hasText: '신고 유형' }).first();
await page.waitForTimeout(500);
await select.locator('input').click();
@@ -171,9 +170,9 @@ test.describe('admin CRM pages', () => {
const addButton = page.getByRole('button', { name: /새 계약 추가/ });
await addButton.click();
await expect(page.locator('.mud-dialog')).toBeVisible({ timeout: 5000 });
await expect(page.locator('.admin-editor-panel')).toBeVisible({ timeout: 5000 });
const select = page.locator('.mud-dialog .mud-select').filter({ hasText: '서비스 유형' }).first();
const select = page.locator('.admin-editor-panel .mud-select').filter({ hasText: '서비스 유형' }).first();
await page.waitForTimeout(500);
await select.locator('input').click();
@@ -181,4 +180,5 @@ test.describe('admin CRM pages', () => {
await expect(popover.getByText('개인 기장대리')).toBeVisible({ timeout: 5000 });
await expect(popover.getByText('법인 기장대리')).toBeVisible({ timeout: 5000 });
});
});
}
);