mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
ajout tests
This commit is contained in:
parent
81bedf0672
commit
1a7dc7fec2
2 changed files with 51 additions and 11 deletions
|
|
@ -22,10 +22,13 @@ beforeAll(() => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("ImageGallery", () => {
|
describe("ImageGallery", () => {
|
||||||
|
|
||||||
|
let mockHandleDelete: jest.Mock;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
(ApiService.getUserImages as jest.Mock).mockResolvedValue({ images: mockImages, total: 3 });
|
(ApiService.getUserImages as jest.Mock).mockResolvedValue({ images: mockImages, total: 3 });
|
||||||
(ApiService.deleteImage as jest.Mock).mockResolvedValue(true);
|
(ApiService.deleteImage as jest.Mock).mockResolvedValue(true);
|
||||||
(ApiService.uploadImage as jest.Mock).mockResolvedValue('mockImageUrl');
|
(ApiService.uploadImage as jest.Mock).mockResolvedValue('mockImageUrl');
|
||||||
|
mockHandleDelete = jest.fn();
|
||||||
|
|
||||||
render(<ImageGallery />);
|
render(<ImageGallery />);
|
||||||
});
|
});
|
||||||
|
|
@ -43,13 +46,46 @@ describe("ImageGallery", () => {
|
||||||
const handleCopyMock = jest.fn();
|
const handleCopyMock = jest.fn();
|
||||||
|
|
||||||
render(<ImageGallery handleCopy={handleCopyMock} />);
|
render(<ImageGallery handleCopy={handleCopyMock} />);
|
||||||
|
|
||||||
const copyButtons = await waitFor(() => screen.findAllByTestId(/gallery-tab-copy-/));
|
const copyButtons = await waitFor(() => screen.findAllByTestId(/gallery-tab-copy-/));
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
fireEvent.click(copyButtons[0]);
|
fireEvent.click(copyButtons[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(navigator.clipboard.writeText).toHaveBeenCalled();
|
expect(navigator.clipboard.writeText).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
it("should delete an image and update the gallery", async () => {
|
||||||
|
const fetchImagesMock = jest.fn().mockResolvedValue({ images: mockImages.filter((image) => image.id !== "1"), total: 2 });
|
||||||
|
|
||||||
|
(ApiService.getUserImages as jest.Mock).mockImplementation(fetchImagesMock);
|
||||||
|
|
||||||
|
render(<ImageGallery handleDelete={mockHandleDelete} />);
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
await screen.findByAltText("Image image1.jpg");
|
||||||
|
});
|
||||||
|
|
||||||
|
const deleteButtons = await waitFor(() => screen.findAllByTestId(/gallery-tab-delete-/));
|
||||||
|
fireEvent.click(deleteButtons[0]);
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(screen.getByText("Voulez-vous supprimer cette image?")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
const confirmDeleteButton = screen.getByText("Delete");
|
||||||
|
await act(async () => {
|
||||||
|
fireEvent.click(confirmDeleteButton);
|
||||||
|
});
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(ApiService.deleteImage).toHaveBeenCalledWith("1");
|
||||||
|
});
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(screen.queryByAltText("Image image1.jpg")).toBeNull();
|
||||||
|
expect(screen.getByText("Image supprimée avec succès !")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,10 @@ import { Upload } from "@mui/icons-material";
|
||||||
|
|
||||||
interface ImagesProps {
|
interface ImagesProps {
|
||||||
handleCopy?: (id: string) => void;
|
handleCopy?: (id: string) => void;
|
||||||
|
handleDelete?: (id: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ImageGallery: React.FC<ImagesProps> = ({ handleCopy }) => {
|
const ImageGallery: React.FC<ImagesProps> = ({ handleCopy, handleDelete }) => {
|
||||||
const [images, setImages] = useState<ImageType[]>([]);
|
const [images, setImages] = useState<ImageType[]>([]);
|
||||||
const [totalImg, setTotalImg] = useState(0);
|
const [totalImg, setTotalImg] = useState(0);
|
||||||
const [imgPage, setImgPage] = useState(1);
|
const [imgPage, setImgPage] = useState(1);
|
||||||
|
|
@ -55,14 +56,16 @@ const ImageGallery: React.FC<ImagesProps> = ({ handleCopy }) => {
|
||||||
fetchImages();
|
fetchImages();
|
||||||
}, [imgPage]);
|
}, [imgPage]);
|
||||||
|
|
||||||
const handleDelete = async () => {
|
const defaultHandleDelete = async (id: string) => {
|
||||||
if (imageToDelete) {
|
if (imageToDelete) {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
const isDeleted = await ApiService.deleteImage(imageToDelete.id);
|
const isDeleted = await ApiService.deleteImage(id);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
|
|
||||||
if (isDeleted) {
|
if (isDeleted) {
|
||||||
setImages(images.filter((image) => image.id !== imageToDelete.id));
|
//setImages(images.filter((image) => image.id !== id));
|
||||||
|
setImgPage(1);
|
||||||
|
fetchImages();
|
||||||
setSnackbarMessage("Image supprimée avec succès !");
|
setSnackbarMessage("Image supprimée avec succès !");
|
||||||
setSnackbarSeverity("success");
|
setSnackbarSeverity("success");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -84,6 +87,7 @@ const ImageGallery: React.FC<ImagesProps> = ({ handleCopy }) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCopyFunction = handleCopy || defaultHandleCopy;
|
const handleCopyFunction = handleCopy || defaultHandleCopy;
|
||||||
|
const handleDeleteFunction = handleDelete || defaultHandleDelete;
|
||||||
|
|
||||||
const handleImageUpload = (event: React.ChangeEvent<HTMLInputElement>) => {
|
const handleImageUpload = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
const file = event.target.files ? event.target.files[0] : null;
|
const file = event.target.files ? event.target.files[0] : null;
|
||||||
|
|
@ -264,7 +268,7 @@ const ImageGallery: React.FC<ImagesProps> = ({ handleCopy }) => {
|
||||||
<Button onClick={() => setOpenDeleteDialog(false)} color="primary">
|
<Button onClick={() => setOpenDeleteDialog(false)} color="primary">
|
||||||
Annuler
|
Annuler
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={handleDelete} color="error">
|
<Button onClick={() => imageToDelete && handleDeleteFunction(imageToDelete.id)} color="error">
|
||||||
Delete
|
Delete
|
||||||
</Button>
|
</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue