1+ using  InertiaCore . Models ; 
2+ using  Microsoft . AspNetCore . Http ; 
3+ using  Microsoft . AspNetCore . Mvc ; 
4+ using  Moq ; 
5+ 
6+ namespace  InertiaCoreTests ; 
7+ 
8+ public  partial  class  Tests 
9+ { 
10+     [ Test ] 
11+     [ Description ( "Test if custom URL resolver is used when provided." ) ] 
12+     public  async  Task  TestCustomUrlResolver ( ) 
13+     { 
14+         // Set up a custom URL resolver 
15+         _factory . ResolveUrlUsing ( context =>  "/custom/url" ) ; 
16+ 
17+         var  response  =  _factory . Render ( "Test/Page" ,  new 
18+         { 
19+             Test  =  "Test" 
20+         } ) ; 
21+ 
22+         var  context  =  PrepareContext ( ) ; 
23+ 
24+         response . SetContext ( context ) ; 
25+         await  response . ProcessResponse ( ) ; 
26+ 
27+         var  page  =  response . GetJson ( ) . Value  as  Page ; 
28+ 
29+         Assert . That ( page ? . Url ,  Is . EqualTo ( "/custom/url" ) ) ; 
30+         Assert . That ( page ? . Props ,  Is . EqualTo ( new  Dictionary < string ,  object ? > 
31+         { 
32+             {  "test" ,  "Test"  } , 
33+             {  "errors" ,  new  Dictionary < string ,  string > ( 0 )  } 
34+         } ) ) ; 
35+     } 
36+ 
37+     [ Test ] 
38+     [ Description ( "Test if default URL resolver is used when no custom resolver is provided." ) ] 
39+     public  async  Task  TestDefaultUrlResolver ( ) 
40+     { 
41+         var  response  =  _factory . Render ( "Test/Page" ,  new 
42+         { 
43+             Test  =  "Test" 
44+         } ) ; 
45+ 
46+         var  context  =  PrepareContext ( ) ; 
47+ 
48+         response . SetContext ( context ) ; 
49+         await  response . ProcessResponse ( ) ; 
50+ 
51+         var  page  =  response . GetJson ( ) . Value  as  Page ; 
52+ 
53+         // Should use the default RequestedUri() method 
54+         Assert . That ( page ? . Url ,  Is . Not . Null ) ; 
55+         Assert . That ( page ? . Props ,  Is . EqualTo ( new  Dictionary < string ,  object ? > 
56+         { 
57+             {  "test" ,  "Test"  } , 
58+             {  "errors" ,  new  Dictionary < string ,  string > ( 0 )  } 
59+         } ) ) ; 
60+     } 
61+ 
62+     [ Test ] 
63+     [ Description ( "Test if custom URL resolver receives correct ActionContext." ) ] 
64+     public  async  Task  TestUrlResolverReceivesContext ( ) 
65+     { 
66+         ActionContext ?  receivedContext  =  null ; 
67+ 
68+         // Set up a custom URL resolver that captures the context 
69+         _factory . ResolveUrlUsing ( context => 
70+         { 
71+             receivedContext  =  context ; 
72+             return  "/captured/context/url" ; 
73+         } ) ; 
74+ 
75+         var  response  =  _factory . Render ( "Test/Page" ,  new 
76+         { 
77+             Test  =  "Test" 
78+         } ) ; 
79+ 
80+         var  context  =  PrepareContext ( ) ; 
81+ 
82+         response . SetContext ( context ) ; 
83+         await  response . ProcessResponse ( ) ; 
84+ 
85+         var  page  =  response . GetJson ( ) . Value  as  Page ; 
86+ 
87+         Assert . That ( page ? . Url ,  Is . EqualTo ( "/captured/context/url" ) ) ; 
88+         Assert . That ( receivedContext ,  Is . Not . Null ) ; 
89+         Assert . That ( receivedContext ,  Is . EqualTo ( context ) ) ; 
90+     } 
91+ 
92+     [ Test ] 
93+     [ Description ( "Test if custom URL resolver can access request information." ) ] 
94+     public  async  Task  TestUrlResolverAccessesRequest ( ) 
95+     { 
96+         // Set up a custom URL resolver that uses request path 
97+         _factory . ResolveUrlUsing ( context => 
98+         { 
99+             var  path  =  context . HttpContext . Request . Path ; 
100+             return  $ "/custom{ path } "; 
101+         } ) ; 
102+ 
103+         var  response  =  _factory . Render ( "Test/Page" ,  new 
104+         { 
105+             Test  =  "Test" 
106+         } ) ; 
107+ 
108+         var  context  =  PrepareContext ( ) ; 
109+ 
110+         response . SetContext ( context ) ; 
111+         await  response . ProcessResponse ( ) ; 
112+ 
113+         var  page  =  response . GetJson ( ) . Value  as  Page ; 
114+ 
115+         Assert . That ( page ? . Url ,  Is . Not . Null ) ; 
116+         Assert . That ( page ? . Url ,  Does . StartWith ( "/custom" ) ) ; 
117+     } 
118+ 
119+     [ Test ] 
120+     [ Description ( "Test if URL resolver can be changed between requests." ) ] 
121+     public  async  Task  TestUrlResolverCanBeChanged ( ) 
122+     { 
123+         // First resolver 
124+         _factory . ResolveUrlUsing ( context =>  "/first/url" ) ; 
125+ 
126+         var  response1  =  _factory . Render ( "Test/Page" ,  new  {  Test  =  "Test1"  } ) ; 
127+         var  context1  =  PrepareContext ( ) ; 
128+ 
129+         response1 . SetContext ( context1 ) ; 
130+         await  response1 . ProcessResponse ( ) ; 
131+ 
132+         var  page1  =  response1 . GetJson ( ) . Value  as  Page ; 
133+         Assert . That ( page1 ? . Url ,  Is . EqualTo ( "/first/url" ) ) ; 
134+ 
135+         // Change resolver 
136+         _factory . ResolveUrlUsing ( context =>  "/second/url" ) ; 
137+ 
138+         var  response2  =  _factory . Render ( "Test/Page" ,  new  {  Test  =  "Test2"  } ) ; 
139+         var  context2  =  PrepareContext ( ) ; 
140+ 
141+         response2 . SetContext ( context2 ) ; 
142+         await  response2 . ProcessResponse ( ) ; 
143+ 
144+         var  page2  =  response2 . GetJson ( ) . Value  as  Page ; 
145+         Assert . That ( page2 ? . Url ,  Is . EqualTo ( "/second/url" ) ) ; 
146+     } 
147+ } 
0 commit comments