33, 'post_type' => 'attachment', 'post_status' => 'inherit']); Functions\when('get_post')->justReturn($attachment); Functions\when('current_user_can')->justReturn(true); $finder = Mockery::mock(MediaUsageFinder::class); $usages = [['post_id' => 5, 'title' => 'Team', 'post_type' => 'page', 'where' => 'featured', 'certainty' => 'sicher']]; $finder->expects('scan')->with(33)->andReturn(['usages' => $usages, 'complete' => false, 'truncated' => true]); $presenter = Mockery::mock(MediaPresenter::class); $presenter->expects('full')->with($attachment, $usages)->andReturn(['id' => 33, 'usages' => $usages]); self::assertSame( ['id' => 33, 'usages' => $usages, 'usages_complete' => false, 'usages_truncated' => true], (new MediaGetAbility($presenter, $finder))->execute(['id' => 33]) ); } public function testTrashedAttachmentsCanBeRead(): void { Functions\when('get_post')->justReturn(new WP_Post(['ID' => 33, 'post_type' => 'attachment', 'post_status' => 'trash'])); Functions\when('current_user_can')->justReturn(true); $ability = new MediaGetAbility(Mockery::mock(MediaPresenter::class), Mockery::mock(MediaUsageFinder::class)); self::assertTrue($ability->permission(['id' => 33])); } public function testNonAttachmentIsNotFound(): void { Functions\when('get_post')->justReturn(new WP_Post(['ID' => 5, 'post_type' => 'page'])); $ability = new MediaGetAbility(Mockery::mock(MediaPresenter::class), Mockery::mock(MediaUsageFinder::class)); self::assertSame('lit_not_found', $ability->permission(['id' => 5])->get_error_code()); } public function testIsIndirectAndReadonly(): void { $ability = new MediaGetAbility(Mockery::mock(MediaPresenter::class), Mockery::mock(MediaUsageFinder::class)); self::assertSame('lit/media-get', $ability->name()); self::assertFalse($ability->isDirect()); self::assertTrue($ability->annotations()['readonly']); self::assertContains('usages_complete', $ability->outputSchema()['required']); self::assertContains('usages_truncated', $ability->outputSchema()['required']); } }