file = (string) tempnam(sys_get_temp_dir(), 'lit-download'); file_put_contents($this->file, 'PDFDATA'); Functions\when('get_post')->justReturn(new WP_Post([ 'ID' => 40, 'post_type' => 'attachment', 'post_mime_type' => 'application/pdf', ])); Functions\when('current_user_can')->justReturn(true); Functions\when('get_attached_file')->justReturn($this->file); Functions\when('wp_get_attachment_url')->justReturn('https://kunde.de/wp-content/uploads/preise.pdf'); Functions\when('wp_basename')->alias('basename'); Functions\when('wp_check_filetype')->justReturn(['ext' => 'pdf', 'type' => 'application/pdf']); Functions\when('wp_upload_dir')->justReturn(['basedir' => sys_get_temp_dir()]); } protected function tearDown(): void { if (is_file($this->file)) { unlink($this->file); } parent::tearDown(); } public function testReturnsTheFileAsEmbeddedBlobResource(): void { Functions\when('get_option')->justReturn([]); $result = (new MediaDownloadAbility(new Limits()))->execute(['id' => 40]); self::assertSame('resource', $result['type']); self::assertSame('https://kunde.de/wp-content/uploads/preise.pdf', $result['resource']['uri']); self::assertSame('application/pdf', $result['resource']['mimeType']); self::assertSame(base64_encode('PDFDATA'), $result['resource']['blob']); } public function testFilesAboveTheLimitAreRefused(): void { Functions\when('get_option')->justReturn(['upload_mb' => 1]); file_put_contents($this->file, str_repeat('x', 1024 * 1024 + 1)); $result = (new MediaDownloadAbility(new Limits()))->execute(['id' => 40]); self::assertSame('lit_unsupported', $result->get_error_code()); } public function testDownloadsAreCappedAtTenMegabytesEvenWithAHigherUploadLimit(): void { Functions\when('get_option')->justReturn(['upload_mb' => 32]); file_put_contents($this->file, str_repeat('x', 10 * 1024 * 1024 + 1)); $result = (new MediaDownloadAbility(new Limits()))->execute(['id' => 40]); self::assertSame('lit_unsupported', $result->get_error_code()); self::assertStringContainsString('Limit 10 MB', $result->get_error_message()); self::assertStringContainsString('URL', (string) $result->get_error_data()['hint']); } public function testUnknownSizeIsNotFound(): void { Functions\when('get_option')->justReturn([]); Functions\when('image_get_intermediate_size')->justReturn(false); $result = (new MediaDownloadAbility(new Limits()))->execute(['id' => 40, 'size' => 'huge']); self::assertSame('lit_not_found', $result->get_error_code()); self::assertNull((new MediaDownloadAbility(new Limits()))->outputSchema()); } public function testFilesOutsideTheUploadsDirectoryAreRefused(): void { Functions\when('get_option')->justReturn([]); Functions\when('wp_upload_dir')->justReturn(['basedir' => sys_get_temp_dir() . '/lit-elsewhere']); $result = (new MediaDownloadAbility(new Limits()))->execute(['id' => 40]); self::assertSame('lit_not_found', $result->get_error_code()); } }