From 0998d143b89cfc87461a63b9b916f9cd1e713748 Mon Sep 17 00:00:00 2001 From: Talha Mahmood <36226639+Talha345@users.noreply.github.com> Date: Fri, 18 Aug 2023 01:29:15 +0200 Subject: [PATCH 1/4] Added query params to path and updated tests to reflect changes --- src/libs/Url.js | 3 ++- tests/unit/UrlTest.js | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libs/Url.js b/src/libs/Url.js index b64360a7babb..604084bba828 100644 --- a/src/libs/Url.js +++ b/src/libs/Url.js @@ -18,7 +18,8 @@ function addTrailingForwardSlash(url) { */ function getPathFromURL(url) { try { - const path = new URL(url).pathname; + const parsedUrl = new URL(url); + const path = parsedUrl.pathname + parsedUrl.search; return path.substring(1); // Remove the leading '/' } catch (error) { console.error('Error parsing URL:', error); diff --git a/tests/unit/UrlTest.js b/tests/unit/UrlTest.js index 7f92f09aeb37..f410bceeec88 100644 --- a/tests/unit/UrlTest.js +++ b/tests/unit/UrlTest.js @@ -6,12 +6,12 @@ describe('Url', () => { expect(Url.getPathFromURL('http://www.foo.com')).toEqual(''); expect(Url.getPathFromURL('http://foo.com/blah_blah')).toEqual('blah_blah'); expect(Url.getPathFromURL('http://foo.com/blah_blah_(wikipedia)')).toEqual('blah_blah_(wikipedia)'); - expect(Url.getPathFromURL('http://www.example.com/wpstyle/?p=364')).toEqual('wpstyle/'); - expect(Url.getPathFromURL('https://www.example.com/foo/?bar=baz&inga=42&quux')).toEqual('foo/'); - expect(Url.getPathFromURL('http://foo.com/(something)?after=parens')).toEqual('(something)'); + expect(Url.getPathFromURL('http://www.example.com/wpstyle/?p=364')).toEqual('wpstyle/?p=364'); + expect(Url.getPathFromURL('https://www.example.com/foo/?bar=baz&inga=42&quux')).toEqual('foo/?bar=baz&inga=42&quux'); + expect(Url.getPathFromURL('http://foo.com/(something)?after=parens')).toEqual('(something)?after=parens'); expect(Url.getPathFromURL('http://code.google.com/events/#&product=browser')).toEqual('events/'); - expect(Url.getPathFromURL('http://foo.bar/?q=Test%20URL-encoded%20stuff')).toEqual(''); - expect(Url.getPathFromURL('http://www.test.com/path?param=123#123')).toEqual('path'); + expect(Url.getPathFromURL('http://foo.bar/?q=Test%20URL-encoded%20stuff')).toEqual('?q=Test%20URL-encoded%20stuff'); + expect(Url.getPathFromURL('http://www.test.com/path?param=123#123')).toEqual('path?param=123'); expect(Url.getPathFromURL('http://1337.net')).toEqual(''); expect(Url.getPathFromURL('http://a.b-c.de/')).toEqual(''); expect(Url.getPathFromURL('https://sd1.sd2.docs.google.com/')).toEqual(''); @@ -27,7 +27,9 @@ describe('Url', () => { 'https://www.expensify.com/_devportal/tools/logSearch/#query=request_id:(%22Ufjjim%22)+AND+timestamp:[2021-01-08T03:48:10.389Z+TO+2021-01-08T05:48:10.389Z]&index=logs_expensify-008878)', ), ).toEqual('_devportal/tools/logSearch/'); - expect(Url.getPathFromURL('http://necolas.github.io/react-native-web/docs/?path=/docs/components-pressable--disabled ')).toEqual('react-native-web/docs/'); + expect(Url.getPathFromURL('http://necolas.github.io/react-native-web/docs/?path=/docs/components-pressable--disabled ')).toEqual( + 'react-native-web/docs/?path=/docs/components-pressable--disabled', + ); expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual('Expensify/Expensify.cash/issues/123'); expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual('Expensify/Expensify.cash/issues/123'); expect(Url.getPathFromURL('mm..food ')).toEqual(''); From 41d6b0c966089cf4ff268fa35c3df6b548fada57 Mon Sep 17 00:00:00 2001 From: Talha Mahmood <36226639+Talha345@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:03:40 +0200 Subject: [PATCH 2/4] Added test for attachment URL --- tests/unit/UrlTest.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/unit/UrlTest.js b/tests/unit/UrlTest.js index f410bceeec88..a3923b2203d3 100644 --- a/tests/unit/UrlTest.js +++ b/tests/unit/UrlTest.js @@ -59,9 +59,13 @@ describe('Url', () => { ).toEqual( 'maps/place/Taj+Mahal+@is~%22Awesome%22/@27.1751496,78.0399535,17z/data=!4m12!1m6!3m5!1s0x39747121d702ff6d:0xdd2ae4803f767dde!2sTaj+Mahal!8m2!3d27.1751448!4d78.0421422!3m4!1s0x39747121d702ff6d:0xdd2ae4803f767dde!8m2!3d27.1751448!4d78.0421422', ); + expect( + Url.getPathFromURL( + 'https://new.expensify.com/r/443044983936732/attachment?source=https://www.expensify.com/chat-attachments/3915228701265930556/w_a758d3c8444a64f98d37205b17141388064d458e.jpg', + ), + ).toEqual('r/443044983936732/attachment?source=https://www.expensify.com/chat-attachments/3915228701265930556/w_a758d3c8444a64f98d37205b17141388064d458e.jpg'); }); }); - describe('hasSameExpensifyOrigin()', () => { describe('happy path', () => { it('It should work correctly', () => { From 045abfacad81b3366b7fc7a27d6f0d0daeda403b Mon Sep 17 00:00:00 2001 From: Talha Mahmood <36226639+Talha345@users.noreply.github.com> Date: Fri, 18 Aug 2023 15:13:19 +0200 Subject: [PATCH 3/4] Added hash to path and fixed tests --- src/libs/Url.js | 2 +- tests/unit/UrlTest.js | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/libs/Url.js b/src/libs/Url.js index 604084bba828..eb96b697a8fc 100644 --- a/src/libs/Url.js +++ b/src/libs/Url.js @@ -19,7 +19,7 @@ function addTrailingForwardSlash(url) { function getPathFromURL(url) { try { const parsedUrl = new URL(url); - const path = parsedUrl.pathname + parsedUrl.search; + const path = parsedUrl.pathname + parsedUrl.search + parsedUrl.hash; return path.substring(1); // Remove the leading '/' } catch (error) { console.error('Error parsing URL:', error); diff --git a/tests/unit/UrlTest.js b/tests/unit/UrlTest.js index a3923b2203d3..47f6927b03f8 100644 --- a/tests/unit/UrlTest.js +++ b/tests/unit/UrlTest.js @@ -9,13 +9,13 @@ describe('Url', () => { expect(Url.getPathFromURL('http://www.example.com/wpstyle/?p=364')).toEqual('wpstyle/?p=364'); expect(Url.getPathFromURL('https://www.example.com/foo/?bar=baz&inga=42&quux')).toEqual('foo/?bar=baz&inga=42&quux'); expect(Url.getPathFromURL('http://foo.com/(something)?after=parens')).toEqual('(something)?after=parens'); - expect(Url.getPathFromURL('http://code.google.com/events/#&product=browser')).toEqual('events/'); + expect(Url.getPathFromURL('http://code.google.com/events/#&product=browser')).toEqual('events/#&product=browser'); expect(Url.getPathFromURL('http://foo.bar/?q=Test%20URL-encoded%20stuff')).toEqual('?q=Test%20URL-encoded%20stuff'); - expect(Url.getPathFromURL('http://www.test.com/path?param=123#123')).toEqual('path?param=123'); + expect(Url.getPathFromURL('http://www.test.com/path?param=123#123')).toEqual('path?param=123#123'); expect(Url.getPathFromURL('http://1337.net')).toEqual(''); expect(Url.getPathFromURL('http://a.b-c.de/')).toEqual(''); expect(Url.getPathFromURL('https://sd1.sd2.docs.google.com/')).toEqual(''); - expect(Url.getPathFromURL('https://expensify.cash/#/r/1234')).toEqual(''); + expect(Url.getPathFromURL('https://expensify.cash/#/r/1234')).toEqual('#/r/1234'); expect(Url.getPathFromURL('https://github.com/Expensify/ReactNativeChat/pull/6.45')).toEqual('Expensify/ReactNativeChat/pull/6.45'); expect(Url.getPathFromURL('https://github.com/Expensify/Expensify/issues/143,231')).toEqual('Expensify/Expensify/issues/143,231'); expect(Url.getPathFromURL('testRareTLDs.beer')).toEqual(''); @@ -26,12 +26,11 @@ describe('Url', () => { // eslint-disable-next-line max-len 'https://www.expensify.com/_devportal/tools/logSearch/#query=request_id:(%22Ufjjim%22)+AND+timestamp:[2021-01-08T03:48:10.389Z+TO+2021-01-08T05:48:10.389Z]&index=logs_expensify-008878)', ), - ).toEqual('_devportal/tools/logSearch/'); + ).toEqual('_devportal/tools/logSearch/#query=request_id:(%22Ufjjim%22)+AND+timestamp:[2021-01-08T03:48:10.389Z+TO+2021-01-08T05:48:10.389Z]&index=logs_expensify-008878)'); expect(Url.getPathFromURL('http://necolas.github.io/react-native-web/docs/?path=/docs/components-pressable--disabled ')).toEqual( 'react-native-web/docs/?path=/docs/components-pressable--disabled', ); - expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual('Expensify/Expensify.cash/issues/123'); - expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual('Expensify/Expensify.cash/issues/123'); + expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual('Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash'); expect(Url.getPathFromURL('mm..food ')).toEqual(''); expect(Url.getPathFromURL('https://upwork.com/jobs/~016781e062ce860b84 ')).toEqual('jobs/~016781e062ce860b84'); expect( @@ -39,7 +38,7 @@ describe('Url', () => { // eslint-disable-next-line max-len "https://bastion1.sjc/logs/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'2125cbe0-28a9-11e9-a79c-3de0157ed580',interval:auto,query:(language:lucene,query:''),sort:!(timestamp,desc))", ), - ).toEqual('logs/app/kibana'); + ).toEqual('logs/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:\'2125cbe0-28a9-11e9-a79c-3de0157ed580\',interval:auto,query:(language:lucene,query:\'\'),sort:!(timestamp,desc))'); expect( Url.getPathFromURL("https://google.com/maps/place/The+Flying'+Saucer/@42.4043314,-86.2742418,15z/data=!4m5!3m4!1s0x0:0xe28f6108670216bc!8m2!3d42.4043316!4d-86.2742121"), ).toEqual("maps/place/The+Flying'+Saucer/@42.4043314,-86.2742418,15z/data=!4m5!3m4!1s0x0:0xe28f6108670216bc!8m2!3d42.4043316!4d-86.2742121"); From 399c308b61de2ae6584add62d73155a9704885be Mon Sep 17 00:00:00 2001 From: Talha Mahmood <36226639+Talha345@users.noreply.github.com> Date: Fri, 18 Aug 2023 15:45:12 +0200 Subject: [PATCH 4/4] Lint code --- tests/unit/UrlTest.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/unit/UrlTest.js b/tests/unit/UrlTest.js index 47f6927b03f8..90ffb9b12d5b 100644 --- a/tests/unit/UrlTest.js +++ b/tests/unit/UrlTest.js @@ -30,7 +30,9 @@ describe('Url', () => { expect(Url.getPathFromURL('http://necolas.github.io/react-native-web/docs/?path=/docs/components-pressable--disabled ')).toEqual( 'react-native-web/docs/?path=/docs/components-pressable--disabled', ); - expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual('Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash'); + expect(Url.getPathFromURL('https://github.com/Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash ')).toEqual( + 'Expensify/Expensify.cash/issues/123#:~:text=Please%20work/Expensify.cash', + ); expect(Url.getPathFromURL('mm..food ')).toEqual(''); expect(Url.getPathFromURL('https://upwork.com/jobs/~016781e062ce860b84 ')).toEqual('jobs/~016781e062ce860b84'); expect( @@ -38,7 +40,9 @@ describe('Url', () => { // eslint-disable-next-line max-len "https://bastion1.sjc/logs/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'2125cbe0-28a9-11e9-a79c-3de0157ed580',interval:auto,query:(language:lucene,query:''),sort:!(timestamp,desc))", ), - ).toEqual('logs/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:\'2125cbe0-28a9-11e9-a79c-3de0157ed580\',interval:auto,query:(language:lucene,query:\'\'),sort:!(timestamp,desc))'); + ).toEqual( + "logs/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'2125cbe0-28a9-11e9-a79c-3de0157ed580',interval:auto,query:(language:lucene,query:''),sort:!(timestamp,desc))", + ); expect( Url.getPathFromURL("https://google.com/maps/place/The+Flying'+Saucer/@42.4043314,-86.2742418,15z/data=!4m5!3m4!1s0x0:0xe28f6108670216bc!8m2!3d42.4043316!4d-86.2742121"), ).toEqual("maps/place/The+Flying'+Saucer/@42.4043314,-86.2742418,15z/data=!4m5!3m4!1s0x0:0xe28f6108670216bc!8m2!3d42.4043316!4d-86.2742121");