Skip to content

Commit 46351cb

Browse files
author
Taylor Payne
committed
test: add coverage for getExternalLinkUrl
1 parent 2366c9c commit 46351cb

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

src/getExternalLinkUrl.test.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { getExternalLinkUrl, setConfig } from './config';
2+
3+
describe('getExternalLinkUrl', () => {
4+
afterEach(() => {
5+
// Reset config after each test to avoid cross-test pollution
6+
setConfig({});
7+
});
8+
9+
it('should return the url passed in when externalLinkUrlOverrides is not set', () => {
10+
setConfig({});
11+
const url = 'https://foo.example.com';
12+
expect(getExternalLinkUrl(url)).toBe(url);
13+
});
14+
15+
it('should return the url passed in when externalLinkUrlOverrides does not have the url mapping', () => {
16+
setConfig({
17+
externalLinkUrlOverrides: {
18+
'https://bar.example.com': 'https://mapped.example.com',
19+
},
20+
});
21+
const url = 'https://foo.example.com';
22+
expect(getExternalLinkUrl(url)).toBe(url);
23+
});
24+
25+
it('should return the mapped url when externalLinkUrlOverrides has the url mapping', () => {
26+
const url = 'https://foo.example.com';
27+
const mappedUrl = 'https://mapped.example.com';
28+
setConfig({ externalLinkUrlOverrides: { [url]: mappedUrl } });
29+
expect(getExternalLinkUrl(url)).toBe(mappedUrl);
30+
});
31+
32+
it('should handle empty externalLinkUrlOverrides object', () => {
33+
setConfig({ externalLinkUrlOverrides: {} });
34+
const url = 'https://foo.example.com';
35+
expect(getExternalLinkUrl(url)).toBe(url);
36+
});
37+
38+
it('should guard against empty string argument', () => {
39+
const fallbackResult = '#';
40+
setConfig({ externalLinkUrlOverrides: { foo: 'bar' } });
41+
expect(getExternalLinkUrl(undefined)).toBe(fallbackResult);
42+
});
43+
44+
it('should guard against non-string argument', () => {
45+
const fallbackResult = '#';
46+
setConfig({ externalLinkUrlOverrides: { foo: 'bar' } });
47+
expect(getExternalLinkUrl(null)).toBe(fallbackResult);
48+
expect(getExternalLinkUrl(42)).toBe(fallbackResult);
49+
});
50+
51+
it('should not throw if externalLinkUrlOverrides is not an object', () => {
52+
setConfig({ externalLinkUrlOverrides: null });
53+
const url = 'https://foo.example.com';
54+
expect(getExternalLinkUrl(url)).toBe(url);
55+
setConfig({ externalLinkUrlOverrides: 42 });
56+
expect(getExternalLinkUrl(url)).toBe(url);
57+
});
58+
59+
it('should work with multiple mappings', () => {
60+
setConfig({
61+
externalLinkUrlOverrides: {
62+
'https://a.example.com': 'https://mapped-a.example.com',
63+
'https://b.example.com': 'https://mapped-b.example.com',
64+
},
65+
});
66+
expect(getExternalLinkUrl('https://a.example.com')).toBe(
67+
'https://mapped-a.example.com',
68+
);
69+
expect(getExternalLinkUrl('https://b.example.com')).toBe(
70+
'https://mapped-b.example.com',
71+
);
72+
expect(getExternalLinkUrl('https://c.example.com')).toBe(
73+
'https://c.example.com',
74+
);
75+
});
76+
});

0 commit comments

Comments
 (0)