Niedzielski has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/396038 )
Change subject: Chore: add router tests for fetch errors ...................................................................... Chore: add router tests for fetch errors Add router tests for errors thrown by Route.getInitialProps(). Change-Id: Icc3fc47cd2be000356ff2ac0cd7cc0885c572bc0 --- M src/common/router/router.test.ts 1 file changed, 62 insertions(+), 13 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/38/396038/1 diff --git a/src/common/router/router.test.ts b/src/common/router/router.test.ts index 080384a..4fe9b65 100644 --- a/src/common/router/router.test.ts +++ b/src/common/router/router.test.ts @@ -5,25 +5,38 @@ // a dynamic import) // @ts-ignore import * as HomeModule from "../pages/home"; -import { RedirectError } from "../http/fetch"; +import { RedirectError, ClientError } from "../http/fetch"; import { newRoute } from "./route"; import { newRouter } from "./router"; + +function requestPageModule() { + return Promise.resolve({ default: { Component: () => null } }); +} const routes = [newRoute({ path: "/", page: "home" })]; describe("router()", () => { describe(".route()", () => { - it("a known route is resolved", () => { - return newRouter(routes) + it("passes route page name to requestPageModule()", () => { + function requestPageModule(page: string) { + assert.deepEqual(page, "home"); + return Promise.resolve({ default: { Component: () => null } }); + } + + return newRouter(routes, requestPageModule).route("/"); + }); + + it("resolves a known route", () => { + return newRouter(routes, requestPageModule) .route("/") .then(rsp => { assert.deepEqual(rsp.status, 200); }); }); - it("an unknown route resolves with the path and appropriate status", () => { - return newRouter(routes) + it("resolves an unknown route as a 404", () => { + return newRouter(routes, requestPageModule) .route("/404") .then(res => { assert.deepEqual(res.status, 404); @@ -31,8 +44,7 @@ }); }); - // eslint-disable-next-line max-len - it("throws redirect errors up for handling on the server/client environment", () => { + it("throws redirect errors up for handling by the server or client", () => { // Page module that throws a redirect const module = { default: { @@ -43,14 +55,9 @@ } }; - const requestPageModule = (page: string) => - page === "redirect" - ? Promise.resolve(module) - : Promise.reject(new Error("No page found")); - const routes = [newRoute({ path: "/redirect", page: "redirect" })]; - return newRouter(routes, requestPageModule) + return newRouter(routes, () => Promise.resolve(module)) .route("/redirect") .catch(err => { assert.ok( @@ -61,5 +68,47 @@ assert.deepEqual(err.url, "/redirected-url"); }); }); + + it("resolves a 404 error in getInitialProps() as a 404 page", () => { + const module = { + default: { + getInitialProps(): Promise<never> { + throw new ClientError(404, "/wiki/Nonexistent_title"); + }, + Component: () => null + } + }; + + const routes = [newRoute({ path: "/wiki/:title", page: "wiki" })]; + + return newRouter(routes, () => Promise.resolve(module)) + .route("/wiki/Nonexistent_title") + .then(rsp => { + assert.deepEqual(rsp.status, 404); + assert.deepEqual(rsp.props.path, "/wiki/Nonexistent_title"); + }); + }); + + // eslint-disable-next-line max-len + it("resolves an unexpected error in getInitialProps() as an error page and prints an error to stderr", () => { + const module = { + default: { + getInitialProps(): Promise<never> { + throw new ClientError(500, "/page/summary/500"); + }, + Component: () => null + } + }; + + const routes = [ + newRoute({ path: "/page/summary/:title", page: "summary" }) + ]; + + return newRouter(routes, () => Promise.resolve(module)) + .route("/page/summary/500") + .then(rsp => { + assert.deepEqual(rsp.status, 500); + }); + }); }); }); -- To view, visit https://gerrit.wikimedia.org/r/396038 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icc3fc47cd2be000356ff2ac0cd7cc0885c572bc0 Gerrit-PatchSet: 1 Gerrit-Project: marvin Gerrit-Branch: master Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org> Gerrit-Reviewer: Sniedzielski <sniedziel...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits