You are here

public function WebTestBaseTest::testClickLink in Drupal 8

Test WebTestBase::clickLink().

@dataProvider providerTestClickLink @covers ::clickLink

Parameters

mixed $expected: Expected return value of clickLink().

string $label: Parameter $label to clickLink().

int $index: Parameter $index to clickLink().

array $xpath_data: Test data to be returned by mocked xpath().

File

core/modules/simpletest/tests/src/Unit/WebTestBaseTest.php, line 134

Class

WebTestBaseTest
@requires extension curl @coversDefaultClass \Drupal\simpletest\WebTestBase @group simpletest @group WebTestBase

Namespace

Drupal\Tests\simpletest\Unit

Code

public function testClickLink($expected, $label, $index, $xpath_data) {

  // Mock a WebTestBase object and some of its methods.
  $web_test = $this
    ->getMockBuilder('Drupal\\simpletest\\WebTestBase')
    ->disableOriginalConstructor()
    ->setMethods([
    'pass',
    'fail',
    'getUrl',
    'xpath',
    'drupalGet',
    'getAbsoluteUrl',
  ])
    ->getMock();

  // Mocked getUrl() is only used for reporting so we just return a string.
  $web_test
    ->expects($this
    ->any())
    ->method('getUrl')
    ->will($this
    ->returnValue('url_before'));

  // Mocked xpath() should return our test data.
  $web_test
    ->expects($this
    ->any())
    ->method('xpath')
    ->will($this
    ->returnValue($xpath_data));
  if ($expected === FALSE) {

    // If link does not exist clickLink() will not try to do a drupalGet() or
    // a getAbsoluteUrl()
    $web_test
      ->expects($this
      ->never())
      ->method('drupalGet');
    $web_test
      ->expects($this
      ->never())
      ->method('getAbsoluteUrl');

    // The test should fail and not pass.
    $web_test
      ->expects($this
      ->never())
      ->method('pass');
    $web_test
      ->expects($this
      ->once())
      ->method('fail')
      ->will($this
      ->returnValue(NULL));
  }
  else {

    // Mocked getAbsoluteUrl() should return whatever comes in.
    $web_test
      ->expects($this
      ->once())
      ->method('getAbsoluteUrl')
      ->with($xpath_data[$index]['href'])
      ->will($this
      ->returnArgument(0));

    // We're only testing clickLink(), so drupalGet() always returns a string.
    $web_test
      ->expects($this
      ->once())
      ->method('drupalGet')
      ->with($xpath_data[$index]['href'])
      ->will($this
      ->returnValue('This Text Returned By drupalGet()'));

    // The test should pass and not fail.
    $web_test
      ->expects($this
      ->never())
      ->method('fail');
    $web_test
      ->expects($this
      ->once())
      ->method('pass')
      ->will($this
      ->returnValue(NULL));
  }

  // Set the clickLink() method to public so we can test it.
  $clicklink_method = new \ReflectionMethod($web_test, 'clickLink');
  $clicklink_method
    ->setAccessible(TRUE);
  $this
    ->assertSame($expected, $clicklink_method
    ->invoke($web_test, $label, $index));
}