2 namespace MediaWiki\Sparql
;
5 use MediaWiki\Http\HttpRequestFactory
;
7 use PHPUnit_Framework_TestCase
;
10 * @covers \MediaWiki\Sparql\SparqlClient
12 class SparqlClientTest
extends PHPUnit_Framework_TestCase
{
14 private function getRequestFactory( $request ) {
15 $requestFactory = $this->getMock( HttpRequestFactory
::class );
16 $requestFactory->method( 'create' )->willReturn( $request );
17 return $requestFactory;
20 private function getRequestMock( $content ) {
21 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
22 $request->method( 'execute' )->willReturn( \Status
::newGood( 200 ) );
23 $request->method( 'getContent' )->willReturn( $content );
27 public function testQuery() {
31 "vars" : [ "x", "y", "z" ]
37 "value" : "http://wikiba.se/ontology#Dump"
41 "value" : "http://creativecommons.org/ns#license"
45 "value" : "http://creativecommons.org/publicdomain/zero/1.0/"
50 "value" : "http://wikiba.se/ontology#Dump"
61 $request = $this->getRequestMock( $json );
62 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
65 $result = $client->query( "TEST SPARQL" );
66 $this->assertCount( 2, $result );
67 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x'] );
68 $this->assertEquals( 'http://creativecommons.org/ns#license', $result[0]['y'] );
69 $this->assertEquals( '0.1.0', $result[1]['z'] );
70 $this->assertNull( $result[1]['y'] );
72 $result = $client->query( "TEST SPARQL 2", true );
73 $this->assertCount( 2, $result );
74 $this->assertEquals( 'uri', $result[0]['x']['type'] );
75 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x']['value'] );
76 $this->assertEquals( 'literal', $result[1]['z']['type'] );
77 $this->assertEquals( '0.1.0', $result[1]['z']['value'] );
78 $this->assertNull( $result[1]['y'] );
82 * @expectedException \Mediawiki\Sparql\SparqlException
84 public function testBadQuery() {
85 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
86 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
88 $request->method( 'execute' )->willReturn( \Status
::newFatal( "Bad query" ) );
89 $result = $client->query( "TEST SPARQL 3" );
92 public function optionsProvider() {
95 'TEST ัะตัั SPARQL 4 ',
100 'query=TEST+%D1%82%D0%B5%D1%81%D1%82+SPARQL+4+',
102 'maxQueryTimeMillis=30000',
106 'userAgent' => Http
::userAgent() ." SparqlClient",
111 str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
116 'maxQueryTimeMillis=30000',
120 'postData' => 'query=' . str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
128 'maxQueryTimeMillis=1000',
137 'userAgent' => 'My Test',
138 'randomOption' => 'duck',
143 'userAgent' => 'My Test',
144 'randomOption' => 'duck',
152 * @dataProvider optionsProvider
153 * @param string $sparql
154 * @param array|null $options
155 * @param int|null $timeout
156 * @param array $expectedUrl
157 * @param array $expectedOptions
159 public function testOptions( $sparql, $options, $timeout, $expectedUrl, $expectedOptions ) {
160 $requestFactory = $this->getMock( HttpRequestFactory
::class );
161 $client = new SparqlClient( 'http://acme.test/', $requestFactory );
163 $request = $this->getRequestMock( '{}' );
165 $requestFactory->method( 'create' )->willReturnCallback(
166 function ( $url, $options ) use ( $request, $expectedUrl, $expectedOptions ) {
167 foreach ( $expectedUrl as $eurl ) {
168 $this->assertContains( $eurl, $url );
170 foreach ( $expectedOptions as $ekey => $evalue ) {
171 $this->assertArrayHasKey( $ekey, $options );
172 $this->assertEquals( $options[$ekey], $evalue );
178 if ( !is_null( $options ) ) {
179 $client->setClientOptions( $options );
181 if ( !is_null( $timeout ) ) {
182 $client->setTimeout( $timeout );
185 $result = $client->query( $sparql );