test_helpers-1.0.0-alpha6/tests/src/Unit/TestHelpersApi/GetMockedMethodTest.php
tests/src/Unit/TestHelpersApi/GetMockedMethodTest.php
<?php
declare(strict_types=1);
namespace Drupal\Tests\test_helpers\Unit\TestHelpersApi;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\test_helpers\TestHelpers;
use PHPUnit\Framework\MockObject\MethodNameAlreadyConfiguredException;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversMethod;
use PHPUnit\Framework\Attributes\Group;
/**
* Tests UnitTestHelpers functions.
*/
#[CoversClass(TestHelpers::class)]
#[Group('test_helpers')]
#[CoversMethod(TestHelpers::class, 'getMockedMethod')]
class GetMockedMethodTest extends UnitTestCase {
/**
* Tests the getMockedMethod() function.
*/
public function testGetMockedMethod() {
/** @var \Drupal\Core\Entity\EntityInterface|\PHPUnit\Framework\MockObject\MockObject $mock */
$mock = $this->createMock(EntityInterface::class);
$mock->method('label')->willReturn('foo');
$mock->method('id')->willReturn('42');
$this->assertEquals('foo', $mock->label());
// Ensuring that default overriding is not yet available.
try {
$mock->method('label')->willReturn('bar');
}
catch (MethodNameAlreadyConfiguredException $e) {
$this->assertInstanceOf(MethodNameAlreadyConfiguredException::class, $e);
}
$this->assertNotEquals('bar', $mock->label());
// Testing custom overriding of the method return value.
$labelMethod = TestHelpers::getMockedMethod($mock, 'label');
$labelMethod->willReturn('baz');
$mock->method('uuid')->willReturn('myUUID');
$this->assertEquals('baz', $mock->label());
$this->assertNotEquals('foo', $mock->label());
$this->assertEquals('42', $mock->id());
$this->assertEquals('myUUID', $mock->uuid());
// Testing the second overriding of the method return value.
$labelMethod->willReturn('qux');
$this->assertEquals('qux', $mock->label());
// Testing a next getter and overriding of the method return value.
$labelMethod2 = TestHelpers::getMockedMethod($mock, 'label');
$labelMethod2->willReturnArgument(1);
// Putting coding standards ignore flag to suppress the warning
// 'Too many arguments to function label().'.
// @codingStandardsIgnoreStart
$this->assertEquals('arg1', $mock->label('arg0', 'arg1'));
// @codingStandardsIgnoreEnd
// Testing a getter with callback function.
$idMethod = TestHelpers::getMockedMethod($mock, 'id');
$idMethod->willReturnCallback(function () {
return 777;
});
$this->assertSame(777, $mock->id());
}
}
