clientMock = $this->createMock(ClientApiInterface::class); $this->modelFactoryMock = $this->createMock(ModelFactory::class); $this->api = new Api('fake-token', $this->clientMock, $this->modelFactoryMock); } #[Test] public function constructorCanCreateDefaultDependencies(): void { $api = new Api('some-token'); $reflection = new ReflectionClass($api); $clientProp = $reflection->getProperty('client'); $clientProp->setAccessible(true); $this->assertInstanceOf(ClientApiInterface::class, $clientProp->getValue($api)); $factoryProp = $reflection->getProperty('modelFactory'); $factoryProp->setAccessible(true); $this->assertInstanceOf(ModelFactory::class, $factoryProp->getValue($api)); } #[Test] public function getBotInfoCallsClientAndFactoryCorrectly(): void { $rawResponseData = ['user_id' => 123, 'first_name' => 'ApiTestBot']; $expectedBotInfo = new BotInfo( 123, 'ApiTestBot', null, null, true, 0, null, null, null, null, ); $this->clientMock ->expects($this->once()) ->method('request') ->with('GET', '/me') ->willReturn($rawResponseData); $this->modelFactoryMock ->expects($this->once()) ->method('createBotInfo') ->with($rawResponseData) ->willReturn($expectedBotInfo); $result = $this->api->getBotInfo(); $this->assertSame($expectedBotInfo, $result); } }