aboutsummaryrefslogtreecommitdiff
path: root/src/lib/components/post/post.test.ts
blob: 4351f3fa664be6f8cefc2c54245351e8087bf90c (plain)
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
/**
 * @jest-environment jsdom
 */

import '@testing-library/jest-dom/extend-expect';

import { cleanup, render } from '@testing-library/svelte';
import '$lib/i18n';

import Post from './post.svelte';

const internals = {
	basicPost: {
		id: 'e5a19d53-4c9a-4be8-afa5-00942ea3afa4',
		text: 'This is an example post qwerty',
		created_at: Date.UTC(2021, 3, 19, 6, 6, 6, 666).valueOf(),
		author: {
			handle: 'very_cool_user',
			id: 'b01bdb48-4b5e-46a4-97f3-6db789bcd33b'
		},
		topic: {
			id: '35d3c3eb-e486-42ef-994c-d8ab1f1e167a',
			title: 'Parent topic, yes'
		}
	},
	postWithoutTopic: {
		id: '9e52e38e-9007-4a20-bbf1-cea4e2f950f3',
		text: 'This is a post without a topic',
		created_at: Date.UTC(2022, 8, 21, 4, 3, 1, 340).valueOf(),
		author: {
			handle: 'my_normal_user',
			id: '121f8f97-de02-4102-b25d-f34fd619009b'
		}
	},

	results: null
};

describe('Post component', () => {
	beforeEach(() => {
		internals.results = render(Post, {
			props: {
				post: internals.basicPost
			}
		});
	});

	test('Should display the text of the post', () => {
		expect(internals.results.getByText('This is an example post qwerty')).toBeVisible();
	});

	test('Should display date of the post', () => {
		expect(internals.results.getByText('2021-04-19T06:06:06.666Z')).toBeVisible();
	});

	test('Date of post should be a permalink to the post', () => {
		expect(internals.results.getByText('2021-04-19T06:06:06.666Z').closest('a')).toHaveAttribute(
			'href',
			'/p/e5a19d53-4c9a-4be8-afa5-00942ea3afa4'
		);
	});

	test('Should display the glyph of the post author', () => {
		const glyphicon = internals.results.getByRole('img');

		expect(glyphicon).toBeVisible();
		expect(glyphicon).toHaveTextContent(/^. . . .$/);
	});

	test('Should display author handle', () => {
		expect(internals.results.getByText('very_cool_user')).toBeVisible();
	});

	test('Author handle should have a permalink to topic', () => {
		expect(internals.results.getByText('very_cool_user').closest('a')).toHaveAttribute(
			'href',
			'/a/very_cool_user'
		);
	});

	test('Should display parent topic title', () => {
		expect(internals.results.getByText('Parent topic, yes')).toBeVisible();
	});

	test('Parent topic title should have a permalink to topic', () => {
		expect(internals.results.getByText('Parent topic, yes').closest('a')).toHaveAttribute(
			'href',
			'/t/35d3c3eb-e486-42ef-994c-d8ab1f1e167a'
		);
	});

	test('Parent topic title should have a permalink to topic', () => {
		cleanup();
		internals.results = render(Post, {
			props: {
				post: internals.postWithoutTopic
			}
		});

		expect(internals.results.queryByText('Parent topic, yes')).toBe(null);
	});

	test('It should default to 1/1 when no index or count is passed', () => {
		expect(internals.results.getByTitle('Post 1 of 1 by very_cool_user')).toBeVisible();
	});

	test('Parent topic title should have a permalink to topic', () => {
		cleanup();
		internals.results = render(Post, {
			props: {
				index: 2,
				count: 5,
				post: internals.postWithoutTopic
			}
		});

		expect(internals.results.getByTitle('Post 3 of 5 by my_normal_user')).toBeVisible();
	});
});