diff --git a/packages/react/test-app/Pages/DeepMergeProps.tsx b/packages/react/test-app/Pages/DeepMergeProps.tsx index e6dad4f79..bd01cbed3 100644 --- a/packages/react/test-app/Pages/DeepMergeProps.tsx +++ b/packages/react/test-app/Pages/DeepMergeProps.tsx @@ -24,7 +24,7 @@ export default ({ bar, foo, baz }: PageProps) => { const getFresh = () => { setPage(0) - router.reload({ + router.visit('/deep-merge-props', { reset: ['foo', 'baz'], }) } diff --git a/packages/react/test-app/Pages/DeferredProps/WithQueryParams.tsx b/packages/react/test-app/Pages/DeferredProps/WithQueryParams.tsx new file mode 100644 index 000000000..c736eab17 --- /dev/null +++ b/packages/react/test-app/Pages/DeferredProps/WithQueryParams.tsx @@ -0,0 +1,21 @@ +import { Deferred, usePage } from '@inertiajs/react' + +const Users = () => { + const { users } = usePage<{ users?: { text: string } }>().props + + return
{users?.text}
+} + +export default () => { + const { filter } = usePage<{ filter: string }>().props + + return ( + <> +
Filter: {filter}
+ + Loading users...}> + + + + ) +} diff --git a/packages/react/test-app/Pages/MatchPropsOnKey.tsx b/packages/react/test-app/Pages/MatchPropsOnKey.tsx index 86d5f8a5c..a04e6cb9a 100644 --- a/packages/react/test-app/Pages/MatchPropsOnKey.tsx +++ b/packages/react/test-app/Pages/MatchPropsOnKey.tsx @@ -26,7 +26,7 @@ export default ({ bar, foo, baz }: PageProps) => { const [page, setPage] = useState(foo.page) const reloadIt = () => { - router.reload({ + router.visit('/match-props-on-key', { data: { page, }, @@ -39,7 +39,7 @@ export default ({ bar, foo, baz }: PageProps) => { const getFresh = () => { setPage(0) - router.reload({ + router.visit('/match-props-on-key', { reset: ['foo', 'baz'], }) } diff --git a/packages/svelte/test-app/Pages/DeepMergeProps.svelte b/packages/svelte/test-app/Pages/DeepMergeProps.svelte index 465d99902..ff728b3d8 100644 --- a/packages/svelte/test-app/Pages/DeepMergeProps.svelte +++ b/packages/svelte/test-app/Pages/DeepMergeProps.svelte @@ -21,7 +21,7 @@ const getFresh = () => { page = 0 - router.reload({ + router.visit('/deep-merge-props', { reset: ['foo', 'baz'], }) } diff --git a/packages/svelte/test-app/Pages/DeferredProps/WithQueryParams.svelte b/packages/svelte/test-app/Pages/DeferredProps/WithQueryParams.svelte new file mode 100644 index 000000000..742864c1f --- /dev/null +++ b/packages/svelte/test-app/Pages/DeferredProps/WithQueryParams.svelte @@ -0,0 +1,15 @@ + + +
Filter: {filter}
+ + + +
Loading users...
+
+
{users?.text}
+
diff --git a/packages/svelte/test-app/Pages/MatchPropsOnKey.svelte b/packages/svelte/test-app/Pages/MatchPropsOnKey.svelte index 9b0998943..c33e9693a 100644 --- a/packages/svelte/test-app/Pages/MatchPropsOnKey.svelte +++ b/packages/svelte/test-app/Pages/MatchPropsOnKey.svelte @@ -21,7 +21,7 @@ let page = foo.page const reloadIt = () => { - router.reload({ + router.visit('/match-props-on-key', { data: { page, }, @@ -35,7 +35,7 @@ const getFresh = () => { page = 0 - router.reload({ + router.visit('/match-props-on-key', { reset: ['foo', 'baz'], }) } diff --git a/packages/vue3/test-app/Pages/DeepMergeProps.vue b/packages/vue3/test-app/Pages/DeepMergeProps.vue index de0bb3784..8b1f0e7c4 100644 --- a/packages/vue3/test-app/Pages/DeepMergeProps.vue +++ b/packages/vue3/test-app/Pages/DeepMergeProps.vue @@ -34,7 +34,7 @@ const reloadIt = () => { const getFresh = () => { page.value = 0 - router.reload({ + router.visit('/deep-merge-props', { reset: ['foo', 'baz'], }) } diff --git a/packages/vue3/test-app/Pages/DeferredProps/WithQueryParams.vue b/packages/vue3/test-app/Pages/DeferredProps/WithQueryParams.vue new file mode 100644 index 000000000..2696b5ccf --- /dev/null +++ b/packages/vue3/test-app/Pages/DeferredProps/WithQueryParams.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/vue3/test-app/Pages/MatchPropsOnKey.vue b/packages/vue3/test-app/Pages/MatchPropsOnKey.vue index f4742c676..268df3735 100644 --- a/packages/vue3/test-app/Pages/MatchPropsOnKey.vue +++ b/packages/vue3/test-app/Pages/MatchPropsOnKey.vue @@ -21,7 +21,7 @@ const props = defineProps() const page = ref(props.foo.page) const reloadIt = () => { - router.reload({ + router.visit('/match-props-on-key', { data: { page: page.value, }, @@ -36,7 +36,7 @@ const reloadIt = () => { const getFresh = () => { page.value = 0 - router.reload({ + router.visit('/match-props-on-key', { reset: ['foo', 'baz'], }) } diff --git a/tests/app/helpers.js b/tests/app/helpers.js index d71d3b7a6..f2a67bb1b 100644 --- a/tests/app/helpers.js +++ b/tests/app/helpers.js @@ -16,21 +16,16 @@ module.exports = { .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)) .join(''), props: {}, - // TODO: url should be req.originalUrl as that includes the query string - url: req.path, + url: req.originalUrl, version: null, ...data, } - if (data.component.startsWith('InfiniteScroll')) { + if (data.component.startsWith('InfiniteScroll') && req.query.absolutePageUrl) { // Support absolute URL format for testing URL preservation - if (req.query.absolutePageUrl) { - const protocol = req.protocol - const host = req.get('host') - data.url = `${protocol}://${host}${req.originalUrl}` - } else { - data.url = req.originalUrl - } + const protocol = req.protocol + const host = req.get('host') + data.url = `${protocol}://${host}${req.originalUrl}` } const partialDataHeader = req.headers['x-inertia-partial-data'] || '' diff --git a/tests/app/server.js b/tests/app/server.js index da1d0c1c5..1234d5461 100644 --- a/tests/app/server.js +++ b/tests/app/server.js @@ -758,6 +758,34 @@ app.get('/deferred-props/instant-reload', (req, res) => { ) }) +app.get('/deferred-props/with-query-params', (req, res) => { + const filter = req.query.filter || 'none' + const requestedProps = req.headers['x-inertia-partial-data'] + + if (!requestedProps) { + return inertia.render(req, res, { + component: 'DeferredProps/WithQueryParams', + deferredProps: { + default: ['users'], + }, + props: { + filter, + }, + }) + } + + setTimeout( + () => + inertia.render(req, res, { + component: 'DeferredProps/WithQueryParams', + props: { + users: requestedProps.includes('users') ? { text: `users data for ${filter}` } : undefined, + }, + }), + 500, + ) +}) + app.get('/svelte/props-and-page-store', (req, res) => inertia.render(req, res, { component: 'Svelte/PropsAndPageStore', props: { foo: req.query.foo || 'default' } }), ) diff --git a/tests/deep-merge-props.spec.ts b/tests/deep-merge-props.spec.ts index e83b37d0d..b91b457e4 100644 --- a/tests/deep-merge-props.spec.ts +++ b/tests/deep-merge-props.spec.ts @@ -29,7 +29,7 @@ test('can deep merge props', async ({ page }) => { await expect(page.getByText('foo.per_page is 5')).toBeVisible() await expect(page.getByText('foo.meta.label is third')).toBeVisible() - await clickAndWaitForResponse(page, 'Get Fresh', null, 'button') + await clickAndWaitForResponse(page, 'Get Fresh', '/deep-merge-props', 'button') await expect(page.getByText('bar count is 5')).toBeVisible() await expect(page.getByText('baz count is 5')).toBeVisible() diff --git a/tests/deferred-props.spec.ts b/tests/deferred-props.spec.ts index c6c7c6a56..76b2dec8a 100644 --- a/tests/deferred-props.spec.ts +++ b/tests/deferred-props.spec.ts @@ -197,3 +197,26 @@ test('load deferred props with partial reload on mount', async ({ page }) => { await expect(page.getByText('foo value')).toBeVisible() await expect(page.getByText('bar value')).toBeVisible() }) + +test('deferred props preserve query parameters from original URL', async ({ page }) => { + await page.goto('/deferred-props/with-query-params?filter=a') + + // Verify the initial page load has the correct filter + await expect(page.getByText('Filter: a')).toBeVisible() + await expect(page.getByText('Loading users...')).toBeVisible() + + // Wait for and capture the deferred props request + const deferredRequest = await page.waitForResponse((response) => { + const url = response.url() + const headers = response.request().headers() + return headers['x-inertia-partial-data'] === 'users' && url.includes('/deferred-props/with-query-params') + }) + + // Assert that the deferred props request includes the query parameter + const requestUrl = deferredRequest.url() + expect(requestUrl).toContain('filter=a') + + // Verify the deferred data uses the correct filter + await expect(page.getByText('Loading users...')).not.toBeVisible() + await expect(page.getByText('users data for a')).toBeVisible() +}) diff --git a/tests/form-component.spec.ts b/tests/form-component.spec.ts index a1aecddb8..2e197664c 100644 --- a/tests/form-component.spec.ts +++ b/tests/form-component.spec.ts @@ -441,7 +441,7 @@ test.describe('Form Component', () => { expect(scrollBefore).toBeGreaterThan(0) await page.getByRole('button', { name: 'Submit' }).click() - await page.waitForURL('/article') + await page.waitForURL(/\/article/) const scrollAfter = await page.evaluate(() => window.scrollY) // TODO: why is this not exactly 100? diff --git a/tests/links.spec.ts b/tests/links.spec.ts index 408e52951..eca91fd67 100644 --- a/tests/links.spec.ts +++ b/tests/links.spec.ts @@ -331,7 +331,7 @@ test.describe('preserve state', () => { await expect(componentKey).not.toBeUndefined() await page.getByRole('link', { name: label }).click() - await expect(page).toHaveURL('/links/preserve-state-page-two') + await expect(page).toHaveURL(`/links/preserve-state-page-two?foo=${expected}`) const newComponentKey = await page.evaluate(() => (window as any)._inertia_page_key) await expect(newComponentKey).not.toBeUndefined() @@ -365,7 +365,7 @@ test.describe('preserve state', () => { await expect(componentKey).not.toBeUndefined() await page.getByRole('link', { name: label }).click() - await expect(page).toHaveURL('/links/preserve-state-page-two') + await expect(page).toHaveURL(`/links/preserve-state-page-two?foo=${expected}`) // @ts-ignore const newComponentKey = await page.evaluate(() => window._inertia_page_key) @@ -398,7 +398,7 @@ test.describe('preserve url', () => { const initialUrl = page.url() await page.getByRole('link', { name: '[URL] Preserve: false' }).click() - await expect(page).toHaveURL('/links/preserve-url-page-two') + await expect(page).toHaveURL('/links/preserve-url-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await expect(page.url()).not.toBe(initialUrl) // URL should have changed }) @@ -447,7 +447,7 @@ test.describe('preserve scroll', () => { test('does not reset untracked scroll regions in persistent layouts', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll' }).click() - await expect(page).toHaveURL('/links/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-false-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -460,7 +460,7 @@ test.describe('preserve scroll', () => { consoleMessages.listen(page) await page.getByRole('link', { exact: true, name: 'Reset Scroll (Callback)' }).click({ position: { x: 0, y: 0 } }) - await expect(page).toHaveURL('/links/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-false-page-two?foo=foo') await expect(page.getByText('Foo is now foo')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -479,7 +479,7 @@ test.describe('preserve scroll', () => { test('does not restore untracked scroll regions when pressing the back button', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll' }).click() - await expect(page).toHaveURL('/links/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-false-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await scrollElementTo( @@ -505,7 +505,7 @@ test.describe('preserve scroll', () => { .getByRole('link', { exact: true, name: 'Preserve Scroll (Callback)' }) .click({ position: { x: 0, y: 0 } }) - await expect(page).toHaveURL('/links/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-false-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await scrollElementTo( @@ -567,7 +567,7 @@ test.describe('enabled', () => { test('resets scroll regions to the top when doing a regular visit', async ({ page }) => { await page.getByText('Reset Scroll', { exact: true }).click() - await expect(page).toHaveURL('/links/preserve-scroll-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -578,7 +578,7 @@ test.describe('enabled', () => { consoleMessages.listen(page) await page.getByText('Reset Scroll (Callback)', { exact: true }).click({ position: { x: 0, y: 0 } }) - await expect(page).toHaveURL('/links/preserve-scroll-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-page-two?foo=foo') await expect(page.getByText('Foo is now foo')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -596,7 +596,7 @@ test.describe('enabled', () => { test('preserves scroll regions when using the "preserve-scroll" feature', async ({ page }) => { await page.getByText('Preserve Scroll', { exact: true }).click() - await expect(page).toHaveURL('/links/preserve-scroll-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 5 & 7')).toBeVisible() @@ -607,7 +607,7 @@ test.describe('enabled', () => { consoleMessages.listen(page) await page.getByText('Preserve Scroll (Callback)', { exact: true }).click({ position: { x: 0, y: 0 } }) - await expect(page).toHaveURL('/links/preserve-scroll-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 5 & 7')).toBeVisible() @@ -623,7 +623,7 @@ test.describe('enabled', () => { test('restores all tracked scroll regions when pressing the back button', async ({ page }) => { await page.getByTestId('preserve').click() - await expect(page).toHaveURL('/links/preserve-scroll-page-two') + await expect(page).toHaveURL('/links/preserve-scroll-page-two?foo=baz') await page.waitForTimeout(100) await scrollElementTo( @@ -844,7 +844,7 @@ test.describe('partial reloads', () => { requests.listen(page) await page.getByRole('link', { name: 'Update All' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=1') await expect(requests.requests).toHaveLength(1) @@ -858,7 +858,7 @@ test.describe('partial reloads', () => { requests.listen(page) await page.getByRole('link', { name: 'Only foo + bar' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=1') await expect(requests.requests).toHaveLength(1) @@ -873,7 +873,7 @@ test.describe('partial reloads', () => { test('it updates all props when the feature is not being used', async ({ page }) => { await page.getByRole('link', { name: 'Update All' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=1') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() @@ -882,21 +882,21 @@ test.describe('partial reloads', () => { test('it only updates props that are passed through "only"', async ({ page }) => { await page.getByRole('link', { name: 'Only foo + bar' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=1') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() await expect(page.getByText('Baz is now 3')).toBeVisible() await page.getByRole('link', { name: 'Only baz' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=2') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() await expect(page.getByText('Baz is now 5')).toBeVisible() await page.getByRole('link', { name: 'Update All' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=2') await expect(page.getByText('Foo is now 3')).toBeVisible() await expect(page.getByText('Bar is now 4')).toBeVisible() @@ -905,14 +905,14 @@ test.describe('partial reloads', () => { test('it only updates props that are not passed through "except"', async ({ page }) => { await page.getByRole('link', { name: 'Except foo + bar' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=1') await expect(page.getByText('Foo is now 1')).toBeVisible() await expect(page.getByText('Bar is now 2')).toBeVisible() await expect(page.getByText('Baz is now 4')).toBeVisible() await page.getByRole('link', { name: 'Except baz' }).click() - await expect(page).toHaveURL('/links/partial-reloads') + await expect(page).toHaveURL('/links/partial-reloads?foo=1') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() diff --git a/tests/manual-visits.spec.ts b/tests/manual-visits.spec.ts index b63e00e1f..c0b4548f0 100644 --- a/tests/manual-visits.spec.ts +++ b/tests/manual-visits.spec.ts @@ -381,7 +381,7 @@ test.describe('Preserve state', () => { await expect(componentKey).not.toBeUndefined() await page.getByRole('link', { name: label }).click() - await expect(page).toHaveURL('/visits/preserve-state-page-two') + await expect(page).toHaveURL(`/visits/preserve-state-page-two?foo=${expected}`) const newComponentKey = await page.evaluate(() => (window as any)._inertia_page_key) await expect(newComponentKey).not.toBeUndefined() @@ -419,7 +419,7 @@ test.describe('Preserve state', () => { await expect(componentKey).not.toBeUndefined() await page.getByRole('link', { name: label }).click() - await expect(page).toHaveURL('/visits/preserve-state-page-two') + await expect(page).toHaveURL(`/visits/preserve-state-page-two?foo=${expected}`) const newComponentKey = await page.evaluate(() => (window as any)._inertia_page_key) await expect(newComponentKey).not.toBeUndefined() @@ -452,7 +452,7 @@ test.describe('Preserve scroll', () => { test('does not reset untracked scroll regions in persistent layouts (visit method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -461,7 +461,7 @@ test.describe('Preserve scroll', () => { test('does not reset untracked scroll regions in persistent layouts (GET method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll (GET)' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -476,7 +476,7 @@ test.describe('Preserve scroll', () => { await page .getByRole('link', { exact: true, name: 'Reset Scroll (Callback)' }) .click({ position: { x: 20, y: 0 } }) - await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two?foo=foo') await expect(page.getByText('Foo is now foo')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -495,7 +495,7 @@ test.describe('Preserve scroll', () => { test('does not restore untracked scroll regions when pressing the back button (visit method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await scrollElementTo( @@ -518,7 +518,7 @@ test.describe('Preserve scroll', () => { test('does not restore untracked scroll regions when pressing the back button (GET method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll (GET)' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await scrollElementTo( @@ -545,7 +545,7 @@ test.describe('Preserve scroll', () => { await page.getByRole('link', { name: 'Preserve Scroll (Callback)' }).click({ position: { x: 0, y: 0 } }) - await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-false-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await scrollElementTo( @@ -611,7 +611,7 @@ test.describe('Preserve scroll', () => { test('resets scroll regions to the top when doing a regular visit (visit method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -620,7 +620,7 @@ test.describe('Preserve scroll', () => { test('resets scroll regions to the top when doing a regular visit (GET method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Reset Scroll (GET)' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -633,7 +633,7 @@ test.describe('Preserve scroll', () => { .getByRole('link', { exact: true, name: 'Reset Scroll (Callback)' }) .click({ position: { x: 20, y: 0 } }) - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=foo') await expect(page.getByText('Foo is now foo')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 0 & 0')).toBeVisible() @@ -651,7 +651,7 @@ test.describe('Preserve scroll', () => { test('preserves scroll regions when using the "preserve-scroll" feature (visit method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Preserve Scroll' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=foo') await expect(page.getByText('Foo is now foo')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 5 & 7')).toBeVisible() @@ -661,7 +661,7 @@ test.describe('Preserve scroll', () => { test('preserves scroll regions when using the "preserve-scroll" feature (GET method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Preserve Scroll (GET)' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=bar') await expect(page.getByText('Foo is now bar')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 5 & 7')).toBeVisible() @@ -674,7 +674,7 @@ test.describe('Preserve scroll', () => { .getByRole('link', { exact: true, name: 'Preserve Scroll (Callback)' }) .click({ position: { x: 0, y: 0 } }) - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=baz') await expect(page.getByText('Foo is now baz')).toBeVisible() await page.getByRole('button', { exact: true, name: 'Update scroll positions' }).click() await expect(page.getByText('Document scroll position is 5 & 7')).toBeVisible() @@ -690,7 +690,7 @@ test.describe('Preserve scroll', () => { test('restores all tracked scroll regions when pressing the back button (visit method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Preserve Scroll' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=foo') await page.waitForTimeout(100) await scrollElementTo( @@ -711,7 +711,7 @@ test.describe('Preserve scroll', () => { test('restores all tracked scroll regions when pressing the back button (GET method)', async ({ page }) => { await page.getByRole('link', { exact: true, name: 'Preserve Scroll (GET)' }).click() - await expect(page).toHaveURL('/visits/preserve-scroll-page-two') + await expect(page).toHaveURL('/visits/preserve-scroll-page-two?foo=bar') await page.waitForTimeout(100) await scrollElementTo( @@ -801,7 +801,7 @@ test.describe('Partial Reloads', () => { requests.listen(page) await page.getByRole('link', { name: `Update All (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(requests.requests).toHaveLength(1) @@ -815,7 +815,7 @@ test.describe('Partial Reloads', () => { requests.listen(page) await page.getByRole('link', { name: `'Only' foo + bar (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(requests.requests).toHaveLength(1) @@ -832,7 +832,7 @@ test.describe('Partial Reloads', () => { requests.listen(page) await page.getByRole('link', { name: `'Except' foo + bar (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(requests.requests).toHaveLength(1) @@ -847,7 +847,7 @@ test.describe('Partial Reloads', () => { test(`it updates all props when the feature is not being used (${label})`, async ({ page }) => { await page.getByRole('link', { name: `Update All (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() @@ -857,21 +857,21 @@ test.describe('Partial Reloads', () => { test(`it only updates props that are passed through "only" (${label})`, async ({ page }) => { await page.getByRole('link', { name: `'Only' foo + bar (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() await expect(page.getByText('Baz is now 3')).toBeVisible() await page.getByRole('link', { name: `'Only' baz (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=2') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() await expect(page.getByText('Baz is now 5')).toBeVisible() await page.getByRole('link', { name: `Update All (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=2') await expect(page.getByText('Foo is now 3')).toBeVisible() await expect(page.getByText('Bar is now 4')).toBeVisible() @@ -880,14 +880,14 @@ test.describe('Partial Reloads', () => { test(`it only updates props that are not passed through "except" (${label})`, async ({ page }) => { await page.getByRole('link', { name: `'Except' foo + bar (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(page.getByText('Foo is now 1')).toBeVisible() await expect(page.getByText('Bar is now 2')).toBeVisible() await expect(page.getByText('Baz is now 4')).toBeVisible() await page.getByRole('link', { name: `'Except' baz (${label})` }).click() - await expect(page).toHaveURL('/visits/partial-reloads') + await expect(page).toHaveURL('/visits/partial-reloads?foo=1') await expect(page.getByText('Foo is now 2')).toBeVisible() await expect(page.getByText('Bar is now 3')).toBeVisible() diff --git a/tests/merge-props.spec.ts b/tests/merge-props.spec.ts index 6617c3f8a..c91db615c 100644 --- a/tests/merge-props.spec.ts +++ b/tests/merge-props.spec.ts @@ -34,12 +34,12 @@ test('can append to nested props', async ({ page }) => { await expect(page.getByText('User 1, User 2, User 3')).toBeVisible() await expect(page.getByText('Page: 1, Per Page: 3')).toBeVisible() - await clickAndWaitForResponse(page, 'Load More', page.url() + '?page=2', 'button') + await clickAndWaitForResponse(page, 'Load More', '/merge-nested-props/append?page=2', 'button') await expect(page.getByText('User 1, User 2, User 3, User 4, User 5, User 6')).toBeVisible() await expect(page.getByText('Page: 2, Per Page: 3')).toBeVisible() - await clickAndWaitForResponse(page, 'Load More', page.url() + '?page=3', 'button') + await clickAndWaitForResponse(page, 'Load More', '/merge-nested-props/append?page=3', 'button') await expect(page.getByText('User 1, User 2, User 3, User 4, User 5, User 6, User 7, User 8, User 9')).toBeVisible() await expect(page.getByText('Page: 3, Per Page: 3')).toBeVisible() @@ -51,12 +51,12 @@ test('can prepend to nested props', async ({ page }) => { await expect(page.getByText('User 3, User 2, User 1')).toBeVisible() await expect(page.getByText('Page: 1, Per Page: 3')).toBeVisible() - await clickAndWaitForResponse(page, 'Load More', page.url() + '?page=2', 'button') + await clickAndWaitForResponse(page, 'Load More', '/merge-nested-props/prepend?page=2', 'button') await expect(page.getByText('User 6, User 5, User 4, User 3, User 2, User 1')).toBeVisible() await expect(page.getByText('Page: 2, Per Page: 3')).toBeVisible() - await clickAndWaitForResponse(page, 'Load More', page.url() + '?page=3', 'button') + await clickAndWaitForResponse(page, 'Load More', '/merge-nested-props/prepend?page=3', 'button') await expect(page.getByText('User 9, User 8, User 7, User 6, User 5, User 4, User 3, User 2, User 1')).toBeVisible() await expect(page.getByText('Page: 3, Per Page: 3')).toBeVisible() diff --git a/tests/support.ts b/tests/support.ts index bae7d4abb..29b7c6498 100644 --- a/tests/support.ts +++ b/tests/support.ts @@ -56,7 +56,7 @@ export const requests = { } export const shouldBeDumpPage = async (page: Page, method: 'get' | 'post' | 'patch' | 'put' | 'delete') => { - await expect(page).toHaveURL(`dump/${method}`) + await expect(page).toHaveURL(new RegExp(`dump/${method}`)) // @ts-ignore const dump = await page.evaluate(() => window._inertia_request_dump) await expect(dump).not.toBeNull() diff --git a/tests/svelte.spec.ts b/tests/svelte.spec.ts index fba22eab0..1c51c16b1 100644 --- a/tests/svelte.spec.ts +++ b/tests/svelte.spec.ts @@ -74,7 +74,7 @@ test('props and page store are in sync', async ({ page }) => { await page.waitForURL('/') await page.goBack() - await page.waitForURL('/svelte/props-and-page-store') + await page.waitForURL('/svelte/props-and-page-store?foo=baz') consoleMessages.messages = [] await expect(page.getByText('foo prop is baz')).toBeVisible() diff --git a/tests/when-visible.spec.ts b/tests/when-visible.spec.ts index 5fb504392..e78de9fe6 100644 --- a/tests/when-visible.spec.ts +++ b/tests/when-visible.spec.ts @@ -72,7 +72,7 @@ test('it will wait to fire the reload until element is visible', async ({ page } await page.evaluate(() => (window as any).scrollTo(0, 26_000)) await expect(page.getByText('Loading fifth one...')).toBeVisible() - await page.waitForResponse(page.url() + '?count=0') + await page.waitForResponse('/when-visible?count=0') await expect(page.getByText('Loading fifth one...')).not.toBeVisible() await expect(page.getByText('Count is now 1')).toBeVisible() @@ -82,6 +82,6 @@ test('it will wait to fire the reload until element is visible', async ({ page } await page.evaluate(() => (window as any).scrollTo(0, 26_000)) await expect(page.getByText('Count is now 1')).toBeVisible() - await page.waitForResponse(page.url() + '?count=1') + await page.waitForResponse('/when-visible?count=1') await expect(page.getByText('Count is now 2')).toBeVisible() })