merge: 최신 main을 메인 갱신 제어 작업에 통합

This commit is contained in:
2026-08-21 04:51:55 +00:00
22 changed files with 575 additions and 59 deletions
@@ -2291,6 +2291,7 @@ test('keeps Ref command briefs and autonomous-action state after a turn mutation
test('uses drag selection, clipboard paste, and a stored template in advanced mode', async ({ page }) => {
const requests = await install(page);
await page.setViewportSize({ width: 1200, height: 900 });
await page.goto('/');
const editor = page.locator('[data-command-scope="general"]');
@@ -2318,6 +2319,41 @@ test('uses drag selection, clipboard paste, and a stored template in advanced mo
await picker.getByRole('button', { name: '입력', exact: true }).click();
await expect(editor.locator('.action-column > div').nth(2)).toHaveText('【허창】에 화계실행');
const recentMenu = editor.locator('details').filter({ has: page.getByText('최근 실행', { exact: true }) });
await recentMenu.locator('summary').click();
const recentBriefButton = recentMenu.getByRole('button', { name: '【허창】에 화계실행', exact: true });
await expect(recentBriefButton).toBeVisible();
await recentBriefButton.hover();
await page.screenshot({
path: test.info().outputPath('advanced-recent-command-brief-desktop-1200.png'),
fullPage: true,
});
await recentMenu.locator('summary').click();
await page.setViewportSize({ width: 500, height: 900 });
await recentMenu.locator('summary').click();
await expect(recentBriefButton).toBeVisible();
await recentBriefButton.focus();
await expect(recentBriefButton).toBeFocused();
const mobileRecentGeometry = await editor.evaluate((element) => {
const menu = element.querySelector<HTMLElement>('details[open] .menu-items');
const recentButton = menu?.querySelector<HTMLElement>('button');
if (!menu || !recentButton) throw new Error('advanced recent command menu is missing');
return {
horizontalOverflow: element.scrollWidth - element.clientWidth,
menuRight: menu.getBoundingClientRect().right,
buttonRight: recentButton.getBoundingClientRect().right,
};
});
expect(mobileRecentGeometry.horizontalOverflow).toBeLessThanOrEqual(0);
expect(mobileRecentGeometry.menuRight).toBeLessThanOrEqual(500);
expect(mobileRecentGeometry.buttonRight).toBeLessThanOrEqual(500);
await page.screenshot({
path: test.info().outputPath('advanced-recent-command-brief-mobile-500.png'),
fullPage: true,
});
await recentMenu.locator('summary').click();
await page.setViewportSize({ width: 1200, height: 900 });
await drag(0, 2);
await editor.locator('details.selected-menu > summary').click();
await editor.getByRole('button', { name: '복사하기', exact: true }).click();
+12
View File
@@ -112,6 +112,15 @@ const myGeneral = (state: FixtureState) => ({
statUpgradeLimit: 20,
dex: [350, 1_375, 3_500, 7_125, 1_275_975],
},
records: {
battles: 8,
strategies: 12,
serviceYears: 4,
wins: 5,
losses: 3,
killedCrew: 12_345,
lostCrew: 6_789,
},
items: { horse: 'che_명마', weapon: null, book: null, item: null },
itemNames: { horse: '명마', weapon: null, book: null, item: null },
},
@@ -1184,6 +1193,9 @@ test('내 정보&설정 keeps desktop density and becomes a 390px horizontal-ide
expect(myPageImages[1]?.backgroundImage).toContain('/game/crewtype1.png');
await expect(page.locator('.legacy-general-details')).toContainText('계급 29품관');
await expect(page.locator('.legacy-general-details')).toContainText('병종 보병');
await expect(page.locator('.legacy-general-details')).toContainText('전투 8 · 계략 12 · 사관 4년');
await expect(page.locator('.legacy-general-details')).toContainText('승률 62.50% · 승리 5 · 패배 3');
await expect(page.locator('.legacy-general-details')).toContainText('살상률 181.84% · 사살 12,345 · 피살 6,789');
await expect(page.locator('.item-group')).toContainText('명마');
await expect(page.locator('#container')).not.toContainText('che_');
await expect(page.locator('.title-row')).toContainText('내 정 보');