. */ namespace App\Tests\State\Mcp; use ApiPlatform\Metadata\Get; use App\Mcp\DTO\InfoProviderPartDetailsInput; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\ProviderInfoDTO; use App\Services\InfoProviderSystem\DTOtoEntityConverter; use App\Services\InfoProviderSystem\PartInfoRetriever; use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Settings\SystemSettings\LocalizationSettings; use App\State\Mcp\GetInfoProviderPartDetailsProcessor; use App\Tests\SettingsTestHelper; use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\TestCase; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; final class GetInfoProviderPartDetailsProcessorTest extends TestCase { private PartInfoRetriever $infoRetriever; protected function setUp(): void { $activeProvider = $this->createMock(InfoProviderInterface::class); $activeProvider->method('getProviderInfo')->willReturn(new ProviderInfoDTO(key: 'test1', name: 'test1')); $activeProvider->method('isActive')->willReturn(true); $activeProvider->method('getDetails')->willReturn( new PartDetailDTO(provider_key: 'test1', provider_id: '42', name: 'Element 42', description: 'desc') ); $inactiveProvider = $this->createMock(InfoProviderInterface::class); $inactiveProvider->method('getProviderInfo')->willReturn(new ProviderInfoDTO(key: 'test2', name: 'test2')); $inactiveProvider->method('isActive')->willReturn(false); $providerRegistry = new ProviderRegistry([$activeProvider, $inactiveProvider]); $dtoToEntityConverter = new DTOtoEntityConverter( $this->createMock(EntityManagerInterface::class), SettingsTestHelper::createSettingsDummy(LocalizationSettings::class) ); $this->infoRetriever = new PartInfoRetriever( $providerRegistry, $dtoToEntityConverter, new ArrayAdapter(), debugMode: true ); } public function testGetDetails(): void { $processor = new GetInfoProviderPartDetailsProcessor($this->infoRetriever); $result = $processor->process(new InfoProviderPartDetailsInput(provider_key: 'test1', provider_id: '42'), new Get()); $this->assertInstanceOf(PartDetailDTO::class, $result); $this->assertSame('test1', $result->provider_key); $this->assertSame('42', $result->provider_id); } public function testGetDetailsWithUnknownProviderThrowsBadRequest(): void { $processor = new GetInfoProviderPartDetailsProcessor($this->infoRetriever); $this->expectException(BadRequestHttpException::class); $processor->process(new InfoProviderPartDetailsInput(provider_key: 'unknown', provider_id: '42'), new Get()); } public function testGetDetailsWithInactiveProviderThrowsBadRequest(): void { $processor = new GetInfoProviderPartDetailsProcessor($this->infoRetriever); $this->expectException(BadRequestHttpException::class); $processor->process(new InfoProviderPartDetailsInput(provider_key: 'test2', provider_id: '42'), new Get()); } }