The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/packages/message-parser/tests/url.test.ts

362 lines
11 KiB

import { parse } from '../src';
import { lineBreak, autoLink, paragraph, plain, link } from '../src/utils';
test.each([
[
'https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%A3o_de_corrida#:~:text=Uma%20condi%C3%A7%C3%A3o%20de%20corrida%20%C3%A9,sequ%C3%AAncia%20ou%20sincronia%20doutros%20eventos',
[
paragraph([
autoLink(
'https://pt.wikipedia.org/wiki/Condi%C3%A7%C3%A3o_de_corrida#:~:text=Uma%20condi%C3%A7%C3%A3o%20de%20corrida%20%C3%A9,sequ%C3%AAncia%20ou%20sincronia%20doutros%20eventos',
),
]),
],
],
[
'https://pt.wikipedia.org/',
[paragraph([autoLink('https://pt.wikipedia.org/')])],
],
[
'https://pt.wikipedia.org/with-hyphen',
[paragraph([autoLink('https://pt.wikipedia.org/with-hyphen')])],
],
[
'https://pt.wikipedia.org/with_underscore',
[paragraph([autoLink('https://pt.wikipedia.org/with_underscore')])],
],
[
'https://www.npmjs.com/package/@rocket.chat/message-parser',
[
paragraph([
autoLink('https://www.npmjs.com/package/@rocket.chat/message-parser'),
]),
],
],
['http:/rocket.chat/teste', [paragraph([plain('http:/rocket.chat/teste')])]],
['https:/rocket.chat/', [paragraph([plain('https:/rocket.chat/')])]],
['https://test', [paragraph([plain('https://test')])]],
[
'httpsss://rocket.chat/test',
[paragraph([autoLink('httpsss://rocket.chat/test')])],
],
[
'https://rocket.chat:3000/test',
[paragraph([autoLink('https://rocket.chat:3000/test')])],
],
[
'https://rocket.chat/test?search',
[paragraph([autoLink('https://rocket.chat/test?search')])],
],
[
'https://rocket.chat/test?search=test',
[paragraph([autoLink('https://rocket.chat/test?search=test')])],
],
['https://rocket.chat', [paragraph([autoLink('https://rocket.chat')])]],
['https://localhost', [paragraph([autoLink('https://localhost')])]],
['https://localhost:3000', [paragraph([autoLink('https://localhost:3000')])]],
[
'https://localhost:3000#fragment',
[paragraph([autoLink('https://localhost:3000#fragment')])],
],
[
'https://localhost:3000#',
[paragraph([autoLink('https://localhost:3000#')])],
],
[
'https://localhost:3000?',
[paragraph([autoLink('https://localhost:3000?')])],
],
[
'https://localhost:3000/',
[paragraph([autoLink('https://localhost:3000/')])],
],
[
'ftp://user:pass@localhost:21/etc/hosts',
[paragraph([autoLink('ftp://user:pass@localhost:21/etc/hosts')])],
],
['ssh://test@example.com', [paragraph([autoLink('ssh://test@example.com')])]],
[
'custom://test@example.com',
[paragraph([autoLink('custom://test@example.com')])],
],
['ftp://example.com', [paragraph([autoLink('ftp://example.com')])]],
[
'https://www.thingiverse.com/thing:5451684',
[paragraph([autoLink('https://www.thingiverse.com/thing:5451684')])],
],
['http://📙.la/❤', [paragraph([autoLink('http://📙.la/❤')])]],
[
'https://developer.rocket.chat/reference/api/rest-api#production-security-concerns look at this',
[
paragraph([
autoLink(
'https://developer.rocket.chat/reference/api/rest-api#production-security-concerns',
),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat/reference/api/rest-api look at this',
[
paragraph([
autoLink('https://developer.rocket.chat/reference/api/rest-api'),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat/reference/api/rest-api#fragment?query=query look at this',
[
paragraph([
autoLink(
'https://developer.rocket.chat/reference/api/rest-api#fragment?query=query',
),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat look at this',
[
paragraph([
autoLink('https://developer.rocket.chat'),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat?query=query look at this',
[
paragraph([
autoLink('https://developer.rocket.chat?query=query'),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat?query=query\nline break',
[
paragraph([autoLink('https://developer.rocket.chat?query=query')]),
paragraph([plain('line break')]),
],
],
[
'https://developer.rocket.chat?query=query\n\nline break',
[
paragraph([autoLink('https://developer.rocket.chat?query=query')]),
lineBreak(),
paragraph([plain('line break')]),
],
],
[
'https://developer.rocket.chat?query=query_with_underscore look at this',
[
paragraph([
autoLink('https://developer.rocket.chat?query=query_with_underscore'),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat/path_with_underscore look at this',
[
paragraph([
autoLink('https://developer.rocket.chat/path_with_underscore'),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat#fragment_with_underscore look at this',
[
paragraph([
autoLink('https://developer.rocket.chat#fragment_with_underscore'),
plain(' look at this'),
]),
],
],
[
'https://developer.rocket.chat followed by text',
[
paragraph([
autoLink('https://developer.rocket.chat'),
plain(' followed by text'),
]),
],
],
[
'two urls https://developer.rocket.chat , https://rocket.chat',
[
paragraph([
plain('two urls '),
autoLink('https://developer.rocket.chat'),
plain(' , '),
autoLink('https://rocket.chat'),
]),
],
],
[
'https://1developer.rocket.chat',
[paragraph([autoLink('https://1developer.rocket.chat')])],
],
[
'https://en.m.wikipedia.org/wiki/Main_Page',
[paragraph([autoLink('https://en.m.wikipedia.org/wiki/Main_Page')])],
],
['test.1test.com', [paragraph([autoLink('test.1test.com')])]],
[
'http://test.e-xample.com',
[paragraph([autoLink('http://test.e-xample.com')])],
],
['www.n-tv.de', [paragraph([autoLink('www.n-tv.de')])]],
[
'www.n-tv.de/test, test',
[paragraph([autoLink('www.n-tv.de/test'), plain(', test')])],
],
[
'www.n-tv.de/, test',
[paragraph([autoLink('www.n-tv.de/'), plain(', test')])],
],
[
'www.n-tv.de, test',
[paragraph([autoLink('www.n-tv.de'), plain(', test')])],
],
[
'https://www.n-tv.de, test',
[paragraph([autoLink('https://www.n-tv.de'), plain(', test')])],
],
['http://te_st.com', [paragraph([autoLink('http://te_st.com')])]],
['www.te_st.com', [paragraph([autoLink('www.te_st.com')])]],
[
'[google_search](http://google.com)',
[paragraph([link('http://google.com', [plain('google_search')])])],
],
[
'app...https://rocket.chat https://rocket.chat',
[
paragraph([
plain('app...https://rocket.chat '),
autoLink('https://rocket.chat'),
]),
],
],
[
'Hey check it out the best communication platform https://rocket.chat! There is not discussion about it.',
[
paragraph([
plain('Hey check it out the best communication platform '),
autoLink('https://rocket.chat'),
plain('! There is not discussion about it.'),
]),
],
],
[
'This is a normal phrase.This in another phrase.',
[paragraph([plain('This is a normal phrase.This in another phrase.')])],
],
[
'https://github.com/RocketChat/Rocket.Chat/releases/tag/6.0.0-rc.3',
[
paragraph([
autoLink(
'https://github.com/RocketChat/Rocket.Chat/releases/tag/6.0.0-rc.3',
),
]),
],
],
[
'https://www.rocket.chat/(W(601))/Main?ScreenId=GI000027',
[
paragraph([
autoLink('https://www.rocket.chat/(W(601))/Main?ScreenId=GI000027'),
]),
],
],
[
'https://rocketchat.atlassian.net/browse/OC-718?filter=10078&jql=%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20created%20%3E%3D%20-48h%20ORDER%20BY%20cf%5B10070%5D%20ASC%2C%20status%20ASC%2C%20created%20DESC',
[
paragraph([
link(
'https://rocketchat.atlassian.net/browse/OC-718?filter=10078&jql=%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20%22Defect%20from%5BVersion%20Picker%20(multiple%20versions)%5D%22%20%3D%206.0.0%20AND%20created%20%3E%3D%20-48h%20ORDER%20BY%20cf%5B10070%5D%20ASC%2C%20status%20ASC%2C%20created%20DESC',
),
]),
],
],
])('parses %p', (input, output) => {
expect(parse(input)).toMatchObject(output);
});
describe('autoLink with custom hosts settings comming from Rocket.Chat', () => {
test.each([
[
'http://gitlab.local',
[paragraph([autoLink('http://gitlab.local', ['local'])])],
],
['gitlab.local', [paragraph([autoLink('gitlab.local', ['local'])])]],
[
'internaltool.intranet',
[paragraph([autoLink('internaltool.intranet', ['local', 'intranet'])])],
],
])('parses %p', (input, output) => {
expect(
parse(input, { customDomains: ['local', 'intranet'] }),
).toMatchObject(output);
});
});
describe('autoLink WITHOUT custom hosts settings comming from Rocket.Chat', () => {
test.each([
[
'https://internaltool.testt',
[paragraph([plain('https://internaltool.testt')])],
],
])('parses %p', (input, output) => {
expect(parse(input, { customDomains: ['local'] })).toMatchObject(output);
});
});
describe('autoLink helper function', () => {
it('should preserve the original protocol if the protocol is http or https', () => {
expect(autoLink('https://rocket.chat/test')).toMatchObject(
link('https://rocket.chat/test'),
);
expect(autoLink('http://rocket.chat/test')).toMatchObject(
link('http://rocket.chat/test'),
);
});
it('should preserve the original protocol even if for custom protocols', () => {
expect(autoLink('custom://rocket.chat/test')).toMatchObject(
link('custom://rocket.chat/test'),
);
});
it('should return // as the protocol if // is the protocol specified', () => {
expect(autoLink('//rocket.chat/test')).toMatchObject(
link('//rocket.chat/test'),
);
});
it("should return an url concatenated '//' if the url has no protocol", () => {
expect(autoLink('rocket.chat/test')).toMatchObject(
link('//rocket.chat/test', [plain('rocket.chat/test')]),
);
});
it("should return an url concatenated '//' if the url has no protocol and has sub-domain", () => {
expect(autoLink('spark-public.s3.amazonaws.com')).toMatchObject(
link('//spark-public.s3.amazonaws.com', [
plain('spark-public.s3.amazonaws.com'),
]),
);
});
it("should return an plain text url due to invalid TLD that's validate with the external library TLDTS", () => {
expect(autoLink('rocket.chattt/url_path')).toMatchObject(
plain('rocket.chattt/url_path'),
);
});
});