Skip to content

Commit

Permalink
WILD_011 - Feat : Ajout de tests sur le bouton de recheck
Browse files Browse the repository at this point in the history
  • Loading branch information
Ellana33 committed Aug 23, 2024
1 parent 50235ff commit c7210a4
Show file tree
Hide file tree
Showing 2 changed files with 783 additions and 292 deletions.
245 changes: 243 additions & 2 deletions front/src/__tests__/UrlHistory.test.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
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 { 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 () => {
Expand Down Expand Up @@ -122,4 +138,229 @@ describe("Tests UrlHistory", () => {
);
expect(historiesContainer.children).toHaveLength(0);
});
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>,
);

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 c7210a4

Please sign in to comment.