2 namespace MediaWiki\Sparql
;
5 use MediaWiki\Http\HttpRequestFactory
;
7 use PHPUnit4And6Compat
;
10 * @covers \MediaWiki\Sparql\SparqlClient
12 class SparqlClientTest
extends \PHPUnit\Framework\TestCase
{
14 use PHPUnit4And6Compat
;
16 private function getRequestFactory( $request ) {
17 $requestFactory = $this->getMock( HttpRequestFactory
::class );
18 $requestFactory->method( 'create' )->willReturn( $request );
19 return $requestFactory;
22 private function getRequestMock( $content ) {
23 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
24 $request->method( 'execute' )->willReturn( \Status
::newGood( 200 ) );
25 $request->method( 'getContent' )->willReturn( $content );
29 public function testQuery() {
33 "vars" : [ "x", "y", "z" ]
39 "value" : "http://wikiba.se/ontology#Dump"
43 "value" : "http://creativecommons.org/ns#license"
47 "value" : "http://creativecommons.org/publicdomain/zero/1.0/"
52 "value" : "http://wikiba.se/ontology#Dump"
63 $request = $this->getRequestMock( $json );
64 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
67 $result = $client->query( "TEST SPARQL" );
68 $this->assertCount( 2, $result );
69 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x'] );
70 $this->assertEquals( 'http://creativecommons.org/ns#license', $result[0]['y'] );
71 $this->assertEquals( '0.1.0', $result[1]['z'] );
72 $this->assertNull( $result[1]['y'] );
74 $result = $client->query( "TEST SPARQL 2", true );
75 $this->assertCount( 2, $result );
76 $this->assertEquals( 'uri', $result[0]['x']['type'] );
77 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x']['value'] );
78 $this->assertEquals( 'literal', $result[1]['z']['type'] );
79 $this->assertEquals( '0.1.0', $result[1]['z']['value'] );
80 $this->assertNull( $result[1]['y'] );
84 * @expectedException \Mediawiki\Sparql\SparqlException
86 public function testBadQuery() {
87 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
88 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
90 $request->method( 'execute' )->willReturn( \Status
::newFatal( "Bad query" ) );
91 $result = $client->query( "TEST SPARQL 3" );
94 public function optionsProvider() {
97 'TEST ัะตัั SPARQL 4 ',
102 'query=TEST+%D1%82%D0%B5%D1%81%D1%82+SPARQL+4+',
104 'maxQueryTimeMillis=30000',
108 'userAgent' => Http
::userAgent() . " SparqlClient",
113 str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
118 'maxQueryTimeMillis=30000',
122 'postData' => 'query=' . str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
130 'maxQueryTimeMillis=1000',
139 'userAgent' => 'My Test',
140 'randomOption' => 'duck',
145 'userAgent' => 'My Test',
146 'randomOption' => 'duck',
154 * @dataProvider optionsProvider
155 * @param string $sparql
156 * @param array|null $options
157 * @param int|null $timeout
158 * @param array $expectedUrl
159 * @param array $expectedOptions
161 public function testOptions( $sparql, $options, $timeout, $expectedUrl, $expectedOptions ) {
162 $requestFactory = $this->getMock( HttpRequestFactory
::class );
163 $client = new SparqlClient( 'http://acme.test/', $requestFactory );
165 $request = $this->getRequestMock( '{}' );
167 $requestFactory->method( 'create' )->willReturnCallback(
168 function ( $url, $options ) use ( $request, $expectedUrl, $expectedOptions ) {
169 foreach ( $expectedUrl as $eurl ) {
170 $this->assertContains( $eurl, $url );
172 foreach ( $expectedOptions as $ekey => $evalue ) {
173 $this->assertArrayHasKey( $ekey, $options );
174 $this->assertEquals( $options[$ekey], $evalue );
180 if ( !is_null( $options ) ) {
181 $client->setClientOptions( $options );
183 if ( !is_null( $timeout ) ) {
184 $client->setTimeout( $timeout );
187 $result = $client->query( $sparql );