3 namespace MediaWiki\Sparql
;
6 use MediaWiki\Http\HttpRequestFactory
;
8 use PHPUnit4And6Compat
;
11 * @covers \MediaWiki\Sparql\SparqlClient
13 class SparqlClientTest
extends \PHPUnit\Framework\TestCase
{
15 use PHPUnit4And6Compat
;
17 private function getRequestFactory( $request ) {
18 $requestFactory = $this->getMock( HttpRequestFactory
::class );
19 $requestFactory->method( 'create' )->willReturn( $request );
20 return $requestFactory;
23 private function getRequestMock( $content ) {
24 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
25 $request->method( 'execute' )->willReturn( \Status
::newGood( 200 ) );
26 $request->method( 'getContent' )->willReturn( $content );
30 public function testQuery() {
34 "vars" : [ "x", "y", "z" ]
40 "value" : "http://wikiba.se/ontology#Dump"
44 "value" : "http://creativecommons.org/ns#license"
48 "value" : "http://creativecommons.org/publicdomain/zero/1.0/"
53 "value" : "http://wikiba.se/ontology#Dump"
64 $request = $this->getRequestMock( $json );
65 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
68 $result = $client->query( "TEST SPARQL" );
69 $this->assertCount( 2, $result );
70 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x'] );
71 $this->assertEquals( 'http://creativecommons.org/ns#license', $result[0]['y'] );
72 $this->assertEquals( '0.1.0', $result[1]['z'] );
73 $this->assertNull( $result[1]['y'] );
75 $result = $client->query( "TEST SPARQL 2", true );
76 $this->assertCount( 2, $result );
77 $this->assertEquals( 'uri', $result[0]['x']['type'] );
78 $this->assertEquals( 'http://wikiba.se/ontology#Dump', $result[0]['x']['value'] );
79 $this->assertEquals( 'literal', $result[1]['z']['type'] );
80 $this->assertEquals( '0.1.0', $result[1]['z']['value'] );
81 $this->assertNull( $result[1]['y'] );
85 * @expectedException \Mediawiki\Sparql\SparqlException
87 public function testBadQuery() {
88 $request = $this->getMockBuilder( MWHttpRequest
::class )->disableOriginalConstructor()->getMock();
89 $client = new SparqlClient( 'http://acme.test/', $this->getRequestFactory( $request ) );
91 $request->method( 'execute' )->willReturn( \Status
::newFatal( "Bad query" ) );
92 $result = $client->query( "TEST SPARQL 3" );
95 public function optionsProvider() {
98 'TEST ัะตัั SPARQL 4 ',
103 'query=TEST+%D1%82%D0%B5%D1%81%D1%82+SPARQL+4+',
105 'maxQueryTimeMillis=30000',
109 'userAgent' => Http
::userAgent() . " SparqlClient",
114 str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
119 'maxQueryTimeMillis=30000',
123 'postData' => 'query=' . str_repeat( 'ZZ', SparqlClient
::MAX_GET_SIZE
),
131 'maxQueryTimeMillis=1000',
140 'userAgent' => 'My Test',
141 'randomOption' => 'duck',
146 'userAgent' => 'My Test',
147 'randomOption' => 'duck',
155 * @dataProvider optionsProvider
156 * @param string $sparql
157 * @param array|null $options
158 * @param int|null $timeout
159 * @param array $expectedUrl
160 * @param array $expectedOptions
162 public function testOptions( $sparql, $options, $timeout, $expectedUrl, $expectedOptions ) {
163 $requestFactory = $this->getMock( HttpRequestFactory
::class );
164 $client = new SparqlClient( 'http://acme.test/', $requestFactory );
166 $request = $this->getRequestMock( '{}' );
168 $requestFactory->method( 'create' )->willReturnCallback(
169 function ( $url, $options ) use ( $request, $expectedUrl, $expectedOptions ) {
170 foreach ( $expectedUrl as $eurl ) {
171 $this->assertContains( $eurl, $url );
173 foreach ( $expectedOptions as $ekey => $evalue ) {
174 $this->assertArrayHasKey( $ekey, $options );
175 $this->assertEquals( $options[$ekey], $evalue );
181 if ( !is_null( $options ) ) {
182 $client->setClientOptions( $options );
184 if ( !is_null( $timeout ) ) {
185 $client->setTimeout( $timeout );
188 $result = $client->query( $sparql );