aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/molecules/grid/grid.test.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/molecules/grid/grid.test.tsx')
-rw-r--r--src/components/molecules/grid/grid.test.tsx69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/components/molecules/grid/grid.test.tsx b/src/components/molecules/grid/grid.test.tsx
new file mode 100644
index 0000000..212bdc4
--- /dev/null
+++ b/src/components/molecules/grid/grid.test.tsx
@@ -0,0 +1,69 @@
+import { describe, expect, it } from '@jest/globals';
+import { render, screen as rtlScreen } from '@testing-library/react';
+import { Grid, type GridItem } from './grid';
+
+const items: GridItem[] = [
+ { id: 'item-1', item: 'Item 1' },
+ { id: 'item-2', item: 'Item 2' },
+ { id: 'item-3', item: 'Item 3' },
+ { id: 'item-4', item: 'Item 4' },
+ { id: 'item-5', item: 'Item 5' },
+];
+
+describe('Grid', () => {
+ it('render a list of items as grid', () => {
+ render(<Grid items={items} />);
+
+ expect(rtlScreen.getAllByRole('listitem')).toHaveLength(items.length);
+ });
+
+ it('can render a list of items with fixed size', () => {
+ const size = '200px';
+
+ render(<Grid items={items} size={size} />);
+
+ expect(rtlScreen.getByRole('list')).toHaveClass('wrapper--has-fixed-size');
+ expect(rtlScreen.getByRole('list')).toHaveStyle({ '--size': size });
+ });
+
+ it('can render a list of items with min size', () => {
+ const size = '200px';
+
+ render(<Grid items={items} sizeMin={size} />);
+
+ expect(rtlScreen.getByRole('list')).toHaveClass('wrapper--has-min-size');
+ expect(rtlScreen.getByRole('list')).toHaveStyle({ '--size-min': size });
+ });
+
+ it('can render a list of items with max size', () => {
+ const size = '200px';
+
+ render(<Grid items={items} sizeMax={size} />);
+
+ expect(rtlScreen.getByRole('list')).toHaveStyle({ '--size-max': size });
+ });
+
+ it('can render a list of items with a custom gap', () => {
+ const gap = 'md';
+
+ render(<Grid items={items} gap={gap} />);
+
+ expect(rtlScreen.getByRole('list')).toHaveStyle({
+ '--gap': `var(--spacing-${gap})`,
+ });
+ });
+
+ it('can render a list of items with an explicit number of columns', () => {
+ const col = 4;
+
+ render(<Grid col={col} items={items} />);
+
+ expect(rtlScreen.getByRole('list')).toHaveStyle(`--col: ${col}`);
+ });
+
+ it('can render a centered list of items', () => {
+ render(<Grid isCentered items={items} />);
+
+ expect(rtlScreen.getByRole('list')).toHaveClass('wrapper--is-centered');
+ });
+});