/* @vitest-environment jsdom */
import { render, screen } from '@testing-library/react';
import { expect, test, vi } from 'vitest';
import { PlatformMediaTileGrid } from './PlatformMediaTileGrid';
vi.mock('../ResolvedAssetImage', () => ({
ResolvedAssetImage: ({
src,
alt,
className,
refreshKey,
}: {
src?: string | null;
alt?: string;
className?: string;
refreshKey?: string | number | null;
}) =>
src ? (
) : null,
}));
test('renders soft square tile grid with media frames', () => {
const { container } = render(
,
},
]}
/>,
);
const grid = container.querySelector('.platform-media-tile-grid');
const image = screen.getByRole('img', { name: '地块 1' });
const fallbackDot = screen.getByTestId('fallback-dot');
const itemFrames = container.querySelectorAll(
'.platform-media-tile-grid__item',
);
expect(grid?.className).toContain('grid-cols-5');
expect(grid?.className).toContain('aspect-[1/1]');
expect(grid?.className).toContain('bg-white/78');
expect(image.className).toContain('object-contain');
expect(image.getAttribute('data-refresh-key')).toBe('asset-tile-1');
expect(image.closest('[data-testid="tile-preview-1"]')).toBe(
screen.getByTestId('tile-preview-1'),
);
expect(itemFrames).toHaveLength(2);
expect(itemFrames[0]?.className).toContain('bg-slate-50');
expect(itemFrames[0]?.className).not.toContain(
'bg-[var(--platform-subpanel-fill)]',
);
expect(fallbackDot.closest('.platform-media-tile-grid__item')).toBeTruthy();
});
test('renders six-column white tile grid by default', () => {
const { container } = render(
,
);
const grid = container.querySelector('.platform-media-tile-grid');
const item = container.querySelector('.platform-media-tile-grid__item');
expect(grid?.className).toContain('grid-cols-6');
expect(grid?.className).toContain('gap-1.5');
expect(item?.className).toContain('bg-white');
expect(item?.className).toContain('shadow-sm');
expect(item?.className).toContain('rounded-[0.45rem]');
expect(item?.className).not.toContain('bg-[var(--platform-subpanel-fill)]');
});