diff --git a/backend/Cargo.lock b/backend/Cargo.lock index fdd3f4e..906bb04 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -1558,7 +1558,7 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "mangalord" -version = "0.110.0" +version = "0.111.0" dependencies = [ "anyhow", "argon2", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 3342068..1105a02 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mangalord" -version = "0.110.0" +version = "0.111.0" edition = "2021" default-run = "mangalord" diff --git a/frontend/package.json b/frontend/package.json index 12b924f..48e1360 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mangalord-frontend", - "version": "0.110.0", + "version": "0.111.0", "private": true, "type": "module", "scripts": { diff --git a/frontend/src/lib/components/MangaGridSkeleton.svelte b/frontend/src/lib/components/MangaGridSkeleton.svelte new file mode 100644 index 0000000..b3b3666 --- /dev/null +++ b/frontend/src/lib/components/MangaGridSkeleton.svelte @@ -0,0 +1,35 @@ + + +
+ + diff --git a/frontend/src/lib/components/MangaGridSkeleton.svelte.test.ts b/frontend/src/lib/components/MangaGridSkeleton.svelte.test.ts new file mode 100644 index 0000000..acf3000 --- /dev/null +++ b/frontend/src/lib/components/MangaGridSkeleton.svelte.test.ts @@ -0,0 +1,31 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { render, screen, cleanup } from '@testing-library/svelte'; +import MangaGridSkeleton from './MangaGridSkeleton.svelte'; + +afterEach(() => cleanup()); + +describe('MangaGridSkeleton', () => { + it('renders 12 card skeletons by default', () => { + render(MangaGridSkeleton); + const root = screen.getByTestId('manga-grid-skeleton'); + expect(root.querySelectorAll('.manga-card').length).toBe(12); + }); + + it('honours the count prop', () => { + render(MangaGridSkeleton, { props: { count: 4 } }); + const root = screen.getByTestId('manga-grid-skeleton'); + expect(root.querySelectorAll('.manga-card').length).toBe(4); + }); + + it('reuses the shared .manga-grid layout class', () => { + render(MangaGridSkeleton); + expect(screen.getByTestId('manga-grid-skeleton').classList.contains('manga-grid')).toBe( + true + ); + }); + + it('is decorative so the container announces loading', () => { + render(MangaGridSkeleton); + expect(screen.getByTestId('manga-grid-skeleton').getAttribute('aria-hidden')).toBe('true'); + }); +});