aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/organisms/post-preview/post-preview-meta/post-preview-meta.test.tsx
diff options
context:
space:
mode:
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.tsx141
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`
+ );
+ });
+});