diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-11-06 18:08:04 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:15:27 +0100 |
| commit | c9c1c90b30e243563bb4f731da15b3fe657556d2 (patch) | |
| tree | 8263c176b4096e2893b9d9319bfa7edb01fce188 /src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx | |
| parent | 2771de88f40a5f4ed7480bd8614532dda72deeda (diff) | |
refactor(components): replace Summary component with PostPreview
* rename component to PostPreview because Summary is an HTML element
and it could lead to confusion
* replace `title` and `titleLevel` with `heading` and `headingLvl`
because `title` is a native attribute
* rename `intro` prop to `excerpt`
* extract `cover` from `meta` prop
* rewrite meta type
* extract meta logic into a new component
Diffstat (limited to 'src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx')
| -rw-r--r-- | src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx b/src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx new file mode 100644 index 0000000..188afcc --- /dev/null +++ b/src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx @@ -0,0 +1,141 @@ +import { describe, expect, it } from '@jest/globals'; +import { render, screen as rtlScreen } from '../../../../../tests/utils'; +import { getReadingTimeFrom } from '../../../../utils/helpers'; +import { PostPreviewMeta, type PostPreviewMetaData } from './post-preview-meta'; + +describe('PostPreviewMeta', () => { + it('can render a meta for the author', () => { + const meta = { + author: 'Gilberto70', + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Written by:'); + expect(rtlScreen.getByRole('definition')).toHaveTextContent(meta.author); + }); + + it('can render a meta for a single comment', () => { + const meta = { + comments: { + count: 1, + postHeading: 'quae commodi deserunt', + }, + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Comments:'); + expect(rtlScreen.getByRole('definition').textContent).toBe( + `${meta.comments.count} comment about ${meta.comments.postHeading}` + ); + }); + + it('can render a meta for comments with a link', () => { + const meta = { + comments: { + count: 3, + postHeading: 'quae commodi deserunt', + url: '#temporibus', + }, + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Comments:'); + expect(rtlScreen.getByRole('definition').textContent).toBe( + `${meta.comments.count} comments about ${meta.comments.postHeading}` + ); + expect(rtlScreen.getByRole('link')).toHaveAttribute( + 'href', + meta.comments.url + ); + }); + + it('can render a meta for the publication date', () => { + const meta = { + publicationDate: '2002', + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Published on:'); + expect(rtlScreen.getByRole('definition')).toHaveTextContent( + meta.publicationDate + ); + }); + + it('can render a meta for thematics', () => { + const meta = { + thematics: [{ id: 1, name: 'autem', url: '#est' }], + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Thematic:'); + expect(rtlScreen.getByRole('definition')).toHaveTextContent( + meta.thematics[0].name + ); + expect(rtlScreen.getByRole('link')).toHaveAttribute( + 'href', + meta.thematics[0].url + ); + }); + + it('can render a meta for topics', () => { + const meta = { + topics: [{ id: 1, name: 'hic', url: '#ipsa' }], + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Topic:'); + expect(rtlScreen.getByRole('definition')).toHaveTextContent( + meta.topics[0].name + ); + expect(rtlScreen.getByRole('link')).toHaveAttribute( + 'href', + meta.topics[0].url + ); + }); + + it('can render a meta for the update date', () => { + const meta = { + updateDate: '2020', + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Updated on:'); + expect(rtlScreen.getByRole('definition')).toHaveTextContent( + meta.updateDate + ); + }); + + it('does not render a meta for the update date if it is equal to the publication date', () => { + const meta = { + publicationDate: '2020', + updateDate: '2020', + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + const terms = rtlScreen.getAllByRole('term'); + + expect(terms.length).toBe(1); + expect(terms[0].textContent).toBe('Published on:'); + }); + + it('can render a meta for the reading time', () => { + const meta = { + wordsCount: 500, + } satisfies PostPreviewMetaData; + + render(<PostPreviewMeta meta={meta} />); + + expect(rtlScreen.getByRole('term')).toHaveTextContent('Reading time:'); + expect(rtlScreen.getByRole('definition')).toHaveTextContent( + `${getReadingTimeFrom(meta.wordsCount).inMinutes()} minutes` + ); + }); +}); |
