@@ -11,7 +11,7 @@ import { executeOnceAndFetch } from '../execute-fetch';
1111import { describeServeBuilder } from '../jasmine-helpers' ;
1212import { BASE_OPTIONS , DEV_SERVER_BUILDER_INFO } from '../setup' ;
1313
14- describeServeBuilder ( executeDevServer , DEV_SERVER_BUILDER_INFO , ( harness , setupTarget , isVite ) => {
14+ describeServeBuilder ( executeDevServer , DEV_SERVER_BUILDER_INFO , ( harness , setupTarget ) => {
1515 const javascriptFileContent =
1616 "import {foo} from 'unresolved'; /* a comment */const foo = `bar`;\n\n\n" ;
1717
@@ -95,31 +95,51 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT
9595 expect ( await response ?. text ( ) ) . toContain ( '<h1>Login page</h1>' ) ;
9696 } ) ;
9797
98- ( isVite ? it : xit ) (
99- `should return the asset that matches '.html' when path has no trailing '/'` ,
100- async ( ) => {
101- await harness . writeFile (
102- 'src/login/new.html' ,
103- '<html><body><h1>Login page</h1></body><html>' ,
104- ) ;
105-
106- setupTarget ( harness , {
107- assets : [ 'src/login' ] ,
108- optimization : {
109- scripts : true ,
110- } ,
111- } ) ;
112-
113- harness . useTarget ( 'serve' , {
114- ...BASE_OPTIONS ,
115- } ) ;
116-
117- const { result, response } = await executeOnceAndFetch ( harness , 'login/new' ) ;
118-
119- expect ( result ?. success ) . toBeTrue ( ) ;
120- expect ( await response ?. status ) . toBe ( 200 ) ;
121- expect ( await response ?. text ( ) ) . toContain ( '<h1>Login page</h1>' ) ;
122- } ,
123- ) ;
98+ it ( `should return the asset that matches '.html' when path has no trailing '/'` , async ( ) => {
99+ await harness . writeFile ( 'src/login/new.html' , '<html><body><h1>Login page</h1></body><html>' ) ;
100+
101+ setupTarget ( harness , {
102+ assets : [ 'src/login' ] ,
103+ optimization : {
104+ scripts : true ,
105+ } ,
106+ } ) ;
107+
108+ harness . useTarget ( 'serve' , {
109+ ...BASE_OPTIONS ,
110+ } ) ;
111+
112+ const { result, response } = await executeOnceAndFetch ( harness , 'login/new' ) ;
113+
114+ expect ( result ?. success ) . toBeTrue ( ) ;
115+ expect ( await response ?. status ) . toBe ( 200 ) ;
116+ expect ( await response ?. text ( ) ) . toContain ( '<h1>Login page</h1>' ) ;
117+ } ) ;
118+
119+ it ( `should return a redirect when an asset directory is accessed without a trailing '/'` , async ( ) => {
120+ await harness . writeFile (
121+ 'src/login/index.html' ,
122+ '<html><body><h1>Login page</h1></body><html>' ,
123+ ) ;
124+
125+ setupTarget ( harness , {
126+ assets : [ 'src/login' ] ,
127+ optimization : {
128+ scripts : true ,
129+ } ,
130+ } ) ;
131+
132+ harness . useTarget ( 'serve' , {
133+ ...BASE_OPTIONS ,
134+ } ) ;
135+
136+ const { result, response } = await executeOnceAndFetch ( harness , 'login' , {
137+ request : { redirect : 'manual' } ,
138+ } ) ;
139+
140+ expect ( result ?. success ) . toBeTrue ( ) ;
141+ expect ( await response ?. status ) . toBe ( 301 ) ;
142+ expect ( await response ?. headers . get ( 'Location' ) ) . toBe ( '/login/' ) ;
143+ } ) ;
124144 } ) ;
125145} ) ;
0 commit comments