๐Ÿ“ฆ ljharb / repo-report

๐Ÿ“„ sortRepositoriesTest.js ยท 62 lines
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'use strict';

const test = require('tape');
const mockRepositoriesData = require('./fixtures/mockRepositoriesData.json');

const getRepositories = () => mockRepositoriesData.data.viewer.repositories.nodes;

const { sortRepositories } = require('../src/getRepositories');

/** @return {ReturnType<typeof getRepositories>} */
function cloneData() {
	return JSON.parse(JSON.stringify(getRepositories()));
}

test('Sort by name ASC', (t) => {
	const repos = cloneData();
	const actual = sortRepositories(repos, { sort: 'name', desc: false });
	const expected = cloneData().toSorted((a, b) => a.name.localeCompare(b.name));
	t.deepEqual(actual, expected, 'Repos are sorted by name A โ†’ Z');
	t.end();
});

test('Sort by name DESC', (t) => {
	const repos = cloneData();
	const actual = sortRepositories(repos, { sort: 'name', desc: true });
	const expected = cloneData().toSorted((a, b) => b.name.localeCompare(a.name));
	t.deepEqual(actual, expected, 'Repos are sorted by name Z โ†’ A');
	t.end();
});

test('Sort by updated date DESC (default)', (t) => {
	const repos = cloneData();
	const actual = sortRepositories(repos, { sort: 'updated', desc: false });
	const expected = cloneData().toSorted((a, b) => new Date(b.updatedAt) - new Date(a.updatedAt));
	t.deepEqual(actual, expected, 'Repos are sorted by updated newest โ†’ oldest');
	t.end();
});

test('Sort by updated date ASC', (t) => {
	const repos = cloneData();
	const actual = sortRepositories(repos, { sort: 'updated', desc: true });
	const expected = cloneData().toSorted((a, b) => new Date(a.updatedAt) - new Date(b.updatedAt));
	t.deepEqual(actual, expected, 'Repos are sorted by updated oldest โ†’ newest');
	t.end();
});

test('Sort by created date DESC', (t) => {
	const repos = cloneData();
	const actual = sortRepositories(repos, { sort: 'created', desc: false });
	const expected = cloneData().toSorted((a, b) => new Date(b.createdAt) - new Date(a.createdAt));
	t.deepEqual(actual, expected, 'Repos are sorted by created date newest โ†’ oldest');
	t.end();
});

test('Sort by created date ASC', (t) => {
	const repos = cloneData();
	const actual = sortRepositories(repos, { sort: 'created', desc: true });
	const expected = cloneData().toSorted((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
	t.deepEqual(actual, expected, 'Repos are sorted by created date oldest โ†’ newest');
	t.end();
});