-
Notifications
You must be signed in to change notification settings - Fork 453
Expand file tree
/
Copy pathparseUrlForNavigation.test.ts
More file actions
113 lines (101 loc) · 3.42 KB
/
parseUrlForNavigation.test.ts
File metadata and controls
113 lines (101 loc) · 3.42 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { parseUrlForNavigation } from '../client/utils';
const BASE_URL = 'https://example.com';
describe('parseUrlForNavigation', () => {
it('parses pathname only', () => {
const result = parseUrlForNavigation('/sign-in', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: undefined,
hash: undefined,
});
});
it('parses pathname with query parameters', () => {
const result = parseUrlForNavigation('/sign-in?redirect_url=https://example.com', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: { redirect_url: 'https://example.com' },
hash: undefined,
});
});
it('parses pathname with multiple query parameters', () => {
const result = parseUrlForNavigation('/sign-in?redirect_url=https://example.com&foo=bar', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: { redirect_url: 'https://example.com', foo: 'bar' },
hash: undefined,
});
});
it('parses pathname with hash', () => {
const result = parseUrlForNavigation('/sign-in#section', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: undefined,
hash: 'section',
});
});
it('parses pathname with query parameters and hash', () => {
const result = parseUrlForNavigation('/sign-in?redirect_url=https://example.com#section', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: { redirect_url: 'https://example.com' },
hash: 'section',
});
});
it('handles encoded query parameters', () => {
const result = parseUrlForNavigation('/sign-in?redirect_url=https%3A%2F%2Fexample.com%2Fpath', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: { redirect_url: 'https://example.com/path' },
hash: undefined,
});
});
it('handles root path', () => {
const result = parseUrlForNavigation('/', BASE_URL);
expect(result).toEqual({
to: '/',
search: undefined,
hash: undefined,
});
});
it('handles nested paths', () => {
const result = parseUrlForNavigation('/auth/sign-in?foo=bar', BASE_URL);
expect(result).toEqual({
to: '/auth/sign-in',
search: { foo: 'bar' },
hash: undefined,
});
});
it('handles empty hash', () => {
const result = parseUrlForNavigation('/sign-in#', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: undefined,
hash: undefined,
});
});
it('handles complex satellite redirect URL', () => {
const result = parseUrlForNavigation(
'/sign-in?redirect_url=https%3A%2F%2Fsatellite.example.com%2Fdashboard&sign_in_force_redirect_url=https%3A%2F%2Fmain.example.com',
BASE_URL,
);
expect(result).toEqual({
to: '/sign-in',
search: {
redirect_url: 'https://satellite.example.com/dashboard',
sign_in_force_redirect_url: 'https://main.example.com',
},
hash: undefined,
});
});
it('handles hash that looks like a path with query params (PathRouter format)', () => {
// This is what PathRouter converts from: /sign-in#/?redirect_url=...
// After mergeFragmentIntoUrl, it becomes: /sign-in?redirect_url=...
// We should correctly handle both formats
const result = parseUrlForNavigation('/sign-in?redirect_url=https://satellite.com', BASE_URL);
expect(result).toEqual({
to: '/sign-in',
search: { redirect_url: 'https://satellite.com' },
hash: undefined,
});
});
});