-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
url.spec.ts
93 lines (80 loc) · 3.51 KB
/
url.spec.ts
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
import { getName } from '../../test/util';
import {
ensurePathPrefix,
parseUrl,
resolveBaseUrl,
trimTrailingSlash,
validateUrl,
} from './url';
describe(getName(), () => {
test.each([
['http://foo.io', '', 'http://foo.io'],
['http://foo.io/', '', 'http://foo.io'],
['http://foo.io', '/', 'http://foo.io/'],
['http://foo.io/', '/', 'http://foo.io/'],
['http://foo.io', '/aaa', 'http://foo.io/aaa'],
['http://foo.io', 'aaa', 'http://foo.io/aaa'],
['http://foo.io/', '/aaa', 'http://foo.io/aaa'],
['http://foo.io/', 'aaa', 'http://foo.io/aaa'],
['http://foo.io', '/aaa/', 'http://foo.io/aaa/'],
['http://foo.io', 'aaa/', 'http://foo.io/aaa/'],
['http://foo.io/', '/aaa/', 'http://foo.io/aaa/'],
['http://foo.io/', 'aaa/', 'http://foo.io/aaa/'],
['http://foo.io/aaa', '/bbb', 'http://foo.io/aaa/bbb'],
['http://foo.io/aaa', 'bbb', 'http://foo.io/aaa/bbb'],
['http://foo.io/aaa/', '/bbb', 'http://foo.io/aaa/bbb'],
['http://foo.io/aaa/', 'bbb', 'http://foo.io/aaa/bbb'],
['http://foo.io/aaa', '/bbb/', 'http://foo.io/aaa/bbb/'],
['http://foo.io/aaa', 'bbb/', 'http://foo.io/aaa/bbb/'],
['http://foo.io/aaa/', '/bbb/', 'http://foo.io/aaa/bbb/'],
['http://foo.io/aaa/', 'bbb/', 'http://foo.io/aaa/bbb/'],
['http://foo.io', 'http://bar.io/bbb', 'http://bar.io/bbb'],
['http://foo.io/', 'http://bar.io/bbb', 'http://bar.io/bbb'],
['http://foo.io/aaa', 'http://bar.io/bbb', 'http://bar.io/bbb'],
['http://foo.io/aaa/', 'http://bar.io/bbb', 'http://bar.io/bbb'],
['http://foo.io', 'http://bar.io/bbb/', 'http://bar.io/bbb/'],
['http://foo.io/', 'http://bar.io/bbb/', 'http://bar.io/bbb/'],
['http://foo.io/aaa', 'http://bar.io/bbb/', 'http://bar.io/bbb/'],
['http://foo.io/aaa/', 'http://bar.io/bbb/', 'http://bar.io/bbb/'],
['http://foo.io', 'aaa?bbb=z', 'http://foo.io/aaa?bbb=z'],
['http://foo.io', '/aaa?bbb=z', 'http://foo.io/aaa?bbb=z'],
['http://foo.io/', 'aaa?bbb=z', 'http://foo.io/aaa?bbb=z'],
['http://foo.io/', '/aaa?bbb=z', 'http://foo.io/aaa?bbb=z'],
['http://foo.io', 'aaa/?bbb=z', 'http://foo.io/aaa?bbb=z'],
])('%s + %s => %s', (baseUrl, x, result) => {
expect(resolveBaseUrl(baseUrl, x)).toBe(result);
});
it('validates URLs', () => {
expect(validateUrl()).toBe(false);
expect(validateUrl(null)).toBe(false);
expect(validateUrl('foo')).toBe(false);
expect(validateUrl('ssh://github.com')).toBe(false);
expect(validateUrl('http://github.com')).toBe(true);
expect(validateUrl('https://github.com')).toBe(true);
});
it('parses URL', () => {
expect(parseUrl(null)).toBeNull();
expect(parseUrl(undefined)).toBeNull();
const url = parseUrl('https://github.com/renovatebot/renovate');
expect(url.protocol).toBe('https:');
expect(url.host).toBe('github.com');
expect(url.pathname).toBe('/renovatebot/renovate');
});
it('trimTrailingSlash', () => {
expect(trimTrailingSlash('foo')).toBe('foo');
expect(trimTrailingSlash('/foo/bar')).toBe('/foo/bar');
expect(trimTrailingSlash('foo/')).toBe('foo');
expect(trimTrailingSlash('foo//////')).toBe('foo');
});
it('ensures path prefix', () => {
expect(ensurePathPrefix('https://index.docker.io', '/v2')).toBe(
'https://index.docker.io/v2'
);
expect(ensurePathPrefix('https://index.docker.io/v2', '/v2')).toBe(
'https://index.docker.io/v2'
);
expect(
ensurePathPrefix('https://index.docker.io/v2/something', '/v2')
).toBe('https://index.docker.io/v2/something');
});
});