release: v0.12.0 (#520)
Forty-one commits since v0.11.0. See CHANGELOG.md for the full list and the upgrade notes.
This commit is contained in:
60
lib/__tests__/cover-grid.test.ts
Normal file
60
lib/__tests__/cover-grid.test.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
|
||||
// Imported from the schema module directly: it is client-safe (no `fs`), and
|
||||
// going through '@/lib/config' would pull the filesystem loader into the test.
|
||||
import {
|
||||
buildCoverGridVars,
|
||||
COVER_GRID_COLUMNS_MAX,
|
||||
COVER_GRID_GAP_MAX,
|
||||
} from '@/lib/config/schema';
|
||||
|
||||
describe('buildCoverGridVars', () => {
|
||||
it('falls back to the site-wide column count', () => {
|
||||
expect(buildCoverGridVars(undefined, 3)).toEqual({
|
||||
'--subpage-columns': 3,
|
||||
'--subpage-columns-tablet': 2,
|
||||
});
|
||||
});
|
||||
|
||||
it('lets a per-subpage column count win over the site-wide one', () => {
|
||||
expect(buildCoverGridVars({ columns: 4 }, 3)['--subpage-columns']).toBe(4);
|
||||
});
|
||||
|
||||
it('clamps a hand-edited column count into range', () => {
|
||||
// `repeat(0, 1fr)` would collapse the grid, `repeat(99, 1fr)` shred it.
|
||||
expect(buildCoverGridVars({ columns: 0 }, 3)['--subpage-columns']).toBe(1);
|
||||
expect(buildCoverGridVars({ columns: 99 }, 3)['--subpage-columns']).toBe(
|
||||
COVER_GRID_COLUMNS_MAX,
|
||||
);
|
||||
});
|
||||
|
||||
it('falls back to the minimum for a non-numeric column count', () => {
|
||||
// YAML happily yields NaN for `columns: none`, and repeat(NaN, 1fr) drops
|
||||
// the whole declaration.
|
||||
expect(buildCoverGridVars({ columns: Number.NaN }, 3)['--subpage-columns']).toBe(1);
|
||||
});
|
||||
|
||||
it('never puts more than two covers per row on tablet widths', () => {
|
||||
expect(buildCoverGridVars({ columns: 1 }, 3)['--subpage-columns-tablet']).toBe(1);
|
||||
expect(buildCoverGridVars({ columns: 2 }, 3)['--subpage-columns-tablet']).toBe(2);
|
||||
expect(buildCoverGridVars({ columns: 6 }, 3)['--subpage-columns-tablet']).toBe(2);
|
||||
});
|
||||
|
||||
it('omits the gap unless the subpage sets one', () => {
|
||||
// Without the variable the theme preset's own --subpage-gap stands, which
|
||||
// is the whole point of not letting the global grid.gap through.
|
||||
expect(buildCoverGridVars({ columns: 4 }, 3)).not.toHaveProperty('--subpage-gap');
|
||||
expect(buildCoverGridVars(undefined, 3)).not.toHaveProperty('--subpage-gap');
|
||||
});
|
||||
|
||||
it('emits an explicit gap, including zero', () => {
|
||||
expect(buildCoverGridVars({ gap: 24 }, 3)['--subpage-gap']).toBe('24px');
|
||||
// 0 is a deliberate choice (flush covers), not an absent value.
|
||||
expect(buildCoverGridVars({ gap: 0 }, 3)['--subpage-gap']).toBe('0px');
|
||||
});
|
||||
|
||||
it('clamps the gap on both ends', () => {
|
||||
expect(buildCoverGridVars({ gap: -10 }, 3)['--subpage-gap']).toBe('0px');
|
||||
expect(buildCoverGridVars({ gap: 5000 }, 3)['--subpage-gap']).toBe(`${COVER_GRID_GAP_MAX}px`);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user