1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
import { describe, expect, it } from '@jest/globals';
import { render, screen as rtlScreen } from '../../../../tests/utils';
import { PageHeader, type PageHeaderMetaData } from './page-header';
describe('PageHeader', () => {
it('renders the page title', () => {
const title = 'nostrum et impedit';
render(<PageHeader heading={title} />);
expect(rtlScreen.getByRole('heading', { level: 1 })).toHaveTextContent(
title
);
});
it('can render an introduction', () => {
const title = 'nostrum et impedit';
const intro =
'Non reiciendis error eveniet deserunt vel quis debitis incidunt voluptas. Distinctio dolorem reiciendis molestias et velit. Aut distinctio autem dolore ratione neque laudantium sed. Asperiores quo qui omnis maiores.';
render(<PageHeader heading={title} intro={intro} />);
expect(rtlScreen.getByText(intro)).toBeInTheDocument();
});
it('can render a meta for the author', () => {
const title = 'nostrum et impedit';
const meta = {
author: 'Edward_Hansen72',
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Written by:');
expect(rtlScreen.getByRole('definition')).toHaveTextContent(meta.author);
});
it('can render a meta for the publication date', () => {
const title = 'nostrum et impedit';
const meta = {
publicationDate: '2023-11-19',
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Published on:');
});
it('can render a meta for the thematics', () => {
const title = 'nostrum et impedit';
const meta = {
thematics: [
{ id: 1, name: 'Thematic 1', url: '#thematic1' },
{ id: 2, name: 'Thematic 2', url: '#thematic2' },
],
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Thematics:');
expect(rtlScreen.getAllByRole('definition')).toHaveLength(
meta.thematics.length
);
});
it('can render a meta for the posts total', () => {
const title = 'nostrum et impedit';
const meta = {
total: 40,
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Total:');
expect(rtlScreen.getByRole('definition')).toHaveTextContent(
new RegExp(`${meta.total}`)
);
});
it('can render a meta for the update date', () => {
const title = 'nostrum et impedit';
const meta = {
updateDate: '2023-11-20',
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Updated on:');
});
it('can render a meta for the website', () => {
const title = 'nostrum et impedit';
const meta = {
website: 'https://example.test',
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Website:');
expect(rtlScreen.getByRole('definition')).toHaveTextContent(meta.website);
});
it('can render a meta for the reading time', () => {
const title = 'nostrum et impedit';
const meta = {
wordsCount: 640,
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
Object.keys(meta).length
);
expect(rtlScreen.getByRole('term')).toHaveTextContent('Reading time:');
});
it('does not render an undefined meta', () => {
const title = 'nostrum et impedit';
const meta = {
author: undefined,
publicationDate: '2023-11-20',
} satisfies Partial<PageHeaderMetaData>;
render(<PageHeader heading={title} meta={meta} />);
expect(rtlScreen.getAllByRole('term')).toHaveLength(
// Author is invalid
Object.keys(meta).length - 1
);
});
});
|