mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-09-30 05:43:12 +00:00
50 lines
2 KiB
TypeScript
50 lines
2 KiB
TypeScript
import { createRef } from "react";
|
|
import { fireEvent, screen } from "@testing-library/react";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { toast } from "react-toastify";
|
|
import { MediaUploader } from "@/app/(protected)/workorders/_components/media/media-uploader";
|
|
import { MediaUploaderDropzone } from "@/app/(protected)/workorders/_components/media/media-uploader-dropzone";
|
|
import {
|
|
MAX_WORK_ORDER_MEDIA_BYTES,
|
|
workOrderMediaAcceptAttribute,
|
|
} from "@/domain/work-orders/utils/work-order-media-limits";
|
|
import { renderWithProviders } from "@/test/test-utils";
|
|
|
|
vi.mock("react-toastify", () => ({ toast: { error: vi.fn() } }));
|
|
|
|
describe("MediaUploaderDropzone", () => {
|
|
it("matches the AAP Photos accept copy and keeps it media-only", () => {
|
|
renderWithProviders(
|
|
<MediaUploaderDropzone
|
|
inputRef={createRef<HTMLInputElement>()}
|
|
pending={false}
|
|
onFilesSelected={vi.fn()}
|
|
/>,
|
|
);
|
|
|
|
expect(
|
|
screen.getByText("Accepted: JPG, PNG, MP4, MOV · Max 200MB per file"),
|
|
).toBeInTheDocument();
|
|
expect(screen.queryByText(/categorize after upload/i)).not.toBeInTheDocument();
|
|
expect(screen.queryByText(/PDF/)).not.toBeInTheDocument();
|
|
expect(screen.queryByText(/DOC/)).not.toBeInTheDocument();
|
|
const input = document.querySelector('input[type="file"]');
|
|
expect(input?.getAttribute("accept")).toBe(workOrderMediaAcceptAttribute());
|
|
expect(input?.getAttribute("accept")).not.toContain(".pdf");
|
|
});
|
|
|
|
it("rejects an oversized media file with the generic 200 MB toast", () => {
|
|
renderWithProviders(<MediaUploader uploads={[]} />);
|
|
|
|
const oversizedFile = {
|
|
name: "mobile-clip.MP4",
|
|
type: "application/octet-stream",
|
|
size: MAX_WORK_ORDER_MEDIA_BYTES + 1,
|
|
} as File;
|
|
const input = document.querySelector('input[type="file"]');
|
|
|
|
fireEvent.change(input as HTMLInputElement, { target: { files: [oversizedFile] } });
|
|
|
|
expect(toast.error).toHaveBeenCalledWith('"mobile-clip.MP4" exceeds the 200 MB limit.');
|
|
});
|
|
});
|