Skip to content

Commit

Permalink
Clean up some tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mjackson committed Oct 23, 2021
1 parent 95596d3 commit 71683a0
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 161 deletions.
188 changes: 63 additions & 125 deletions packages/react-router/__tests__/useHref-basename-test.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
import * as React from "react";
import { create as createTestRenderer } from "react-test-renderer";
import { MemoryRouter, Routes, Route, useHref } from "react-router";
import { render } from "react-dom";

function ShowHref({ to }: { to: string }) {
return <p>{useHref(to)}</p>;
}

describe("useHref under a basename", () => {
describe("to an absolute route", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("/invoices");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="/invoices" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -30,19 +28,13 @@ describe("useHref under a basename", () => {

describe("to a child route", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("invoices");
return <p>{href}</p>;
}
let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="invoices" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -53,20 +45,13 @@ describe("useHref under a basename", () => {

describe("when the URL has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("invoices");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin/"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="invoices" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -78,20 +63,13 @@ describe("useHref under a basename", () => {

describe("when the href has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("invoices/");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="invoices/" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -104,20 +82,13 @@ describe("useHref under a basename", () => {

describe("to a sibling route", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../dashboard");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="../dashboard" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -128,20 +99,13 @@ describe("useHref under a basename", () => {

describe("when the URL has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../dashboard");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin/"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="../dashboard" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -153,20 +117,13 @@ describe("useHref under a basename", () => {

describe("when the href has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../dashboard/");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="../dashboard/" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -179,20 +136,13 @@ describe("useHref under a basename", () => {

describe("to a parent route", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("..");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to=".." />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -203,20 +153,13 @@ describe("useHref under a basename", () => {

describe("when the URL has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("..");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin/"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to=".." />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -228,20 +171,13 @@ describe("useHref under a basename", () => {

describe("when the href has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="../" />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -254,20 +190,16 @@ describe("useHref under a basename", () => {

describe("with a to value that has more .. segments than the current URL", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../../../dashboard");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route
path="admin"
element={<ShowHref to="../../../dashboard" />}
/>
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

// This is correct because the basename works like a chroot "jail".
// Relative <Link to> values cannot "escape" into a higher level URL since
Expand All @@ -282,20 +214,13 @@ describe("useHref under a basename", () => {

describe("and no additional segments", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../../..");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route path="admin" element={<ShowHref to="../../.." />} />
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

// This is correct because the basename works like a chroot "jail".
// Relative <Link to> values cannot "escape" into a higher level URL
Expand All @@ -311,20 +236,16 @@ describe("useHref under a basename", () => {

describe("when the URL has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../../../dashboard");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin/"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route
path="admin"
element={<ShowHref to="../../../dashboard" />}
/>
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

// This is correct because the basename works like a chroot "jail".
// Relative <Link to> values cannot "escape" into a higher level URL
Expand All @@ -340,20 +261,16 @@ describe("useHref under a basename", () => {

describe("when the href has a trailing slash", () => {
it("returns the correct href", () => {
function Admin() {
let href = useHref("../../../dashboard/");
return <p>{href}</p>;
}

let element = (
let renderer = createTestRenderer(
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<Admin />} />
<Route
path="admin"
element={<ShowHref to="../../../dashboard/" />}
/>
</Routes>
</MemoryRouter>
);
let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
Expand All @@ -363,4 +280,25 @@ describe("useHref under a basename", () => {
});
});
});

describe("after an update", () => {
it("does not change", () => {
let element = (
<MemoryRouter basename="/app" initialEntries={["/app/admin"]}>
<Routes>
<Route path="admin" element={<ShowHref to="/invoices" />} />
</Routes>
</MemoryRouter>
);

let renderer = createTestRenderer(element);
renderer.update(element);

expect(renderer.toJSON()).toMatchInlineSnapshot(`
<p>
/app/invoices
</p>
`);
});
});
});
Loading

0 comments on commit 71683a0

Please sign in to comment.