Skip to content

Commit

Permalink
chore: Replace jest mock with vitest mock (#4003)
Browse files Browse the repository at this point in the history
  • Loading branch information
DafyddLlyr authored Nov 22, 2024
1 parent d325ed7 commit a55127f
Showing 1 changed file with 34 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import React from "react";
import { act } from "react-dom/test-utils";
import { ErrorBoundary } from "react-error-boundary";
import swr from "swr";
import useSWR from "swr";
import { setup } from "testUtils";
import { vi } from "vitest";
import { axe } from "vitest-axe";
Expand All @@ -21,15 +22,13 @@ const { setState } = useStore;

beforeEach(() => vi.clearAllMocks());

const swrMock = (swr as jest.Mock).mock;

vi.mock("swr", () => ({
default: vi.fn((url: () => string) => {
const isGISRequest = url()?.startsWith(
`${import.meta.env.VITE_APP_API_URL}/gis`
`${import.meta.env.VITE_APP_API_URL}/gis`,
);
const isRoadsRequest = url()?.startsWith(
`${import.meta.env.VITE_APP_API_URL}/roads`
`${import.meta.env.VITE_APP_API_URL}/roads`,
);

if (isGISRequest) return { data: digitalLandResponseMock };
Expand All @@ -50,7 +49,7 @@ describe("error state", () => {
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={vi.fn()}
/>
</ErrorBoundary>
</ErrorBoundary>,
);

expect(getByTestId("error-summary-invalid-graph")).toBeInTheDocument();
Expand All @@ -66,7 +65,7 @@ describe("error state", () => {
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
/>
</ErrorBoundary>
</ErrorBoundary>,
);
const results = await axe(container);
expect(results).toHaveNoViolations();
Expand All @@ -82,7 +81,7 @@ describe("following a FindProperty component", () => {
teamIntegrations: {
hasPlanningData: true,
},
})
}),
);
});

Expand All @@ -96,11 +95,11 @@ describe("following a FindProperty component", () => {
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={handleSubmit}
/>
/>,
);

expect(
getByRole("heading", { name: "Planning constraints" })
getByRole("heading", { name: "Planning constraints" }),
).toBeInTheDocument();

await user.click(getByTestId("continue-button"));
Expand All @@ -115,7 +114,7 @@ describe("following a FindProperty component", () => {
description="Things that might affect your project"
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
/>
/>,
);
const results = await axe(container);
expect(results).toHaveNoViolations();
Expand All @@ -129,14 +128,14 @@ describe("following a FindProperty component", () => {
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={vi.fn()}
/>
/>,
);

expect(swr).toHaveBeenCalled();

// Planning data is called first
const swrURL = swrMock.calls[0][0]();
const swrResponse = swrMock.results[0].value;
const swrURL = (vi.mocked(useSWR).mock.calls[0][0] as () => {})();
const swrResponse = vi.mocked(useSWR).mock.results[0].value;

expect(swrURL).toContain("/gis");
expect(swrResponse).toEqual({ data: digitalLandResponseMock });
Expand All @@ -150,14 +149,14 @@ describe("following a FindProperty component", () => {
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={vi.fn()}
/>
/>,
);

expect(swr).toHaveBeenCalled();

// Classified roads are called second
const swrURL = swrMock.calls[1][0]();
const swrResponse = swrMock.results[1].value;
const swrURL = (vi.mocked(useSWR).mock.calls[1][0] as () => {})();
const swrResponse = vi.mocked(useSWR).mock.results[1].value;

expect(swrURL).toContain("/roads");
expect(swrResponse).toEqual({ data: classifiedRoadsResponseMock });
Expand All @@ -171,7 +170,7 @@ describe("following a FindProperty component", () => {
teamIntegrations: {
hasPlanningData: true,
},
})
}),
);

setup(
Expand All @@ -181,23 +180,25 @@ describe("following a FindProperty component", () => {
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={vi.fn()}
/>
/>,
);

expect(swr).toHaveBeenCalled();

// Planning constraints API still called
const planingConstraintsURL = swrMock.calls[0][0]();
const planingConstraintsResponse = swrMock.results[0].value;
const planingConstraintsURL = (
vi.mocked(useSWR).mock.calls[0][0] as () => {}
)();
const planingConstraintsResponse = vi.mocked(useSWR).mock.results[0].value;

expect(planingConstraintsURL).toContain("/gis");
expect(planingConstraintsResponse).toEqual({
data: digitalLandResponseMock,
});

// Classified roads API not called due to missing USRN
const swrURL = swrMock.calls[1][0]();
const swrResponse = swrMock.results[1].value;
const swrURL = (vi.mocked(useSWR).mock.calls[1][0] as () => {})();
const swrResponse = vi.mocked(useSWR).mock.results[1].value;

expect(swrURL).toBeNull();
expect(swrResponse).toEqual({ data: null });
Expand All @@ -211,12 +212,12 @@ describe("following a FindProperty component", () => {
fn="property.constraints.planning"
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={vi.fn()}
/>
/>,
);

// Positive constraints visible by default
expect(
getByRole("heading", { name: /These are the planning constraints/ })
getByRole("heading", { name: /These are the planning constraints/ }),
).toBeVisible();
expect(getByRole("button", { name: /Parks and gardens/ })).toBeVisible();

Expand All @@ -227,7 +228,7 @@ describe("following a FindProperty component", () => {
expect(showNegativeConstraintsButton).toBeVisible();

const negativeConstraintsContainer = getByTestId(
"negative-constraints-list"
"negative-constraints-list",
);
expect(negativeConstraintsContainer).not.toBeVisible();

Expand All @@ -248,12 +249,12 @@ describe("following a FindProperty component", () => {
description="Things that might affect your project"
fn="property.constraints.planning"
handleSubmit={vi.fn()}
/>
/>,
);
expect(
queryByText(
"This page does not include information about historic planning conditions that may apply to this property."
)
"This page does not include information about historic planning conditions that may apply to this property.",
),
).toBeVisible();
});
});
Expand All @@ -268,7 +269,7 @@ describe("demo state", () => {
hasPlanningData: false,
},
teamSlug: "demo",
})
}),
);
});
it("should render an error when teamSlug is demo", async () => {
Expand All @@ -282,21 +283,21 @@ describe("demo state", () => {
disclaimer="This page does not include information about historic planning conditions that may apply to this property."
handleSubmit={handleSubmit}
/>
</ErrorBoundary>
</ErrorBoundary>,
);

const errorMessage = queryByText(
"Planning Constraints are not enabled for demo users"
"Planning Constraints are not enabled for demo users",
);
expect(errorMessage).toBeVisible();

// Check planning constraints has not rendered
// reused positive constraints from basic layout test
expect(
queryByRole("heading", { name: /These are the planning constraints/ })
queryByRole("heading", { name: /These are the planning constraints/ }),
).not.toBeInTheDocument();
expect(
queryByRole("button", { name: /Parks and gardens/ })
queryByRole("button", { name: /Parks and gardens/ }),
).not.toBeInTheDocument();

// Ensure a demo user can continue on in the application
Expand Down

0 comments on commit a55127f

Please sign in to comment.