/moriarty/tests/graph.test.php

https://github.com/kwijibo/sparql-proxy · PHP · 415 lines · 313 code · 101 blank · 1 comment · 0 complexity · c72823eefc2cf8bd3ef530f737800122 MD5 · raw file

  1. <?php
  2. require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'constants.inc.php';
  3. require_once MORIARTY_DIR . 'graph.class.php';
  4. require_once MORIARTY_TEST_DIR . 'fakecredentials.class.php';
  5. class GraphTest extends PHPUnit_Framework_TestCase {
  6. var $_empty_changeset = '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cs="http://purl.org/vocab/changeset/schema#">
  7. <rdf:Description rdf:nodeID="cs">
  8. <rdf:type rdf:resource="http://purl.org/vocab/changeset/schema#ChangeSet" />
  9. <cs:subjectOfChange rdf:nodeID="a" />
  10. <cs:creatorName>Ian</cs:creatorName>
  11. <cs:changeReason>PHP Client Test</cs:changeReason>
  12. </rdf:Description>
  13. </rdf:RDF>';
  14. var $_rdfxml_doc = '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
  15. <foaf:Person>
  16. <foaf:name>scooby</foaf:name>
  17. </foaf:Person>
  18. </rdf:RDF>';
  19. var $_turtle_doc = '@prefix foaf: <http://xmlns.com/foaf/0.1/> . [] a foaf:Person ; foaf:name "scooby" .';
  20. function make_graph($uri, $credentials = null) {
  21. // abstract
  22. }
  23. function test_apply_changeset_rdfxml_posts_to_metabox_uri() {
  24. $fake_request_factory = new FakeRequestFactory();
  25. $fake_request = new FakeHttpRequest( new HttpResponse() );
  26. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  27. $g = $this->make_graph("http://example.org/store/meta");
  28. $g->request_factory = $fake_request_factory;
  29. $response = $g->apply_changeset_rdfxml( $this->_empty_changeset );
  30. $this->assertTrue( $fake_request->was_executed() );
  31. }
  32. function test_apply_changeset_rdfxml_posts_supplied_rdfxml() {
  33. $fake_request_factory = new FakeRequestFactory();
  34. $fake_request = new FakeHttpRequest( new HttpResponse() );
  35. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  36. $g = $this->make_graph("http://example.org/store/meta");
  37. $g->request_factory = $fake_request_factory;
  38. $response = $g->apply_changeset_rdfxml( $this->_empty_changeset );
  39. $this->assertEquals( $this->_empty_changeset , $fake_request->get_body() );
  40. }
  41. function test_apply_changeset_rdfxml_sets_content_type() {
  42. $fake_request_factory = new FakeRequestFactory();
  43. $fake_request = new FakeHttpRequest( new HttpResponse() );
  44. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  45. $g = $this->make_graph("http://example.org/store/meta");
  46. $g->request_factory = $fake_request_factory;
  47. $response = $g->apply_changeset_rdfxml( $this->_empty_changeset );
  48. $this->assertTrue( in_array('Content-Type: application/vnd.talis.changeset+xml', $fake_request->get_headers() ) );
  49. }
  50. function test_apply_changeset_rdfxml_sets_accept() {
  51. $fake_request_factory = new FakeRequestFactory();
  52. $fake_request = new FakeHttpRequest( new HttpResponse() );
  53. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  54. $g = $this->make_graph("http://example.org/store/meta");
  55. $g->request_factory = $fake_request_factory;
  56. $response = $g->apply_changeset_rdfxml( $this->_empty_changeset );
  57. $this->assertTrue( in_array('Accept: */*', $fake_request->get_headers() ) );
  58. }
  59. function test_apply_versioned_changeset_rdfxml_posts_to_metabox_uri() {
  60. $fake_request_factory = new FakeRequestFactory();
  61. $fake_request = new FakeHttpRequest( new HttpResponse() );
  62. $fake_request_factory->register('POST', "http://example.org/store/meta/changesets", $fake_request );
  63. $g = $this->make_graph("http://example.org/store/meta");
  64. $g->request_factory = $fake_request_factory;
  65. $response = $g->apply_versioned_changeset_rdfxml( $this->_empty_changeset );
  66. $this->assertTrue( $fake_request->was_executed() );
  67. }
  68. function test_apply_versioned_changeset_rdfxml_posts_supplied_rdfxml() {
  69. $fake_request_factory = new FakeRequestFactory();
  70. $fake_request = new FakeHttpRequest( new HttpResponse() );
  71. $fake_request_factory->register('POST', "http://example.org/store/meta/changesets", $fake_request );
  72. $g = $this->make_graph("http://example.org/store/meta");
  73. $g->request_factory = $fake_request_factory;
  74. $response = $g->apply_versioned_changeset_rdfxml( $this->_empty_changeset );
  75. $this->assertEquals( $this->_empty_changeset , $fake_request->get_body() );
  76. }
  77. function test_apply_versioned_changeset_rdfxml_sets_content_type() {
  78. $fake_request_factory = new FakeRequestFactory();
  79. $fake_request = new FakeHttpRequest( new HttpResponse() );
  80. $fake_request_factory->register('POST', "http://example.org/store/meta/changesets", $fake_request );
  81. $g = $this->make_graph("http://example.org/store/meta");
  82. $g->request_factory = $fake_request_factory;
  83. $response = $g->apply_versioned_changeset_rdfxml( $this->_empty_changeset );
  84. $this->assertTrue( in_array('Content-Type: application/vnd.talis.changeset+xml', $fake_request->get_headers() ) );
  85. }
  86. function test_apply_versioned_changeset_rdfxml_sets_accept() {
  87. $fake_request_factory = new FakeRequestFactory();
  88. $fake_request = new FakeHttpRequest( new HttpResponse() );
  89. $fake_request_factory->register('POST', "http://example.org/store/meta/changesets", $fake_request );
  90. $g = $this->make_graph("http://example.org/store/meta");
  91. $g->request_factory = $fake_request_factory;
  92. $response = $g->apply_versioned_changeset_rdfxml( $this->_empty_changeset );
  93. $this->assertTrue( in_array('Accept: */*', $fake_request->get_headers() ) );
  94. }
  95. function test_submit_rdfxml_posts_to_metabox_uri() {
  96. $fake_request_factory = new FakeRequestFactory();
  97. $fake_request = new FakeHttpRequest( new HttpResponse() );
  98. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  99. $g = $this->make_graph("http://example.org/store/meta");
  100. $g->request_factory = $fake_request_factory;
  101. $response = $g->submit_rdfxml( $this->_rdfxml_doc );
  102. $this->assertTrue( $fake_request->was_executed() );
  103. }
  104. function test_submit_rdfxml_posts_supplied_rdfxml() {
  105. $fake_request_factory = new FakeRequestFactory();
  106. $fake_request = new FakeHttpRequest( new HttpResponse() );
  107. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  108. $g = $this->make_graph("http://example.org/store/meta");
  109. $g->request_factory = $fake_request_factory;
  110. $response = $g->submit_rdfxml( $this->_rdfxml_doc );
  111. $this->assertEquals( $this->_rdfxml_doc , $fake_request->get_body() );
  112. }
  113. function test_submit_rdfxml_sets_content_type() {
  114. $fake_request_factory = new FakeRequestFactory();
  115. $fake_request = new FakeHttpRequest( new HttpResponse() );
  116. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  117. $g = $this->make_graph("http://example.org/store/meta");
  118. $g->request_factory = $fake_request_factory;
  119. $response = $g->submit_rdfxml( $this->_rdfxml_doc );
  120. $this->assertTrue( in_array('Content-Type: application/rdf+xml', $fake_request->get_headers() ) );
  121. }
  122. function test_submit_rdfxml_sets_accept() {
  123. $fake_request_factory = new FakeRequestFactory();
  124. $fake_request = new FakeHttpRequest( new HttpResponse() );
  125. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  126. $g = $this->make_graph("http://example.org/store/meta");
  127. $g->request_factory = $fake_request_factory;
  128. $response = $g->submit_rdfxml( $this->_rdfxml_doc );
  129. $this->assertTrue( in_array('Accept: */*', $fake_request->get_headers() ) );
  130. }
  131. function test_apply_changeset_rdfxml_uses_credentials() {
  132. $fake_request_factory = new FakeRequestFactory();
  133. $fake_request = new FakeHttpRequest( new HttpResponse() );
  134. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  135. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  136. $g->request_factory = $fake_request_factory;
  137. $response = $g->apply_changeset_rdfxml( $this->_empty_changeset );
  138. $this->assertEquals( "user:pwd" , $fake_request->get_auth() );
  139. }
  140. function test_submit_rdfxml_uses_credentials() {
  141. $fake_request_factory = new FakeRequestFactory();
  142. $fake_request = new FakeHttpRequest( new HttpResponse() );
  143. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  144. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  145. $g->request_factory = $fake_request_factory;
  146. $response = $g->submit_rdfxml( $this->_rdfxml_doc );
  147. $this->assertEquals( "user:pwd" , $fake_request->get_auth() );
  148. }
  149. function test_describe_performs_get() {
  150. $fake_request_factory = new FakeRequestFactory();
  151. $fake_request = new FakeHttpRequest( new HttpResponse() );
  152. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  153. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  154. $g->request_factory = $fake_request_factory;
  155. $response = $g->describe( 'http://example.org/scooby' );
  156. $this->assertTrue( $fake_request->was_executed() );
  157. }
  158. function test_describe_sets_accept() {
  159. $fake_request_factory = new FakeRequestFactory();
  160. $fake_request = new FakeHttpRequest( new HttpResponse() );
  161. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  162. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  163. $g->request_factory = $fake_request_factory;
  164. $response = $g->describe( 'http://example.org/scooby' );
  165. $this->assertTrue( in_array('Accept: application/rdf+xml', $fake_request->get_headers() ) );
  166. }
  167. function test_describe_sets_content_type() {
  168. $fake_request_factory = new FakeRequestFactory();
  169. $fake_request = new FakeHttpRequest( new HttpResponse() );
  170. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  171. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  172. $g->request_factory = $fake_request_factory;
  173. $response = $g->describe( 'http://example.org/scooby' );
  174. $this->assertTrue( in_array('Content-Type: application/x-www-form-urlencoded', $fake_request->get_headers() ) );
  175. }
  176. function test_describe_uses_output_param() {
  177. $fake_request_factory = new FakeRequestFactory();
  178. $fake_request = new FakeHttpRequest( new HttpResponse() );
  179. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby') . "&output=turtle", $fake_request );
  180. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  181. $g->request_factory = $fake_request_factory;
  182. $response = $g->describe( 'http://example.org/scooby', 'turtle' );
  183. $this->assertTrue( $fake_request->was_executed() );
  184. }
  185. function test_has_description_performs_head() {
  186. $fake_request_factory = new FakeRequestFactory();
  187. $fake_request = new FakeHttpRequest( new HttpResponse() );
  188. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  189. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  190. $g->request_factory = $fake_request_factory;
  191. $response = $g->has_description( 'http://example.org/scooby' );
  192. $this->assertTrue( $fake_request->was_executed() );
  193. }
  194. function test_has_description_sets_accept() {
  195. $fake_request_factory = new FakeRequestFactory();
  196. $fake_request = new FakeHttpRequest( new HttpResponse() );
  197. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  198. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  199. $g->request_factory = $fake_request_factory;
  200. $response = $g->has_description( 'http://example.org/scooby' );
  201. $this->assertTrue( in_array('Accept: application/rdf+xml', $fake_request->get_headers() ) );
  202. }
  203. function test_has_description_sets_if_match() {
  204. $fake_request_factory = new FakeRequestFactory();
  205. $fake_request = new FakeHttpRequest( new HttpResponse() );
  206. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  207. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  208. $g->request_factory = $fake_request_factory;
  209. $response = $g->has_description( 'http://example.org/scooby' );
  210. $this->assertTrue( in_array('If-Match: *', $fake_request->get_headers() ) );
  211. }
  212. function test_has_description_returns_true_for_200_response() {
  213. $fake_request_factory = new FakeRequestFactory();
  214. $fake_request = new FakeHttpRequest( new HttpResponse(200) );
  215. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  216. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  217. $g->request_factory = $fake_request_factory;
  218. $response = $g->has_description( 'http://example.org/scooby' );
  219. $this->assertTrue( $response );
  220. }
  221. function test_has_description_returns_true_for_412_response() {
  222. $fake_request_factory = new FakeRequestFactory();
  223. $fake_request = new FakeHttpRequest( new HttpResponse(412) );
  224. $fake_request_factory->register('GET', "http://example.org/store/meta?about=" . urlencode('http://example.org/scooby'), $fake_request );
  225. $g = $this->make_graph("http://example.org/store/meta", new FakeCredentials());
  226. $g->request_factory = $fake_request_factory;
  227. $response = $g->has_description( 'http://example.org/scooby' );
  228. $this->assertFalse( $response );
  229. }
  230. function test_submit_turtle_posts_to_metabox_uri() {
  231. $fake_request_factory = new FakeRequestFactory();
  232. $fake_request = new FakeHttpRequest( new HttpResponse() );
  233. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  234. $g = $this->make_graph("http://example.org/store/meta");
  235. $g->request_factory = $fake_request_factory;
  236. $response = $g->submit_turtle( $this->_turtle_doc );
  237. $this->assertTrue( $fake_request->was_executed() );
  238. }
  239. function test_submit_turtle_posts_supplied_turtle() {
  240. $fake_request_factory = new FakeRequestFactory();
  241. $fake_request = new FakeHttpRequest( new HttpResponse() );
  242. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  243. $g = $this->make_graph("http://example.org/store/meta");
  244. $g->request_factory = $fake_request_factory;
  245. $response = $g->submit_turtle( $this->_turtle_doc );
  246. $this->assertEquals( $this->_turtle_doc , $fake_request->get_body() );
  247. }
  248. function test_submit_turtle_sets_content_type() {
  249. $fake_request_factory = new FakeRequestFactory();
  250. $fake_request = new FakeHttpRequest( new HttpResponse() );
  251. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  252. $g = $this->make_graph("http://example.org/store/meta");
  253. $g->request_factory = $fake_request_factory;
  254. $response = $g->submit_turtle( $this->_turtle_doc );
  255. $this->assertTrue( in_array('Content-Type: text/turtle', $fake_request->get_headers() ) );
  256. }
  257. function test_submit_turtle_sets_accept() {
  258. $fake_request_factory = new FakeRequestFactory();
  259. $fake_request = new FakeHttpRequest( new HttpResponse() );
  260. $fake_request_factory->register('POST', "http://example.org/store/meta", $fake_request );
  261. $g = $this->make_graph("http://example.org/store/meta");
  262. $g->request_factory = $fake_request_factory;
  263. $response = $g->submit_turtle( $this->_turtle_doc );
  264. $this->assertTrue( in_array('Accept: */*', $fake_request->get_headers() ) );
  265. }
  266. function test_submit_ntriples_from_file_in_batches(){
  267. $response = new HttpResponse('202');
  268. $graph = $this->getMock('Graph', array('submit_turtle'), array(),'',false );
  269. $graph->expects($this->exactly(10))
  270. ->method('submit_turtle')
  271. ->will($this->returnValue($response));
  272. $filename = dirname(__FILE__).'/documents/10-ntriples.nt';
  273. $result = $graph->submit_ntriples_in_batches_from_file($filename,1);
  274. $this->assertEquals(count($result), 10);
  275. }
  276. function test_submit_ntriples_from_file_in_batches_stop_on_failure(){
  277. $response = new HttpResponse('500');
  278. $graph = $this->getMock('Graph', array('submit_turtle'), array(),'',false );
  279. $graph->expects($this->exactly(1))
  280. ->method('submit_turtle')
  281. ->will($this->returnValue($response));
  282. $filename = dirname(__FILE__).'/documents/10-ntriples.nt';
  283. $result = $graph->submit_ntriples_in_batches_from_file($filename,1,true);
  284. $this->assertEquals(count($result), 1);
  285. }
  286. function test_mirror_from_uri(){
  287. $url = "http://example.org/web-page";
  288. $fake_request_factory = new FakeRequestFactory();
  289. $webpage_response = new HttpResponse('200') ;
  290. $webpage_response->body = file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'documents/after.ttl');
  291. $fake_webpage_request = new FakeHttpRequest($webpage_response);
  292. $fake_request_factory->register('GET',$url, $fake_webpage_request );
  293. $contentbox_copy = new HttpResponse('200');
  294. $contentbox_copy->body = file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'documents/before.ttl');
  295. $fake_copy_request = new FakeHttpRequest($contentbox_copy);
  296. $fake_request_factory->register('GET','http://api.talis.com/stores/example/meta?about='.urlencode($url).'&output=json' , $fake_copy_request);
  297. $postDataResponse = new HttpResponse('201');
  298. $fake_postData_request = new FakeHttpRequest($postDataResponse);
  299. $fake_request_factory->register('POST', 'http://api.talis.com/stores/example/meta' , $fake_postData_request );
  300. $graph = new Graph("http://api.talis.com/stores/example/meta", new FakeCredentials(), $fake_request_factory);
  301. $response = $graph->mirror_from_uri($url);
  302. $this->assertTrue($fake_webpage_request->was_executed(), "The webpage $url should be retrieved over HTTP");
  303. $this->assertTrue($fake_copy_request->was_executed(), "");
  304. $this->assertTrue($fake_postData_request->was_executed(), "The data from $url (and its metadata) should be added to the store by POSTing a document containing changesets to /meta");
  305. $expected_response = array(
  306. 'get_page' => $webpage_response,
  307. 'get_copy' => $contentbox_copy,
  308. 'update_data' => $postDataResponse,
  309. 'success' => true,
  310. );
  311. $this->assertEquals($expected_response, $response,"");
  312. }
  313. }
  314. ?>