* @link https://www.oxidmodule.com */ declare(strict_types=1); namespace D3\LinkmobilityClient\Tests\SMS; use D3\LinkmobilityClient\Client; use D3\LinkmobilityClient\SMS\BinaryRequest; use D3\LinkmobilityClient\SMS\RequestFactory; use D3\LinkmobilityClient\SMS\TextRequest; use D3\LinkmobilityClient\Tests\ApiTestCase; use Phlib\SmsLength\SmsLength; use PHPUnit\Framework\MockObject\MockObject; use ReflectionException; class RequestFactoryTest extends ApiTestCase { /** * @test * @return void * @throws ReflectionException * @covers \D3\LinkmobilityClient\SMS\RequestFactory::__construct */ public function testConstruct() { $message = 'fixtureMessage'; /** @var Client|MockObject $clientMock */ $clientMock = $this->getMockBuilder(Client::class) ->disableOriginalConstructor() ->getMock(); $requestFactory = new RequestFactory($message, $clientMock); $this->assertSame( $message, $this->getValue($requestFactory, 'message') ); $this->assertSame( $clientMock, $this->getValue($requestFactory, 'client') ); } /** * @test * @param $encoding * @param $expectedClass * @return void * @throws ReflectionException * @dataProvider getTextSmsRequestDataProvider * @covers \D3\LinkmobilityClient\SMS\RequestFactory::getSmsRequest */ public function testGetTextSmsRequest($encoding, $expectedClass) { $message = 'fixtureMessage'; /** @var Client|MockObject $clientMock */ $clientMock = $this->getMockBuilder(Client::class) ->disableOriginalConstructor() ->getMock(); /** @var SmsLength|MockObject $smsLengthMock */ $smsLengthMock = $this->getMockBuilder(SmsLength::class) ->onlyMethods(['getEncoding']) ->disableOriginalConstructor() ->getMock(); $smsLengthMock->method('getEncoding')->willReturn($encoding); /** @var RequestFactory|MockObject $requestFactoryMock */ $requestFactoryMock = $this->getMockBuilder(RequestFactory::class) ->setConstructorArgs([$message, $clientMock]) ->onlyMethods(['getSmsLength']) ->getMock(); $requestFactoryMock->method('getSmsLength')->willReturn($smsLengthMock); $this->assertInstanceOf( $expectedClass, $this->callMethod( $requestFactoryMock, 'getSmsRequest' ) ); } /** * @return array[] */ public function getTextSmsRequestDataProvider(): array { return [ 'binary' => [SmsLength::ENCODING_UCS2, BinaryRequest::class], 'ascii' => [SmsLength::ENCODING_7BIT, TextRequest::class], ]; } /** * @test * @return void * @throws ReflectionException * @covers \D3\LinkmobilityClient\SMS\RequestFactory::getSmsLength */ public function testGetSmsLengthInstance() { $message = 'fixtureMessage'; /** @var Client|MockObject $clientMock */ $clientMock = $this->getMockBuilder(Client::class) ->disableOriginalConstructor() ->getMock(); /** @var RequestFactory|MockObject $requestFactoryMock */ $requestFactoryMock = $this->getMockBuilder(RequestFactory::class) ->setConstructorArgs([$message, $clientMock]) ->getMock(); $this->assertInstanceOf( SmsLength::class, $this->callMethod( $requestFactoryMock, 'getSmsLength' ) ); } }