2 namespace MediaWiki\Sparql
;
5 use MediaWiki\Http\HttpRequestFactory
;
9 * @covers \MediaWiki\Sparql\SparqlClient
11 class SparqlClientTest
extends \PHPUnit\Framework\TestCase
{
13 private function getRequestFactory( $request ) {
14 $requestFactory = $this->getMock( HttpRequestFactory
::class );
15 $requestFactory->method( 'create' )->willReturn( $request );
16 return $requestFactory;
19 private function getRequestMock( $content ) {
20 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
21 $request->method( 'execute' )->willReturn( \Status
::newGood( 200 ) );
22 $request->method( 'getContent' )->willReturn( $content );
26 public function testQuery() {
30 "vars" : [ "x", "y", "z" ]
36 "value" : "http://wikiba.se/ontology#Dump"
40 "value" : "http://creativecommons.org/ns#license"
44 "value" : "http://creativecommons.org/publicdomain/zero/1.0/"
49 "value" : "http://wikiba.se/ontology#Dump"
60 $request = $this->getRequestMock( $json );
61 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
64 $result = $client->query( "TEST SPARQL" );
65 $this->assertCount( 2, $result );
66 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x'] );
67 $this->assertEquals( 'http://creativecommons.org/ns#license', $result[0]['y'] );
68 $this->assertEquals( '0.1.0', $result[1]['z'] );
69 $this->assertNull( $result[1]['y'] );
71 $result = $client->query( "TEST SPARQL 2", true );
72 $this->assertCount( 2, $result );
73 $this->assertEquals( 'uri', $result[0]['x']['type'] );
74 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x']['value'] );
75 $this->assertEquals( 'literal', $result[1]['z']['type'] );
76 $this->assertEquals( '0.1.0', $result[1]['z']['value'] );
77 $this->assertNull( $result[1]['y'] );
81 * @expectedException \Mediawiki\Sparql\SparqlException
83 public function testBadQuery() {
84 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
85 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
87 $request->method( 'execute' )->willReturn( \Status
::newFatal( "Bad query" ) );
88 $result = $client->query( "TEST SPARQL 3" );
91 public function optionsProvider() {
94 'TEST ัะตัั SPARQL 4 ',
99 'query=TEST+%D1%82%D0%B5%D1%81%D1%82+SPARQL+4+',
101 'maxQueryTimeMillis=30000',
105 'userAgent' => Http
::userAgent() ." SparqlClient",
110 str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
115 'maxQueryTimeMillis=30000',
119 'postData' => 'query=' . str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
127 'maxQueryTimeMillis=1000',
136 'userAgent' => 'My Test',
137 'randomOption' => 'duck',
142 'userAgent' => 'My Test',
143 'randomOption' => 'duck',
151 * @dataProvider optionsProvider
152 * @param string $sparql
153 * @param array|null $options
154 * @param int|null $timeout
155 * @param array $expectedUrl
156 * @param array $expectedOptions
158 public function testOptions( $sparql, $options, $timeout, $expectedUrl, $expectedOptions ) {
159 $requestFactory = $this->getMock( HttpRequestFactory
::class );
160 $client = new SparqlClient( 'http://acme.test/', $requestFactory );
162 $request = $this->getRequestMock( '{}' );
164 $requestFactory->method( 'create' )->willReturnCallback(
165 function ( $url, $options ) use ( $request, $expectedUrl, $expectedOptions ) {
166 foreach ( $expectedUrl as $eurl ) {
167 $this->assertContains( $eurl, $url );
169 foreach ( $expectedOptions as $ekey => $evalue ) {
170 $this->assertArrayHasKey( $ekey, $options );
171 $this->assertEquals( $options[$ekey], $evalue );
177 if ( !is_null( $options ) ) {
178 $client->setClientOptions( $options );
180 if ( !is_null( $timeout ) ) {
181 $client->setTimeout( $timeout );
184 $result = $client->query( $sparql );