ability = new GuideAbility(new GuideRepository(dirname(__DIR__, 3) . '/Fixtures/guides')); } public function testWithoutTopicReturnsOverviewAndTopicList(): void { $result = $this->ability->execute([]); self::assertSame('overview', $result['topic']); self::assertSame(['divi-shortform', 'overview'], $result['topics']); self::assertStringContainsString('Testinhalt Übersicht', $result['content']); } public function testReturnsRequestedTopic(): void { $result = $this->ability->execute(['topic' => 'divi-shortform']); self::assertStringContainsString('Testinhalt Kurzform', $result['content']); } public function testUnknownTopicIsNotFoundErrorListingTopics(): void { $result = $this->ability->execute(['topic' => '../../wp-config']); self::assertInstanceOf(WP_Error::class, $result); self::assertToolError($result, 'not_found'); self::assertStringContainsString('divi-shortform', $result->get_error_message()); } public function testIsDirectReadOnlyTool(): void { self::assertSame('lit/guide', $this->ability->name()); self::assertTrue($this->ability->isDirect()); self::assertTrue($this->ability->annotations()['readonly']); } public function testAllTopicsInOneCallOverviewFirst(): void { $result = $this->ability->execute(['topic' => 'all']); self::assertSame('all', $result['topic']); self::assertSame(['divi-shortform', 'overview'], $result['topics']); $overview = strpos($result['content'], 'Thema `overview`'); $shortform = strpos($result['content'], 'Thema `divi-shortform`'); self::assertIsInt($overview); self::assertIsInt($shortform); self::assertLessThan($shortform, $overview); self::assertStringNotContainsString('Nicht enthalten', $result['content']); } public function testAllTopicsStopAtTheSizeLimitAndNameTheRest(): void { $big = str_repeat('x', GuideAbility::ALL_LIMIT); // Brain Monkey owns apply_filters(): answer the guide filter through its hooks API. Filters\expectApplied('lit_mcp_guides')->andReturn(['gross' => $big]); $ability = new GuideAbility(new GuideRepository(dirname(__DIR__, 3) . '/Fixtures/guides')); $content = $ability->execute(['topic' => 'all'])['content']; self::assertLessThanOrEqual(GuideAbility::ALL_LIMIT + 200, strlen($content)); self::assertStringContainsString('Nicht enthalten (Größenlimit): gross', $content); } }