source = (string) tempnam(sys_get_temp_dir(), 'lit-src'); file_put_contents($this->source, 'original'); Functions\when('get_post')->justReturn(new WP_Post([ 'ID' => 33, 'post_type' => 'attachment', 'post_mime_type' => 'image/jpeg', ])); Functions\when('current_user_can')->justReturn(true); Functions\when('get_attached_file')->justReturn($this->source); Functions\when('wp_upload_dir')->justReturn(['basedir' => sys_get_temp_dir()]); Functions\when('wp_tempnam')->alias(static fn (): string => (string) tempnam(sys_get_temp_dir(), 'lit-prev')); Functions\when('wp_delete_file')->alias(static function (string $file): void { if (is_file($file)) { unlink($file); } }); } protected function tearDown(): void { if (is_file($this->source)) { unlink($this->source); } parent::tearDown(); } public function testReturnsADownscaledImageResult(): void { Functions\when('wp_attachment_is_image')->justReturn(true); $editor = Mockery::mock(); $editor->allows('get_size')->andReturn(['width' => 2000, 'height' => 1000]); $editor->expects('resize')->with(256, 256, false)->andReturn(true); $editor->expects('save')->andReturnUsing(static function (string $path, string $mime): array { file_put_contents($path, 'JPEGDATA'); return ['path' => $path, 'mime-type' => $mime]; }); Functions\when('wp_get_image_editor')->justReturn($editor); $result = (new MediaPreviewAbility())->execute(['id' => 33, 'max_size' => 256]); self::assertSame('image', $result['type']); self::assertSame('JPEGDATA', $result['results']); self::assertSame('image/jpeg', $result['mimeType']); } public function testNonImagesAreUnsupported(): void { Functions\when('wp_attachment_is_image')->justReturn(false); $result = (new MediaPreviewAbility())->execute(['id' => 33]); self::assertSame('lit_unsupported', $result->get_error_code()); } public function testFilesOutsideTheUploadsDirectoryAreRefused(): void { Functions\when('wp_attachment_is_image')->justReturn(true); Functions\when('wp_upload_dir')->justReturn(['basedir' => sys_get_temp_dir() . '/lit-elsewhere']); $result = (new MediaPreviewAbility())->execute(['id' => 33]); self::assertSame('lit_not_found', $result->get_error_code()); } public function testIsADirectToolWithoutOutputSchema(): void { $ability = new MediaPreviewAbility(); self::assertNull($ability->outputSchema()); self::assertTrue($ability->isDirect()); self::assertTrue($ability->annotations()['readonly']); } }