dcat-8.x-1.x-dev/dcat_import/tests/src/Unit/Plugin/DcatGraphTest.php
dcat_import/tests/src/Unit/Plugin/DcatGraphTest.php
<?php
namespace Drupal\Tests\dcat_import\Unit\Plugin;
use Drupal\Tests\UnitTestCase;
use Drupal\dcat_import\Plugin\DcatGraph;
use EasyRdf_Resource;
use EasyRdf_Http_Exception;
/**
* @coversDefaultClass \Drupal\dcat_import\Plugin\DcatGraph
* @group dcat_import
*/
class DcatGraphTest extends UnitTestCase {
/**
* Return a mocked DcatGraph where only the given method is not mocked.
*
* @param string $method
* The method to not mock.
*
* @return \PHPUnit_Framework_MockObject_MockObject
* The mocked DcatGraph class.
*/
private function mockedGraph($method) {
$methods = get_class_methods('Drupal\dcat_import\Plugin\DcatGraph');
unset($methods[array_search($method, $methods)]);
return $this->getMockBuilder('Drupal\dcat_import\Plugin\DcatGraph')
->disableOriginalConstructor()
->setMethods($methods)
->getMock();
}
/**
* Test getPagerArgument().
*/
public function testPagerArgument() {
$graph = $this->mockedGraph('getPagerArgument');
$argument = $this->randomMachineName();
$graph->pagerArgument = $argument;
$this->assertSame($argument, $graph->getPagerArgument());
}
/**
* Test compareResults().
*
* @dataProvider providerCompareResults
*/
public function testCompareResults($expected_result, $previous, $current) {
$graph = $this->mockedGraph('compareResults');
$this->assertSame($expected_result, $graph->compareResults($previous, $current));
}
/**
* Provides data and expected results for the test method.
*
* @return array
* Data and expected results.
*/
public function providerCompareResults() {
$rescource_a = new EasyRdf_Resource('http://example.com/A');
$rescource_b = new EasyRdf_Resource('http://example.com/B');
return [
[TRUE, [$rescource_a], [$rescource_a]],
[FALSE, [$rescource_a], [$rescource_b]],
[
FALSE, [
$rescource_a,
$rescource_a,
], [
$rescource_a,
$rescource_b,
],
],
];
}
/**
* Test getNoneBlankResources().
*
* @dataProvider providerGetNoneBlankResources
*/
public function testGetNoneBlankResources($expected_result, $resources) {
$graph = $this->mockedGraph('getNoneBlankResources');
$this->assertSame($expected_result, $graph->getNoneBlankResources($resources));
}
/**
* Provides data and expected results for the test method.
*
* @return array
* Data and expected results.
*/
public function providerGetNoneBlankResources() {
$graph = new DcatGraph();
$graph->add('http://example.com', 'dc:title', 'Title of Page');
$graph->add('http://example.com/empty', 'dc:title', 'Title of Page');
$resource_empty = $graph->newBNode();
$resource_notype = $graph->resource('http://example.com/empty');
$resource = $graph->resource('http://example.com');
$resource->setType('foaf:Person');
return [
[[], [$resource_empty, $resource_notype]],
[[$resource], [$resource]],
[[$resource], [$resource, $resource_empty, $resource_notype]],
];
}
/**
* Test pagedUrlBuilder().
*
* @dataProvider providerPagedUrlBuilder
*/
public function testPagedUrlBuilder($expected_result, $base, $argument, $count) {
$graph = $this->mockedGraph('pagedUrlBuilder');
$this->assertSame($expected_result, $graph->pagedUrlBuilder($base, $argument, $count));
}
/**
* Provides data and expected results for the test method.
*
* @return array
* Data and expected results.
*/
public function providerPagedUrlBuilder() {
return [
[NULL, NULL, 'page', 2],
['http://example.com', 'http://example.com', 'page', 1],
['http://example.com?page=2', 'http://example.com', 'page', 2],
['http://example.com?t=1&page=2', 'http://example.com?t=1', 'page', 2],
];
}
/**
* Test load() no data test.
*/
public function testLoadBlank() {
$graph = $this->mockedGraph('load');
$this->assertSame(0, $graph->load());
}
/**
* Test load() one page two results.
*/
public function testLoadSinglePage() {
$graph = $this->mockedGraph('load');
$graph->expects($this->exactly(3))
->method('getNoneBlankResources')
->will($this->returnValue(['', '']));
$graph->expects($this->once())
->method('compareResults')
->will($this->returnValue(TRUE));
$this->assertSame(2, $graph->load());
}
/**
* Test load() two pages, two results per page.
*/
public function testLoadTwoPages() {
$graph = $this->mockedGraph('load');
$graph->expects($this->exactly(4))
->method('getNoneBlankResources')
->will($this->onConsecutiveCalls(
['a', 'a'],
['a', 'a', 'b', 'b'],
['a', 'a', 'b', 'b'],
['a', 'a', 'b', 'b']
));
$graph->expects($this->exactly(2))
->method('compareResults')
->will($this->onConsecutiveCalls(
FALSE,
TRUE
));
$this->assertSame(4, $graph->load());
}
/**
* Test load() two pages, two results per page + 404 on page 3.
*/
public function testLoadTwoPages404() {
$graph = $this->mockedGraph('load');
$graph->expects($this->exactly(3))
->method('getNoneBlankResources')
->will($this->onConsecutiveCalls(
['a', 'a'],
['a', 'a', 'b', 'b'],
['a', 'a', 'b', 'b']
));
$graph->expects($this->once())
->method('compareResults')
->will($this->returnValue(FALSE));
$graph->expects($this->exactly(3))
->method('loadSingle')
->will($this->returnCallback(function () {
static $count = 0;
$count++;
if ($count == 3) {
throw new EasyRdf_Http_Exception('404 Test', 404);
}
}));
$this->assertSame(4, $graph->load());
}
/**
* Test load() exceptions other than EasyRdf_Http_Exception are still thrown.
*
* @expectedException \Exception
*/
public function testLoadException() {
$graph = $this->mockedGraph('load');
$graph->expects($this->once())
->method('loadSingle')
->will($this->returnCallback(function() {
throw new \Exception('Exception');
}));
$graph->load();
}
/**
* Test load() EasyRdf_Http_Exception 404 should throw when there is no data.
*
* @expectedException EasyRdf_Http_Exception
*/
public function testLoadException404() {
$graph = $this->mockedGraph('load');
$graph->expects($this->once())
->method('loadSingle')
->will($this->returnCallback(function() {
throw new EasyRdf_Http_Exception('404 Test', 404);
}));
$graph->load();
}
/**
* Test load() only EasyRdf_Http_Exception 404 should be catched.
*
* @expectedException EasyRdf_Http_Exception
*/
public function testLoadException500() {
$graph = $this->mockedGraph('load');
$graph->expects($this->once())
->method('loadSingle')
->will($this->returnCallback(function() {
throw new EasyRdf_Http_Exception('500 Test', 500);
}));
$graph->load();
}
}
