mimeType); } /** @return iterable */ public static function validMimeTypes(): iterable { yield 'pdf' => ['application/pdf']; yield 'jpeg' => ['image/jpeg']; yield 'png' => ['image/png']; yield 'docx' => ['application/vnd.openxmlformats-officedocument.wordprocessingml.document']; } #[Test] public function rejectsInvalidMimeType(): void { $this->expectException(PieceJointeInvalideException::class); new SubmissionAttachment( id: SubmissionAttachmentId::generate(), filename: 'test.exe', filePath: 'submissions/tenant/hw/sub/test.exe', fileSize: 1024, mimeType: 'application/x-msdownload', uploadedAt: new DateTimeImmutable(), ); } #[Test] public function rejectsFileTooLarge(): void { $this->expectException(PieceJointeInvalideException::class); new SubmissionAttachment( id: SubmissionAttachmentId::generate(), filename: 'large.pdf', filePath: 'submissions/tenant/hw/sub/large.pdf', fileSize: 11 * 1024 * 1024, // 11 Mo mimeType: 'application/pdf', uploadedAt: new DateTimeImmutable(), ); } #[Test] public function acceptsFileAtMaxSize(): void { $attachment = new SubmissionAttachment( id: SubmissionAttachmentId::generate(), filename: 'max.pdf', filePath: 'submissions/tenant/hw/sub/max.pdf', fileSize: 10 * 1024 * 1024, // exactly 10 Mo mimeType: 'application/pdf', uploadedAt: new DateTimeImmutable(), ); self::assertSame(10 * 1024 * 1024, $attachment->fileSize); } }