- Debian-based api image (bookworm-slim), docker/debian mirrors, prisma binaryTargets for openssl 3.0 - nginx: admin SPA under /admin, TLS via acme.sh (ZeroSSL) + auto-renewal cron, http->https redirect - prisma: add origin_goods.delisted migration, sync missing schema (good_image/tag_font_color/good_tags), fix users.createdAt Timestamptz - api: CORS wildcard reflection, helmet CORP cross-origin, price backfill in persistProductDetail, categoryIcon ancestor fallback, mediaByColor per-color gallery in public goods detail - admin: /admin base path (vite + router) - import-data.mjs: udt_name casting, serial sequence advance fix
29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
import { readFileSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
describe('product center layout', () => {
|
|
it('removes the sidebar left edge and extends filter dividers to the viewport right', () => {
|
|
const source = readFileSync(
|
|
resolve(process.cwd(), 'app/pages/product-center.vue'),
|
|
'utf8',
|
|
);
|
|
|
|
expect(source).not.toMatch(/\.sidebar-shell\s*\{[^}]*border-left:/u);
|
|
expect(source).toContain('.countries::after, .filter-tools::after');
|
|
expect(source).toContain('right: calc(-1 * var(--page-gutter))');
|
|
expect(source).toContain('left: 0');
|
|
expect(source).toContain('height: 1px');
|
|
expect(source).toContain('background: #e5e7eb');
|
|
});
|
|
|
|
it('adds breathing room between root category rows', () => {
|
|
const source = readFileSync(
|
|
resolve(process.cwd(), 'app/components/product/ProductSidebar.vue'),
|
|
'utf8',
|
|
);
|
|
|
|
expect(source).toMatch(/\.root-row\s*\{[^}]*margin-bottom:\s*10px/u);
|
|
});
|
|
});
|