From 465b5772763ccb8d4970d4c55e30a518abb7be3e Mon Sep 17 00:00:00 2001 From: Ricardo Cino Date: Sun, 26 Jun 2022 01:26:19 +0200 Subject: chore: moved tests to ./test directory (#366) * chore: allow coverage to be generated from non-tested files --- test/helpers/array-helpers.test.ts | 15 ++++ test/helpers/url-helpers.test.ts | 137 +++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 test/helpers/array-helpers.test.ts create mode 100644 test/helpers/url-helpers.test.ts (limited to 'test/helpers') diff --git a/test/helpers/array-helpers.test.ts b/test/helpers/array-helpers.test.ts new file mode 100644 index 000000000..e8060c2c4 --- /dev/null +++ b/test/helpers/array-helpers.test.ts @@ -0,0 +1,15 @@ +import { shuffleArray } from '../../src/helpers/array-helpers'; + +describe('array_helpers', () => { + it('isValidExternalURL', () => { + const originalArray = ['a', 'b', 'c']; + const shuffledArray = shuffleArray(originalArray); + + // Expect the arrays to not be exactly the same + expect(shuffledArray).not.toEqual(originalArray); + + // Expect the arrays to be exactly the same + // when both are sorted alphabetically + expect(shuffledArray.sort()).toEqual(originalArray.sort()); + }); +}); diff --git a/test/helpers/url-helpers.test.ts b/test/helpers/url-helpers.test.ts new file mode 100644 index 000000000..9ef06b905 --- /dev/null +++ b/test/helpers/url-helpers.test.ts @@ -0,0 +1,137 @@ +import * as url_helpers from '../../src/helpers/url-helpers'; + +describe('url_helpers', () => { + describe('isValidExternalURL', () => { + describe('with string', () => { + it('returns false for empty string', () => { + const result = url_helpers.isValidExternalURL(''); + expect(result).toBe(false); + }); + + it('returns false for whitespace string', () => { + const result = url_helpers.isValidExternalURL(' '); + expect(result).toBe(false); + }); + + it('returns false for random string', () => { + const result = url_helpers.isValidExternalURL('some random string'); + expect(result).toBe(false); + }); + + it('returns false for invalid url', () => { + const result = url_helpers.isValidExternalURL('shttps://google'); + expect(result).toBe(false); + }); + + it('returns true for valid http url', () => { + const result = url_helpers.isValidExternalURL('http://google'); + expect(result).toBe(true); + }); + + it('returns true for valid https url', () => { + const result = url_helpers.isValidExternalURL('https://google'); + expect(result).toBe(true); + }); + }); + + describe('with URL', () => { + // Note: not testing the invalid string urls - since the URL ctor itself will raise an error + + it('returns false for invalid url', () => { + const result = url_helpers.isValidExternalURL( + new URL('shttps://google'), + ); + expect(result).toBe(false); + }); + + it('returns true for valid http url', () => { + const result = url_helpers.isValidExternalURL(new URL('http://google')); + expect(result).toBe(true); + }); + + it('returns true for valid https url', () => { + const result = url_helpers.isValidExternalURL( + new URL('https://google'), + ); + expect(result).toBe(true); + }); + }); + }); + + describe('fixUrl', () => { + it('handles with empty string', () => { + const result = url_helpers.fixUrl(''); + expect(result).toEqual(''); + }); + + it('handles with whitespace string', () => { + const result = url_helpers.fixUrl(' '); + expect(result).toEqual(' '); + }); + + it('handles with random string', () => { + const result = url_helpers.fixUrl('some random string'); + expect(result).toEqual('some random string'); + }); + + it('handles string starting with http://', () => { + expect(url_helpers.fixUrl('http://some/random/url')).toEqual( + 'http://some/random/url', + ); + expect(url_helpers.fixUrl('http://some//random//url')).toEqual( + 'http://some/random/url', + ); + + const gmailEmbeddedUrl = + 'https://www.google.com/url?q=https://github.com/ferdium/ferdium-app/issues/87&source=gmail'; + expect(url_helpers.fixUrl(gmailEmbeddedUrl)).toEqual(gmailEmbeddedUrl); // it should NOT remove the double-slash from the embedded url in the query string + }); + + it('handles string starting with https://', () => { + expect(url_helpers.fixUrl('https://some/random/url')).toEqual( + 'https://some/random/url', + ); + expect(url_helpers.fixUrl('https://some//random//url')).toEqual( + 'https://some/random/url', + ); + }); + + it('handles string starting with file://', () => { + expect(url_helpers.fixUrl('file://some/random/url')).toEqual( + 'file://some/random/url', + ); + expect(url_helpers.fixUrl('file://some//random//url')).toEqual( + 'file://some/random/url', + ); + }); + }); + + describe('isValidFileUrl', () => { + it('returns false for empty string', () => { + const result = url_helpers.isValidFileUrl(''); + expect(result).toBe(false); + }); + + it('returns false for whitespace string', () => { + const result = url_helpers.isValidFileUrl(' '); + expect(result).toBe(false); + }); + + it('returns false for random string', () => { + const result = url_helpers.isValidFileUrl('some random string'); + expect(result).toBe(false); + }); + + it('returns false for invalid url', () => { + const result = url_helpers.isValidFileUrl('sfile://google'); + expect(result).toBe(false); + }); + + it('returns true for valid file url', () => { + const fileName = + process.platform === 'win32' ? 'file:///c:\\' : 'file:///'; + const result = url_helpers.isValidFileUrl(fileName); + expect(result).toBe(true); + }); + }); +}); -- cgit v1.2.3-70-g09d2