Skip to content

Commit

Permalink
Merge pull request #46 from WildCodeSchool/feat/WILD_011_Check_Premature
Browse files Browse the repository at this point in the history
Feat/wild 011 check premature
  • Loading branch information
Ellana33 authored Aug 23, 2024
2 parents 50235ff + d080677 commit 1bd5029
Show file tree
Hide file tree
Showing 2 changed files with 794 additions and 302 deletions.
266 changes: 254 additions & 12 deletions front/src/__tests__/UrlHistory.test.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
import { describe, it, expect } from "vitest";
import { describe, it, expect, vi } from "vitest";
import UrlHistory from "../pages/UrlHistory";
import { render, screen } from "@testing-library/react";
import { MemoryRouter } from 'react-router-dom';
import { MemoryRouter } from "react-router-dom";
import { MockedProvider } from "@apollo/client/testing";
import { GET_ONE_URL } from "@/graphql/queries";
import { render, screen, fireEvent, waitFor } from "@testing-library/react";
import { CHECK_URL } from "@/graphql/mutation";
import { toast } from "@/components/ui/use-toast";

vi.mock("@/components/ui/use-toast", () => ({
toast: vi.fn(),
}));

const mockNavigate = vi.fn();
vi.mock("react-router-dom", async () => {
const actual = await vi.importActual("react-router-dom");
return {
...actual,
useNavigate: () => mockNavigate,
useParams: () => ({ id: "3312231f-020b-47b1-9fd5-f3747e8bc782" }),
};
});

describe("Tests UrlHistory", () => {
it("Should display histories list and should display loading", async () => {
const urlMock = {
delay: 30,
request: {
query: GET_ONE_URL,
variable: {
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
Expand Down Expand Up @@ -69,7 +85,7 @@ describe("Tests UrlHistory", () => {
delay: 30,
request: {
query: GET_ONE_URL,
variable: {
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
Expand All @@ -90,10 +106,9 @@ describe("Tests UrlHistory", () => {

it("Should display without histories", async () => {
const urlMock = {
delay: 30,
request: {
query: GET_ONE_URL,
variable: {
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
Expand All @@ -106,20 +121,247 @@ describe("Tests UrlHistory", () => {
histories: [],
},
},
loading: true,
},
};

render(
<MockedProvider mocks={[urlMock]} addTypename={false}>
<MemoryRouter>
<UrlHistory />
</MemoryRouter>
</MockedProvider>,
);
expect(await screen.findByText("En attente...")).toBeInTheDocument();
const historiesContainer = await screen.findByTestId(
"histories-container",

await waitFor(() => {
expect(screen.queryByText("En attente...")).not.toBeInTheDocument();
});

const historiesContainer = screen.queryByTestId("histories-container");
expect(historiesContainer).toBeInTheDocument();
});
it("Should render the 'Lancer une analyse' button", async () => {
const urlMock = {
request: {
query: GET_ONE_URL,
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
url: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
name: "Test URL",
path: "/test-path",
histories: [],
},
},
},
};

render(
<MockedProvider mocks={[urlMock]} addTypename={false}>
<UrlHistory />
</MockedProvider>,
);
expect(historiesContainer.children).toHaveLength(0);

await waitFor(() => {
expect(screen.getByText("Lancer une analyse")).toBeInTheDocument();
});
});

it("Should call checkUrl mutation when 'Lancer une analyse' button is clicked", async () => {
const urlMock = {
request: {
query: GET_ONE_URL,
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
url: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
name: "Test URL",
path: "/test-path",
histories: [],
},
},
},
};

const checkUrlMock = {
request: {
query: CHECK_URL,
variables: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
checkUrl: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
lastCheckDate: new Date().toISOString(),
},
},
},
};

const refetchMock = {
request: {
query: GET_ONE_URL,
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
url: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
name: "Test URL",
path: "/test-path",
histories: [
{
id: "new-history-id",
response: "New check",
status_code: 200,
created_at: new Date().toISOString(),
},
],
},
},
},
};

render(
<MockedProvider
mocks={[urlMock, checkUrlMock, refetchMock]}
addTypename={false}
>
<UrlHistory />
</MockedProvider>,
);

await waitFor(() => {
expect(screen.getByText("Lancer une analyse")).toBeInTheDocument();
});

fireEvent.click(screen.getByText("Lancer une analyse"));

await waitFor(() => {
expect(toast).toHaveBeenCalledWith({
title: "L'URL a été vérifiée avec succès",
});
});

await waitFor(() => {
expect(screen.getByText("New check")).toBeInTheDocument();
});
});

it("Should show error toast when checkUrl mutation fails", async () => {
const urlMock = {
request: {
query: GET_ONE_URL,
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
url: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
name: "Test URL",
path: "/test-path",
histories: [],
},
},
},
};

const checkUrlMock = {
request: {
query: CHECK_URL,
variables: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
error: new Error("An error occurred"),
};

render(
<MockedProvider mocks={[urlMock, checkUrlMock]} addTypename={false}>
<UrlHistory />
</MockedProvider>,
);

await waitFor(() => {
expect(screen.getByText("Lancer une analyse")).toBeInTheDocument();
});

fireEvent.click(screen.getByText("Lancer une analyse"));

await waitFor(() => {
expect(toast).toHaveBeenCalledWith({
title: "Error checking URL",
description: "An error occurred while checking the URL.",
variant: "destructive",
});
});
});

it("Should disable button while checking URL", async () => {
const urlMock = {
request: {
query: GET_ONE_URL,
variables: {
urlId: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
url: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
name: "Test URL",
path: "/test-path",
histories: [],
},
},
},
};

const checkUrlMock = {
request: {
query: CHECK_URL,
variables: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
},
},
result: {
data: {
checkUrl: {
id: "3312231f-020b-47b1-9fd5-f3747e8bc782",
lastCheckDate: new Date().toISOString(),
},
},
},
};

render(
<MockedProvider mocks={[urlMock, checkUrlMock]} addTypename={false}>
<UrlHistory />
</MockedProvider>,
);

await waitFor(() => {
expect(screen.getByText("Lancer une analyse")).toBeInTheDocument();
});

fireEvent.click(screen.getByText("Lancer une analyse"));

await waitFor(() => {
expect(screen.getByText("Analyse...")).toBeInTheDocument();
expect(screen.getByText("Analyse...")).toBeDisabled();
});
});
});
Loading

0 comments on commit 1bd5029

Please sign in to comment.