Skip to content

Commit b5c96d4

Browse files
authored
test(solid-start): sync server-routes e2e to react (#5618)
1 parent 3ce120b commit b5c96d4

13 files changed

Lines changed: 354 additions & 28 deletions

File tree

e2e/solid-start/server-routes/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
"test:e2e": "playwright test --project=chromium"
1212
},
1313
"dependencies": {
14+
"@tanstack/solid-query": "^5.71.9",
1415
"@tanstack/solid-router": "workspace:^",
1516
"@tanstack/solid-router-devtools": "workspace:^",
17+
"@tanstack/solid-router-ssr-query": "workspace:^",
1618
"@tanstack/solid-start": "workspace:^",
1719
"js-cookie": "^3.0.5",
1820
"redaxios": "^0.5.1",

e2e/solid-start/server-routes/src/routeTree.gen.ts

Lines changed: 165 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,71 +9,153 @@
99
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
1010

1111
import { Route as rootRouteImport } from './routes/__root'
12-
import { Route as MergeServerFnMiddlewareContextRouteImport } from './routes/merge-server-fn-middleware-context'
12+
import { Route as MergeMiddlewareContextRouteImport } from './routes/merge-middleware-context'
13+
import { Route as MethodsRouteRouteImport } from './routes/methods/route'
1314
import { Route as IndexRouteImport } from './routes/index'
15+
import { Route as MethodsIndexRouteImport } from './routes/methods/index'
16+
import { Route as MethodsOnlyAnyRouteImport } from './routes/methods/only-any'
17+
import { Route as ApiOnlyAnyRouteImport } from './routes/api/only-any'
1418
import { Route as ApiMiddlewareContextRouteImport } from './routes/api/middleware-context'
19+
import { Route as ApiParamsFooRouteRouteImport } from './routes/api/params/$foo/route'
20+
import { Route as ApiParamsFooBarRouteImport } from './routes/api/params/$foo/$bar'
1521

16-
const MergeServerFnMiddlewareContextRoute =
17-
MergeServerFnMiddlewareContextRouteImport.update({
18-
id: '/merge-server-fn-middleware-context',
19-
path: '/merge-server-fn-middleware-context',
20-
getParentRoute: () => rootRouteImport,
21-
} as any)
22+
const MergeMiddlewareContextRoute = MergeMiddlewareContextRouteImport.update({
23+
id: '/merge-middleware-context',
24+
path: '/merge-middleware-context',
25+
getParentRoute: () => rootRouteImport,
26+
} as any)
27+
const MethodsRouteRoute = MethodsRouteRouteImport.update({
28+
id: '/methods',
29+
path: '/methods',
30+
getParentRoute: () => rootRouteImport,
31+
} as any)
2232
const IndexRoute = IndexRouteImport.update({
2333
id: '/',
2434
path: '/',
2535
getParentRoute: () => rootRouteImport,
2636
} as any)
37+
const MethodsIndexRoute = MethodsIndexRouteImport.update({
38+
id: '/',
39+
path: '/',
40+
getParentRoute: () => MethodsRouteRoute,
41+
} as any)
42+
const MethodsOnlyAnyRoute = MethodsOnlyAnyRouteImport.update({
43+
id: '/only-any',
44+
path: '/only-any',
45+
getParentRoute: () => MethodsRouteRoute,
46+
} as any)
47+
const ApiOnlyAnyRoute = ApiOnlyAnyRouteImport.update({
48+
id: '/api/only-any',
49+
path: '/api/only-any',
50+
getParentRoute: () => rootRouteImport,
51+
} as any)
2752
const ApiMiddlewareContextRoute = ApiMiddlewareContextRouteImport.update({
2853
id: '/api/middleware-context',
2954
path: '/api/middleware-context',
3055
getParentRoute: () => rootRouteImport,
3156
} as any)
57+
const ApiParamsFooRouteRoute = ApiParamsFooRouteRouteImport.update({
58+
id: '/api/params/$foo',
59+
path: '/api/params/$foo',
60+
getParentRoute: () => rootRouteImport,
61+
} as any)
62+
const ApiParamsFooBarRoute = ApiParamsFooBarRouteImport.update({
63+
id: '/$bar',
64+
path: '/$bar',
65+
getParentRoute: () => ApiParamsFooRouteRoute,
66+
} as any)
3267

3368
export interface FileRoutesByFullPath {
3469
'/': typeof IndexRoute
35-
'/merge-server-fn-middleware-context': typeof MergeServerFnMiddlewareContextRoute
70+
'/methods': typeof MethodsRouteRouteWithChildren
71+
'/merge-middleware-context': typeof MergeMiddlewareContextRoute
3672
'/api/middleware-context': typeof ApiMiddlewareContextRoute
73+
'/api/only-any': typeof ApiOnlyAnyRoute
74+
'/methods/only-any': typeof MethodsOnlyAnyRoute
75+
'/methods/': typeof MethodsIndexRoute
76+
'/api/params/$foo': typeof ApiParamsFooRouteRouteWithChildren
77+
'/api/params/$foo/$bar': typeof ApiParamsFooBarRoute
3778
}
3879
export interface FileRoutesByTo {
3980
'/': typeof IndexRoute
40-
'/merge-server-fn-middleware-context': typeof MergeServerFnMiddlewareContextRoute
81+
'/merge-middleware-context': typeof MergeMiddlewareContextRoute
4182
'/api/middleware-context': typeof ApiMiddlewareContextRoute
83+
'/api/only-any': typeof ApiOnlyAnyRoute
84+
'/methods/only-any': typeof MethodsOnlyAnyRoute
85+
'/methods': typeof MethodsIndexRoute
86+
'/api/params/$foo': typeof ApiParamsFooRouteRouteWithChildren
87+
'/api/params/$foo/$bar': typeof ApiParamsFooBarRoute
4288
}
4389
export interface FileRoutesById {
4490
__root__: typeof rootRouteImport
4591
'/': typeof IndexRoute
46-
'/merge-server-fn-middleware-context': typeof MergeServerFnMiddlewareContextRoute
92+
'/methods': typeof MethodsRouteRouteWithChildren
93+
'/merge-middleware-context': typeof MergeMiddlewareContextRoute
4794
'/api/middleware-context': typeof ApiMiddlewareContextRoute
95+
'/api/only-any': typeof ApiOnlyAnyRoute
96+
'/methods/only-any': typeof MethodsOnlyAnyRoute
97+
'/methods/': typeof MethodsIndexRoute
98+
'/api/params/$foo': typeof ApiParamsFooRouteRouteWithChildren
99+
'/api/params/$foo/$bar': typeof ApiParamsFooBarRoute
48100
}
49101
export interface FileRouteTypes {
50102
fileRoutesByFullPath: FileRoutesByFullPath
51103
fullPaths:
52104
| '/'
53-
| '/merge-server-fn-middleware-context'
105+
| '/methods'
106+
| '/merge-middleware-context'
54107
| '/api/middleware-context'
108+
| '/api/only-any'
109+
| '/methods/only-any'
110+
| '/methods/'
111+
| '/api/params/$foo'
112+
| '/api/params/$foo/$bar'
55113
fileRoutesByTo: FileRoutesByTo
56-
to: '/' | '/merge-server-fn-middleware-context' | '/api/middleware-context'
114+
to:
115+
| '/'
116+
| '/merge-middleware-context'
117+
| '/api/middleware-context'
118+
| '/api/only-any'
119+
| '/methods/only-any'
120+
| '/methods'
121+
| '/api/params/$foo'
122+
| '/api/params/$foo/$bar'
57123
id:
58124
| '__root__'
59125
| '/'
60-
| '/merge-server-fn-middleware-context'
126+
| '/methods'
127+
| '/merge-middleware-context'
61128
| '/api/middleware-context'
129+
| '/api/only-any'
130+
| '/methods/only-any'
131+
| '/methods/'
132+
| '/api/params/$foo'
133+
| '/api/params/$foo/$bar'
62134
fileRoutesById: FileRoutesById
63135
}
64136
export interface RootRouteChildren {
65137
IndexRoute: typeof IndexRoute
66-
MergeServerFnMiddlewareContextRoute: typeof MergeServerFnMiddlewareContextRoute
138+
MethodsRouteRoute: typeof MethodsRouteRouteWithChildren
139+
MergeMiddlewareContextRoute: typeof MergeMiddlewareContextRoute
67140
ApiMiddlewareContextRoute: typeof ApiMiddlewareContextRoute
141+
ApiOnlyAnyRoute: typeof ApiOnlyAnyRoute
142+
ApiParamsFooRouteRoute: typeof ApiParamsFooRouteRouteWithChildren
68143
}
69144

70145
declare module '@tanstack/solid-router' {
71146
interface FileRoutesByPath {
72-
'/merge-server-fn-middleware-context': {
73-
id: '/merge-server-fn-middleware-context'
74-
path: '/merge-server-fn-middleware-context'
75-
fullPath: '/merge-server-fn-middleware-context'
76-
preLoaderRoute: typeof MergeServerFnMiddlewareContextRouteImport
147+
'/merge-middleware-context': {
148+
id: '/merge-middleware-context'
149+
path: '/merge-middleware-context'
150+
fullPath: '/merge-middleware-context'
151+
preLoaderRoute: typeof MergeMiddlewareContextRouteImport
152+
parentRoute: typeof rootRouteImport
153+
}
154+
'/methods': {
155+
id: '/methods'
156+
path: '/methods'
157+
fullPath: '/methods'
158+
preLoaderRoute: typeof MethodsRouteRouteImport
77159
parentRoute: typeof rootRouteImport
78160
}
79161
'/': {
@@ -83,20 +165,83 @@ declare module '@tanstack/solid-router' {
83165
preLoaderRoute: typeof IndexRouteImport
84166
parentRoute: typeof rootRouteImport
85167
}
168+
'/methods/': {
169+
id: '/methods/'
170+
path: '/'
171+
fullPath: '/methods/'
172+
preLoaderRoute: typeof MethodsIndexRouteImport
173+
parentRoute: typeof MethodsRouteRoute
174+
}
175+
'/methods/only-any': {
176+
id: '/methods/only-any'
177+
path: '/only-any'
178+
fullPath: '/methods/only-any'
179+
preLoaderRoute: typeof MethodsOnlyAnyRouteImport
180+
parentRoute: typeof MethodsRouteRoute
181+
}
182+
'/api/only-any': {
183+
id: '/api/only-any'
184+
path: '/api/only-any'
185+
fullPath: '/api/only-any'
186+
preLoaderRoute: typeof ApiOnlyAnyRouteImport
187+
parentRoute: typeof rootRouteImport
188+
}
86189
'/api/middleware-context': {
87190
id: '/api/middleware-context'
88191
path: '/api/middleware-context'
89192
fullPath: '/api/middleware-context'
90193
preLoaderRoute: typeof ApiMiddlewareContextRouteImport
91194
parentRoute: typeof rootRouteImport
92195
}
196+
'/api/params/$foo': {
197+
id: '/api/params/$foo'
198+
path: '/api/params/$foo'
199+
fullPath: '/api/params/$foo'
200+
preLoaderRoute: typeof ApiParamsFooRouteRouteImport
201+
parentRoute: typeof rootRouteImport
202+
}
203+
'/api/params/$foo/$bar': {
204+
id: '/api/params/$foo/$bar'
205+
path: '/$bar'
206+
fullPath: '/api/params/$foo/$bar'
207+
preLoaderRoute: typeof ApiParamsFooBarRouteImport
208+
parentRoute: typeof ApiParamsFooRouteRoute
209+
}
93210
}
94211
}
95212

213+
interface MethodsRouteRouteChildren {
214+
MethodsOnlyAnyRoute: typeof MethodsOnlyAnyRoute
215+
MethodsIndexRoute: typeof MethodsIndexRoute
216+
}
217+
218+
const MethodsRouteRouteChildren: MethodsRouteRouteChildren = {
219+
MethodsOnlyAnyRoute: MethodsOnlyAnyRoute,
220+
MethodsIndexRoute: MethodsIndexRoute,
221+
}
222+
223+
const MethodsRouteRouteWithChildren = MethodsRouteRoute._addFileChildren(
224+
MethodsRouteRouteChildren,
225+
)
226+
227+
interface ApiParamsFooRouteRouteChildren {
228+
ApiParamsFooBarRoute: typeof ApiParamsFooBarRoute
229+
}
230+
231+
const ApiParamsFooRouteRouteChildren: ApiParamsFooRouteRouteChildren = {
232+
ApiParamsFooBarRoute: ApiParamsFooBarRoute,
233+
}
234+
235+
const ApiParamsFooRouteRouteWithChildren =
236+
ApiParamsFooRouteRoute._addFileChildren(ApiParamsFooRouteRouteChildren)
237+
96238
const rootRouteChildren: RootRouteChildren = {
97239
IndexRoute: IndexRoute,
98-
MergeServerFnMiddlewareContextRoute: MergeServerFnMiddlewareContextRoute,
240+
MethodsRouteRoute: MethodsRouteRouteWithChildren,
241+
MergeMiddlewareContextRoute: MergeMiddlewareContextRoute,
99242
ApiMiddlewareContextRoute: ApiMiddlewareContextRoute,
243+
ApiOnlyAnyRoute: ApiOnlyAnyRoute,
244+
ApiParamsFooRouteRoute: ApiParamsFooRouteRouteWithChildren,
100245
}
101246
export const routeTree = rootRouteImport
102247
._addFileChildren(rootRouteChildren)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
import { createRouter } from '@tanstack/solid-router'
2+
import { setupRouterSsrQueryIntegration } from '@tanstack/solid-router-ssr-query'
3+
import { QueryClient } from '@tanstack/solid-query'
24
import { routeTree } from './routeTree.gen'
35
import { DefaultCatchBoundary } from './components/DefaultCatchBoundary'
46
import { NotFound } from './components/NotFound'
57

68
export function getRouter() {
9+
const queryClient = new QueryClient()
710
const router = createRouter({
811
routeTree,
912
defaultPreload: 'intent',
1013
defaultErrorComponent: DefaultCatchBoundary,
1114
defaultNotFoundComponent: () => <NotFound />,
1215
scrollRestoration: true,
1316
})
17+
setupRouterSsrQueryIntegration({ router, queryClient })
1418

1519
return router
1620
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { createFileRoute } from '@tanstack/solid-router'
2+
import { json } from '@tanstack/solid-start'
3+
4+
export const Route = createFileRoute('/api/only-any')({
5+
server: {
6+
handlers: {
7+
ANY: ({ request }) => {
8+
return json(
9+
{
10+
handler: 'ANY',
11+
method: request.method,
12+
},
13+
{ headers: { 'X-HANDLER': 'ANY', 'X-METHOD': request.method } },
14+
)
15+
},
16+
},
17+
},
18+
})
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { createFileRoute } from '@tanstack/solid-router'
2+
3+
export const Route = createFileRoute('/api/params/$foo/$bar')({
4+
server: {
5+
handlers: {
6+
GET: ({ params }) => {
7+
return new Response('hello, ' + params.foo + ' and ' + params.bar)
8+
},
9+
},
10+
},
11+
})
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { createFileRoute } from '@tanstack/solid-router'
2+
3+
export const Route = createFileRoute('/api/params/$foo')({
4+
server: {
5+
handlers: {
6+
GET: ({ params }) => {
7+
return new Response('hello, ' + params.foo)
8+
},
9+
},
10+
},
11+
})

e2e/solid-start/server-routes/src/routes/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ function Home() {
1010
<h1 class="font-bold text-lg">Server routes E2E tests</h1>
1111
<ul class="list-disc p-4">
1212
<li>
13-
<Link to="/merge-server-fn-middleware-context">
14-
server function middleware context is merged correctly
13+
<Link to="/merge-middleware-context">
14+
server route middleware context is merged correctly
1515
</Link>
1616
</li>
17+
<li>
18+
<Link to="/methods">server route methods</Link>
19+
</li>
1720
</ul>
1821
</div>
1922
)

e2e/solid-start/server-routes/src/routes/merge-server-fn-middleware-context.tsx renamed to e2e/solid-start/server-routes/src/routes/merge-middleware-context.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { createFileRoute } from '@tanstack/solid-router'
22
import { createSignal } from 'solid-js'
33

4-
export const Route = createFileRoute('/merge-server-fn-middleware-context')({
5-
component: () => <MergeServerFnMiddlewareContext />,
4+
export const Route = createFileRoute('/merge-middleware-context')({
5+
component: () => <MergeMiddlewareContext />,
66
})
77

8-
function MergeServerFnMiddlewareContext() {
8+
function MergeMiddlewareContext() {
99
const [apiResponse, setApiResponse] = createSignal<any>(null)
1010

1111
const fetchMiddlewareContext = async () => {
@@ -21,7 +21,7 @@ function MergeServerFnMiddlewareContext() {
2121

2222
return (
2323
<div class="p-2 m-2 grid gap-2">
24-
<h3>Merge Server Function Middleware Context Test</h3>
24+
<h3>Merge Server Route Middleware Context Test</h3>
2525
<div class="flex flex-col gap-2">
2626
<button
2727
type="button"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { createFileRoute } from '@tanstack/solid-router'
2+
3+
export const Route = createFileRoute('/methods/')({
4+
component: RouteComponent,
5+
})
6+
7+
function RouteComponent() {
8+
return (
9+
<div class="p-8">
10+
<ul class="list-disc p-4">
11+
<li>
12+
<Route.Link to="./only-any">
13+
Server Route only has ANY handler
14+
</Route.Link>
15+
</li>
16+
</ul>
17+
</div>
18+
)
19+
}

0 commit comments

Comments
 (0)