jenkins-bot has submitted this change and it was merged. (
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(-)
Approvals:
Jhernandez: Looks good to me, approved
jenkins-bot: Verified
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: merged
Gerrit-Change-Id: Icc3fc47cd2be000356ff2ac0cd7cc0885c572bc0
Gerrit-PatchSet: 2
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: Jhernandez <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits