Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5977619
SparqlClientTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
SparqlClientTest.php
View Options
<?php
namespace
MediaWiki\Tests\Sparql
;
use
MediaWiki\Http\HttpRequestFactory
;
use
MediaWiki\Sparql\SparqlClient
;
use
MWHttpRequest
;
/**
* @covers \MediaWiki\Sparql\SparqlClient
*/
class
SparqlClientTest
extends
\PHPUnit\Framework\TestCase
{
private
function
getRequestFactory
(
$request
)
{
$requestFactory
=
$this
->
createMock
(
HttpRequestFactory
::
class
);
$requestFactory
->
method
(
'create'
)->
willReturn
(
$request
);
return
$requestFactory
;
}
private
function
getRequestMock
(
$content
)
{
$request
=
$this
->
createMock
(
MWHttpRequest
::
class
);
$request
->
method
(
'execute'
)->
willReturn
(
\MediaWiki\Status\Status
::
newGood
(
200
)
);
$request
->
method
(
'getContent'
)->
willReturn
(
$content
);
return
$request
;
}
public
function
testQuery
()
{
$json
=
<<<JSON
{
"head" : {
"vars" : [ "x", "y", "z" ]
},
"results" : {
"bindings" : [ {
"x" : {
"type" : "uri",
"value" : "http://wikiba.se/ontology#Dump"
},
"y" : {
"type" : "uri",
"value" : "http://creativecommons.org/ns#license"
},
"z" : {
"type" : "uri",
"value" : "http://creativecommons.org/publicdomain/zero/1.0/"
}
}, {
"x" : {
"type" : "uri",
"value" : "http://wikiba.se/ontology#Dump"
},
"z" : {
"type" : "literal",
"value" : "0.1.0"
}
} ]
}
}
JSON;
$request
=
$this
->
getRequestMock
(
$json
);
$client
=
new
SparqlClient
(
'http://acme.test/'
,
$this
->
getRequestFactory
(
$request
)
);
// values only
$result
=
$client
->
query
(
"TEST SPARQL"
);
$this
->
assertCount
(
2
,
$result
);
$this
->
assertEquals
(
'http://wikiba.se/ontology#Dump'
,
$result
[
0
][
'x'
]
);
$this
->
assertEquals
(
'http://creativecommons.org/ns#license'
,
$result
[
0
][
'y'
]
);
$this
->
assertSame
(
'0.1.0'
,
$result
[
1
][
'z'
]
);
$this
->
assertNull
(
$result
[
1
][
'y'
]
);
// raw data format
$result
=
$client
->
query
(
"TEST SPARQL 2"
,
true
);
$this
->
assertCount
(
2
,
$result
);
$this
->
assertEquals
(
'uri'
,
$result
[
0
][
'x'
][
'type'
]
);
$this
->
assertEquals
(
'http://wikiba.se/ontology#Dump'
,
$result
[
0
][
'x'
][
'value'
]
);
$this
->
assertEquals
(
'literal'
,
$result
[
1
][
'z'
][
'type'
]
);
$this
->
assertSame
(
'0.1.0'
,
$result
[
1
][
'z'
][
'value'
]
);
$this
->
assertNull
(
$result
[
1
][
'y'
]
);
}
public
function
testBadQuery
()
{
$request
=
$this
->
createMock
(
MWHttpRequest
::
class
);
$client
=
new
SparqlClient
(
'http://acme.test/'
,
$this
->
getRequestFactory
(
$request
)
);
$request
->
method
(
'execute'
)->
willReturn
(
\MediaWiki\Status\Status
::
newFatal
(
"Bad query"
)
);
$this
->
expectException
(
\MediaWiki\Sparql\SparqlException
::
class
);
$result
=
$client
->
query
(
"TEST SPARQL 3"
);
}
public
static
function
optionsProvider
()
{
return
[
'defaults'
=>
[
'TEST тест SPARQL 4 '
,
null
,
null
,
[
'http://acme.test/'
,
'query=TEST+%D1%82%D0%B5%D1%81%D1%82+SPARQL+4+'
,
'format=json'
,
'maxQueryTimeMillis=30000'
,
],
[
'method'
=>
'GET'
,
'userAgent'
=>
'testOptions SparqlClient'
,
'timeout'
=>
30
]
],
'big query'
=>
[
str_repeat
(
'ZZ'
,
SparqlClient
::
MAX_GET_SIZE
),
null
,
null
,
[
'format=json'
,
'maxQueryTimeMillis=30000'
,
],
[
'method'
=>
'POST'
,
'postData'
=>
'query='
.
str_repeat
(
'ZZ'
,
SparqlClient
::
MAX_GET_SIZE
),
]
],
'timeout 1s'
=>
[
'TEST SPARQL 4'
,
null
,
1
,
[
'maxQueryTimeMillis=1000'
,
],
[
'timeout'
=>
1
]
],
'more options'
=>
[
'TEST SPARQL 5'
,
[
'userAgent'
=>
'My Test'
,
'randomOption'
=>
'duck'
,
],
null
,
[],
[
'userAgent'
=>
'My Test'
,
'randomOption'
=>
'duck'
,
]
],
];
}
/**
* @dataProvider optionsProvider
* @param string $sparql
* @param array|null $options
* @param int|null $timeout
* @param array $expectedUrl
* @param array $expectedOptions
*/
public
function
testOptions
(
$sparql
,
$options
,
$timeout
,
$expectedUrl
,
$expectedOptions
)
{
$requestFactory
=
$this
->
createMock
(
HttpRequestFactory
::
class
);
$requestFactory
->
method
(
'getUserAgent'
)->
willReturn
(
'testOptions'
);
$client
=
new
SparqlClient
(
'http://acme.test/'
,
$requestFactory
);
$request
=
$this
->
getRequestMock
(
'{}'
);
$requestFactory
->
method
(
'create'
)->
willReturnCallback
(
function
(
$url
,
$options
)
use
(
$request
,
$expectedUrl
,
$expectedOptions
)
{
foreach
(
$expectedUrl
as
$eurl
)
{
$this
->
assertStringContainsString
(
$eurl
,
$url
);
}
foreach
(
$expectedOptions
as
$ekey
=>
$evalue
)
{
$this
->
assertArrayHasKey
(
$ekey
,
$options
);
$this
->
assertEquals
(
$options
[
$ekey
],
$evalue
);
}
return
$request
;
}
);
if
(
$options
!==
null
)
{
$client
->
setClientOptions
(
$options
);
}
if
(
$timeout
!==
null
)
{
$client
->
setTimeout
(
$timeout
);
}
$result
=
$client
->
query
(
$sparql
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 20:00 (2 d, 22 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
ed/c7/c823873043bdca26cdf9657d28eb
Default Alt Text
SparqlClientTest.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment