From 9c40914bbacbc6eb0aaac3e6548d03fd7d071d4e Mon Sep 17 00:00:00 2001 From: Shin'ya UEOKA Date: Fri, 27 Sep 2019 10:02:00 +0000 Subject: [PATCH] Add TestServer --- e2e/lib/TestServer.ts | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 e2e/lib/TestServer.ts diff --git a/e2e/lib/TestServer.ts b/e2e/lib/TestServer.ts new file mode 100644 index 0000000..ba9845b --- /dev/null +++ b/e2e/lib/TestServer.ts @@ -0,0 +1,52 @@ +import * as http from 'http'; +import * as net from 'net' +import express from 'express'; + +type HandlerFunc = (req: express.Request, res: express.Response) => void; + +export default class TestServer { + private http?: http.Server; + + private app: express.Application; + + constructor( + private port = 0, + private address = '127.0.0.1', + ){ + this.app = express(); + } + + handle(path: string, f: HandlerFunc): TestServer { + this.app.get(path, f); + return this; + } + + receiveContent(path: string, content: string): TestServer { + this.app.get(path, (_req: express.Request, res: express.Response) => { + res.status(200).send(content) + }); + return this; + } + + url(path: string = '/'): string { + if (!this.http) { + throw new Error('http server not started'); + } + + let addr = this.http.address() as net.AddressInfo; + return `http://${addr.address}:${addr.port}${path}` + } + + listen() { + this.http = http.createServer(this.app) + this.http.listen(this.port, this.address); + } + + close(): void { + if (!this.http) { + return; + } + this.http.close(); + this.http = undefined; + } +}