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

Reply via email to