5180 fichiers 38.5 Mo 0 téléchargements 221 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / css / catalog / CatalogResponsiveGrid.test.ts
CatalogResponsiveGrid.test.ts 4.6 Ko Télécharger le fichier
/* @vitest-environment jsdom */
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
import { afterEach, describe, expect, it } from 'vitest';

const catalogCss = readFileSync(resolve(process.cwd(), 'src/css/catalog/CatalogView.css'), 'utf8');
const experienceCss = readFileSync(resolve(process.cwd(), 'src/css/catalog/CatalogExperience.css'), 'utf8');

afterEach(() => {
    document.body.replaceChildren();
    document.head.replaceChildren();
});

describe('responsive catalog item grid', () => {
    it('uses the selected tile width to add columns when the catalog expands', () => {
        const stylesheet = document.createElement('style');
        const grid = document.createElement('div');

        stylesheet.textContent = `${catalogCss}\n${experienceCss}`;
        grid.className = 'octane-catalog-grid octane-catalog-grid-density-standard';
        document.head.append(stylesheet);
        document.body.append(grid);

        const style = getComputedStyle(grid);

        expect(style.getPropertyValue('--octane-grid-column-min-width').trim()).toBe('53px');
        expect(style.gridTemplateColumns.replaceAll(' ', '')).toBe('repeat(var(--octane-air-column-count,6),53px)');
    });

    it('keeps the last column clear of the visible classic scrollbar', () => {
        const stylesheet = document.createElement('style');
        const scrollArea = document.createElement('div');
        const viewport = document.createElement('div');
        const scrollbar = document.createElement('div');

        stylesheet.textContent = `${catalogCss}\n${experienceCss}`;
        scrollArea.className = 'octane-classic-scroll-area octane-catalog-item-grid-scroll-area';
        viewport.className = 'octane-classic-scroll-area-viewport';
        scrollbar.className = 'octane-classic-scrollbar';
        scrollbar.dataset.visible = 'true';
        scrollArea.append(viewport, scrollbar);
        document.head.append(stylesheet);
        document.body.append(scrollArea);

        expect(getComputedStyle(viewport).paddingRight).toBe('17px');
    });

    it('keeps virtualized catalog columns clear of the visible classic scrollbar', () => {
        const stylesheet = document.createElement('style');
        const virtualGrid = document.createElement('div');
        const scrollArea = document.createElement('div');
        const viewport = document.createElement('div');
        const scrollbar = document.createElement('div');

        stylesheet.textContent = `${catalogCss}\n${experienceCss}`;
        virtualGrid.className = 'octane-catalog-grid-virtual';
        scrollArea.className = 'octane-classic-scroll-area';
        viewport.className = 'octane-classic-scroll-area-viewport';
        scrollbar.className = 'octane-classic-scrollbar';
        scrollbar.dataset.visible = 'true';
        scrollArea.append(viewport, scrollbar);
        virtualGrid.append(scrollArea);
        document.head.append(stylesheet);
        document.body.append(virtualGrid);

        expect(getComputedStyle(viewport).paddingRight).toBe('17px');
    });

    it('keeps auto-fill active at the compact catalog breakpoint', () => {
        const compactRule =
            catalogCss.match(/@media \(max-width: 640px\)[\s\S]*?\.octane-catalog-grid:not\(\.octane-catalog-grid-density-standard\)\s*\{([^}]*)\}/)?.[1] ?? '';

        expect(compactRule.replaceAll(' ', '')).toContain('grid-template-columns:repeat(auto-fill,minmax(var(--octane-grid-column-min-width,47px),1fr))');
        expect(compactRule).not.toContain('--octane-air-column-count');
    });

    it('lets fixed-coordinate offer templates expose the full catalog width to auto-fill', () => {
        const stylesheet = document.createElement('style');
        const layout = document.createElement('div');
        const preview = document.createElement('div');
        const grid = document.createElement('div');
        const purchase = document.createElement('div');

        stylesheet.textContent = `${catalogCss}\n${experienceCss}`;
        layout.className = 'octane-catalog-pet-customization-layout';
        preview.className = 'octane-catalog-pet-customization-preview';
        grid.className = 'octane-catalog-pet-customization-grid';
        purchase.className = 'octane-catalog-pet-customization-purchase';
        layout.append(preview, grid, purchase);
        document.head.append(stylesheet);
        document.body.append(layout);

        expect(getComputedStyle(layout).width).toBe('100%');
        expect(getComputedStyle(preview).width).toBe('100%');
        expect(getComputedStyle(grid).width).toBe('100%');
        expect(getComputedStyle(purchase).width).toBe('100%');
    });
});
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser