Files
Gnuboard5/tests/shop_category_layout.js
T
whitedot e2d215c368 fix: 쇼핑몰 5단계 분류 경로와 서브메뉴 표시 일관성 보완
PC·basic 테마 breadcrumb를 5단계로 확장하고 기존 위치와 스타일을 유지한다. PC·모바일 서브메뉴는 5단계가 있으면 해당 목록만, 없으면 4단계 형제 목록만 표시한다.

검증: 8개 분류 경로와 네 스킨의 메뉴·선택 상태, Chromium 목록·상세 단계별 레이아웃 검사, PHP 5.2 및 현재 PHP 구문 검사 통과.
2026-09-15 06:19:00 +00:00

45 lines
3.2 KiB
JavaScript

// 실행: NODE_PATH=<Playwright 경로>/node_modules CHROME_PATH=<Chromium 실행 파일> node tests/shop_category_layout.js
const fs = require('fs');
const path = require('path');
const assert = require('assert');
const {execFileSync} = require('child_process');
const {chromium} = require('playwright');
const root = path.dirname(__dirname);
const read = file => fs.readFileSync(path.join(root, file), 'utf8');
const fixtures = JSON.parse(execFileSync('php', [path.join(__dirname, 'shop_category_navigation.php'), '--json'], {encoding:'utf8'}));
(async () => {
const browser = await chromium.launch({headless:true, ...(process.env.CHROME_PATH ? {executablePath:process.env.CHROME_PATH} : {}), args:['--no-sandbox']});
try {
for (const skin of ['skin/shop/basic', 'theme/basic/skin/shop/basic']) {
for (const view of ['list', 'item']) {
const page = await browser.newPage({viewport:{width:1920, height:1080}});
let baseline;
for (const id of ['10', '101010', '10101010', '1010101010']) {
let html = fixtures[skin][id].replace(/<script>[\s\S]*?<\/script>/g, '');
if (view === 'list') html = html.replace('view_location', 'is_list is_right');
await page.setContent('<style>'+read(skin.startsWith('theme/') ? 'theme/basic/css/default_shop.css' : 'css/default_shop.css')+'\n'+read(skin+'/style.css')+'</style><div id="container"><div class="shop-content"><div id="wrapper_title">상품리스트</div><div class="sct_admin"><a>분류 관리</a></div><div id="sct">'+html+'<div id="sct_sortlst">상품 정렬</div></div></div></div>');
await page.addScriptTag({content:read('js/jquery-1.12.4.min.js')});
await page.addScriptTag({content:read('js/shop.category.navigation.js')});
await page.evaluate(() => new Promise(resolve => jQuery(() => {
jQuery('select.shop_hover_selectbox').shop_select_to_html();
resolve();
})));
const layout = await page.evaluate(() => {
const nav = document.getElementById('sct_location');
const rect = nav.getBoundingClientRect();
return {top:rect.top, height:rect.height, position:getComputedStyle(nav).position,
menuTop:document.getElementById('sct_ct_1').getBoundingClientRect().top,
sortTop:document.getElementById('sct_sortlst').getBoundingClientRect().top};
});
if (!baseline) baseline = layout;
assert.deepStrictEqual(layout, baseline, skin+' '+view+' '+id+' 단계 변경 시 레이아웃 유지');
assert.strictEqual(await page.locator('.shop_select_to_html').count(), id.length / 2);
assert.strictEqual(await page.locator('#sct_ct_1 ul').count(), 1);
}
await page.close();
}
}
console.log('PC·basic 테마 목록/상세: 1·3·4·5단계 breadcrumb 위치·높이와 메뉴·정렬 영역 위치 동일');
} finally { await browser.close(); }
})().catch(error => { console.error(error); process.exitCode = 1; });