DocumentTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. require __DIR__ . "/../../vendor/autoload.php";
  3. use GuzzleHttp\Client;
  4. use GuzzleHttp\Handler\MockHandler;
  5. use GuzzleHttp\HandlerStack;
  6. use GuzzleHttp\Psr7\Response;
  7. use GuzzleHttp\Psr7\Request;
  8. use GuzzleHttp\Exception\RequestException;
  9. class DocumentTest extends \PHPUnit\Framework\TestCase
  10. {
  11. public function setUp() {
  12. // offer a use_response for when selecting this database
  13. $egdb1 = '{"db_name":"egdb","update_seq":"0-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUklMiTV____PyuRAY-iPBYgydAApP5D1GYBAJmvHGw","sizes":{"file":8488,"external":0,"active":0},"purge_seq":0,"other":{"data_size":0},"doc_del_count":0,"doc_count":0,"disk_size":8488,"disk_format_version":6,"data_size":0,"compact_running":false,"instance_start_time":"0"}';
  14. $this->use_response = new Response(200, [], $egdb1);
  15. $create = '{"ok":true,"id":"abcde12345","rev":"1-928ec193918889e122e7ad45cfd88e47"}';
  16. $this->create_response = new Response(201, [], $create);
  17. }
  18. public function testUpdate() {
  19. $update = '{"ok":true,"id":"abcde12345","rev":"2-74a0465bd6e3ea40a1a3752b93916762"}';
  20. $update_response = new Response(201, [], $update);
  21. $mock = new MockHandler([ $this->use_response, $this->create_response, $update_response ]);
  22. $handler = HandlerStack::create($mock);
  23. $client = new Client(['handler' => $handler]);
  24. // userland code starts
  25. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  26. $database = $server->useDB([\PHPCouchDB\Server::OPTION_NAME => "egdb"]);
  27. $doc = $database->create(["noise" => "howl", "id" => "abcde12345"]);
  28. $doc->noise = "purr";
  29. $newdoc = $doc->update();
  30. $this->assertInstanceOf('PHPCouchDB\Document', $newdoc);
  31. $this->assertObjectHasAttribute('id', $doc);
  32. $this->assertEquals("abcde12345", $doc->id);
  33. $this->assertEquals("purr", $doc->noise);
  34. }
  35. /**
  36. * @expectedException \PHPCouchDB\Exception\DocumentConflictException
  37. */
  38. public function testUpdateConflict() {
  39. $update = '{"error":"conflict","reason":"Document update conflict."}';;
  40. $update_response = new Response(409, [], $update);
  41. $mock = new MockHandler([ $this->use_response, $this->create_response, $update_response ]);
  42. $handler = HandlerStack::create($mock);
  43. $client = new Client(['handler' => $handler]);
  44. // userland code starts
  45. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  46. $database = $server->useDB([\PHPCouchDB\Server::OPTION_NAME => "egdb"]);
  47. $doc = $database->create(["noise" => "howl", "id" => "abcde12345"]);
  48. $doc->noise = "purr";
  49. $newdoc = $doc->update();
  50. }
  51. public function testDelete() {
  52. $delete = '{"ok":true,"id":"abcde12345","rev":"2-74a0465bd6e3ea40a1a3752b93916762"}';
  53. $delete_response = new Response(200, [], $delete);
  54. $delete2 = '{"error":"not_found","reason":"deleted"}';
  55. $delete_response2 = new Response(404, [], $delete2);
  56. $mock = new MockHandler([ $this->use_response, $this->create_response, $delete_response, $delete_response2 ]);
  57. $handler = HandlerStack::create($mock);
  58. $client = new Client(['handler' => $handler]);
  59. // userland code starts
  60. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  61. $database = $server->useDB([\PHPCouchDB\Server::OPTION_NAME => "egdb"]);
  62. $doc = $database->create(["noise" => "howl", "id" => "abcde12345"]);
  63. $result = $doc->delete();
  64. $this->assertEquals(true, $result);
  65. // should be able to delete an already-deleted doc without errors
  66. $result = $doc->delete();
  67. $this->assertEquals(true, $result);
  68. }
  69. /**
  70. * @expectedException \PHPCouchDB\Exception\DocumentConflictException
  71. */
  72. public function testDeleteConflict() {
  73. $delete = '{"error":"conflict","reason":"Document update conflict."}';
  74. $delete_response = new Response(409, [], $delete);
  75. $mock = new MockHandler([ $this->use_response, $this->create_response, $delete_response ]);
  76. $handler = HandlerStack::create($mock);
  77. $client = new Client(['handler' => $handler]);
  78. // userland code starts
  79. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  80. $database = $server->useDB([\PHPCouchDB\Server::OPTION_NAME => "egdb"]);
  81. $doc = $database->create(["noise" => "howl", "id" => "abcde12345"]);
  82. $result = $doc->delete();
  83. }
  84. }