v2 / vlib / veb / tests / nested_embedded_controller_regression_test.v
58 lines · 49 sloc · 1.35 KB · 774f2aa1e037cf768eadb57518227f597e733a67
Raw
1import veb
2
3pub struct NestedEmbeddedContext {
4 veb.Context
5}
6
7pub struct NestedEmbeddedApp {
8 veb.Middleware[NestedEmbeddedContext]
9 veb.Controller
10 veb.StaticHandler
11}
12
13struct NestedEmbeddedAliasApp {
14 NestedEmbeddedApp
15}
16
17struct NestedEmbeddedBase {
18 veb.Middleware[NestedEmbeddedContext]
19}
20
21fn test_nested_embedded_controller_registration() {
22 mut app := &NestedEmbeddedAliasApp{}
23 app.routes_base()
24 routes := veb.generate_routes[NestedEmbeddedAliasApp, NestedEmbeddedContext](app) or {
25 panic(err)
26 }
27 assert app.controllers.len == 1
28 assert app.controllers[0].path == '/base'
29 assert 'index' in routes
30}
31
32fn exercise_nested_embedded_run_path() {
33 mut app := &NestedEmbeddedAliasApp{}
34 app.routes_base()
35 veb.run_at[NestedEmbeddedAliasApp, NestedEmbeddedContext](mut app,
36 port: 0
37 show_startup_message: false
38 family: .ip
39 timeout_in_seconds: 1
40 ) or { panic(err) }
41}
42
43fn (mut app NestedEmbeddedAliasApp) routes_base() {
44 mut base_app := &NestedEmbeddedBase{}
45 app.register_controller[NestedEmbeddedBase, NestedEmbeddedContext]('/base', mut base_app) or {
46 panic(err)
47 }
48}
49
50@['/'; get]
51fn (mut app NestedEmbeddedAliasApp) index(mut ctx NestedEmbeddedContext) veb.Result {
52 return ctx.text('index success')
53}
54
55@['/get'; get]
56fn (mut app NestedEmbeddedBase) base(mut ctx NestedEmbeddedContext) veb.Result {
57 return ctx.text('base success')
58}
59