summaryrefslogtreecommitdiff
path: root/source/github-helpers/search-query.test.ts
blob: 9c5707f9cdbd796bde192781fc88e4a14ad10c5b (plain) (blame)
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
import {test, assert} from 'vitest';

import SearchQuery from './search-query.js';

test('.get', () => {
	const query = SearchQuery.from({q: 'wow'});
	assert.equal(query.get(), 'wow');
});

test('.getQueryParts', () => {
	const query = SearchQuery.from({q: 'cool is:issue'});
	assert.deepEqual(query.getQueryParts(), ['cool', 'is:issue']);
});

test('getQueryParts with spaces support', () => {
	const query = SearchQuery.from({q: 'please label:"under discussion"'});
	assert.deepEqual(query.getQueryParts(), ['please', 'label:"under discussion"']);
});

test('.set', () => {
	const query = SearchQuery.from({q: 'wow'});
	query.set('lol');
	assert.equal(query.get(), 'lol');
});

test('.edit', () => {
	const query = SearchQuery.from({q: 'gone fishing'});
	query.edit(queryParts => queryParts.slice(0, 1));
	assert.equal(query.get(), 'gone');
});

test('.replace', () => {
	const query = SearchQuery.from({q: '404 error'});
	query.replace('error', 'failure');
	assert.equal(query.get(), '404 failure');

	query.replace(/^\d(\d)/, '1$1');
	assert.equal(query.get(), '104 failure');
});

test('.remove', () => {
	const query = SearchQuery.from({q: 'is:issue dog is:open'});
	query.remove('is:issue', 'is:open');
	assert.equal(query.get(), 'dog');
});

test('.add', () => {
	const query = SearchQuery.from({q: 'is:pr birds everywhere'});
	query.add('and', 'aliens');
	assert.equal(query.get(), 'is:pr birds everywhere and aliens');
});

test('.includes', () => {
	const query = SearchQuery.from({q: 'label:nonsense'});
	assert.isFalse(query.includes('nonsense'));
	assert.isTrue(query.includes('label:nonsense'));
});

test('defaults', () => {
	const query = SearchQuery.from({q: ''});
	assert.equal(query.get(), '');

	const link = document.createElement('a');
	link.href = 'https://github.com/owner/repo/issues';
	const queryFromLink = SearchQuery.from(link);
	assert.equal(queryFromLink.get(), 'is:issue is:open');
});

test('deduplicate is:pr/issue', () => {
	const query = SearchQuery.from({q: 'refined github is:pr'});
	query.add('is:issue');

	assert.isFalse(query.includes('is:pr'));
	assert.isTrue(query.includes('is:issue'));
});

test('remove additional spaces', () => {
	const query = SearchQuery.from({q: ' refined   github '});
	assert.equal(query.get(), 'refined github');
});

test('parse label link', () => {
	const link = document.createElement('a');
	link.href = 'https://github.com/owner/repo/labels/bug';
	const query = SearchQuery.from(link);

	assert.equal(query.get(), 'is:open label:bug');
	assert.isTrue(query.href.startsWith('https://github.com/owner/repo/issues?'));
});