diff options
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` + ); + }); +}); |
