diff options
Diffstat (limited to 'test/runner/createTestServer.js')
-rw-r--r-- | test/runner/createTestServer.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/runner/createTestServer.js b/test/runner/createTestServer.js new file mode 100644 index 000000000..ebc6bd4bb --- /dev/null +++ b/test/runner/createTestServer.js @@ -0,0 +1,60 @@ +import bodyParser from "body-parser"; +import express from "express"; +import bodyParserErrorHandler from "express-body-parser-error-handler"; +import fs from "fs"; +import mockServer from "../middleware-mockserver.cjs"; + +export async function createTestServer( report ) { + const nameHTML = await fs.promises.readFile( "./test/data/name.html", "utf8" ); + const indexHTML = await fs.promises.readFile( "./test/index.html", "utf8" ); + const app = express(); + + // Redirect home to test page + app.get( "/", ( _req, res ) => { + res.redirect( "/test/" ); + } ); + + // Redirect to trailing slash + app.use( ( req, res, next ) => { + if ( req.path === "/test" ) { + const query = req.url.slice( req.path.length ); + res.redirect( 301, `${ req.path }/${ query }` ); + } else { + next(); + } + } ); + + // Add a script tag to the index.html to load the QUnit listeners + app.use( /\/test(?:\/index.html)?\//, ( _req, res ) => { + res.send( indexHTML.replace( + "</head>", + "<script src=\"/test/runner/listeners.js\"></script></head>" + ) ); + } ); + + // Bind the reporter + app.post( "/api/report", bodyParser.json( { limit: "50mb" } ), ( req, res ) => { + if ( report ) { + report( req.body ); + } + res.sendStatus( 204 ); + } ); + + // Handle errors from the body parser + app.use( bodyParserErrorHandler() ); + + // Hook up mock server + app.use( mockServer() ); + + // Serve static files + app.post( "/test/data/name.html", ( _req, res ) => { + res.send( nameHTML ); + } ); + + app.use( "/dist", express.static( "dist" ) ); + app.use( "/src", express.static( "src" ) ); + app.use( "/test", express.static( "test" ) ); + app.use( "/external", express.static( "external" ) ); + + return app; +} |