ServerTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 ServerTest extends \PHPUnit\Framework\TestCase
  10. {
  11. public function setUp() {
  12. // create the first request to check we can connect, can be added to
  13. // the mocks for any test that wants it
  14. $couchdb1 = '{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}';
  15. $this->db_response = new Response(200, [], $couchdb1);
  16. }
  17. public function testCreateWithClient() {
  18. $mock = new MockHandler([ ]);
  19. $handler = HandlerStack::create($mock);
  20. $client = new Client(['handler' => $handler]);
  21. // userland code starts
  22. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  23. $this->assertObjectHasAttribute(\PHPCouchDB\Server::OPTION_CLIENT, $server);
  24. $this->assertAttributeInstanceOf('\GuzzleHttp\ClientInterface', \PHPCouchDB\Server::OPTION_CLIENT, $server);
  25. }
  26. public function testCreateWithUrl() {
  27. $mock = new MockHandler([ ]);
  28. $handler = HandlerStack::create($mock);
  29. // userland code starts
  30. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_URL => "http://localhost:5984"]);
  31. $this->assertObjectHasAttribute(\PHPCouchDB\Server::OPTION_CLIENT, $server);
  32. $this->assertAttributeInstanceOf('\GuzzleHttp\ClientInterface', \PHPCouchDB\Server::OPTION_CLIENT, $server);
  33. $config = $server->getClient()->getConfig();
  34. $this->assertArrayHasKey('User-Agent', $config['headers']);
  35. $this->assertStringStartsWith('PHPCouchDB', $config['headers']['User-Agent']);
  36. }
  37. public function testGetVersion() {
  38. $mock = new MockHandler([ $this->db_response ]);
  39. $handler = HandlerStack::create($mock);
  40. $client = new Client(['handler' => $handler]);
  41. // userland code starts
  42. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  43. $this->assertEquals("2.0.0", $server->getVersion());
  44. }
  45. public function testGetAllDbs() {
  46. $dbs = ["test", "items"];
  47. $response1 = new Response(200, [], json_encode($dbs));
  48. $mock = new MockHandler([ $response1 ]);
  49. $handler = HandlerStack::create($mock);
  50. $client = new Client(['handler' => $handler]);
  51. // userland code starts
  52. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  53. $this->assertEquals($dbs, $server->getAllDbs());
  54. }
  55. public function testUseADbThatDoesExist() {
  56. $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"}';
  57. $response1 = new Response(200, [], $egdb1);
  58. $mock = new MockHandler([ $response1 ]);
  59. $handler = HandlerStack::create($mock);
  60. $client = new Client(['handler' => $handler]);
  61. // userland code starts
  62. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  63. $this->assertInstanceOf("\PHPCouchDB\Database", $server->useDb([\PHPCouchDB\Server::OPTION_NAME => "egdb"]));
  64. }
  65. public function testUseADbWithCreateThatDoesExist() {
  66. $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"}';
  67. $response1 = new Response(200, [], $egdb1);
  68. $mock = new MockHandler([ $response1 ]);
  69. $handler = HandlerStack::create($mock);
  70. $client = new Client(['handler' => $handler]);
  71. // userland code starts
  72. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  73. $this->assertInstanceOf("\PHPCouchDB\Database", $server->useDb(
  74. [\PHPCouchDB\Server::OPTION_NAME => "egdb", \PHPCouchDB\Server::OPTION_CREATE_IF_NOT_EXISTS => false]
  75. ));
  76. }
  77. /**
  78. * @expectedException \PHPCouchDB\Exception\ServerException
  79. */
  80. public function testUseADbThatDoesNotExist() {
  81. $egdb1 = '{"error":"not_found","reason":"Database does not exist."}';
  82. $response1 = new Response(404, [], $egdb1);
  83. $mock = new MockHandler([ $response1 ]);
  84. $handler = HandlerStack::create($mock);
  85. $client = new Client(['handler' => $handler]);
  86. // userland code starts
  87. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  88. $server->useDb([\PHPCouchDB\Server::OPTION_NAME => "egdb"]);
  89. }
  90. public function testUseADbWithCreateThatDoesNotExist() {
  91. $egdb1 = '{"error":"not_found","reason":"Database does not exist."}';
  92. $response1 = new Response(404, [], $egdb1);
  93. $egdb2 = '{"ok":true}';
  94. $response2 = new Response(201, [], $egdb2);
  95. $mock = new MockHandler([ $response1, $response2 ]);
  96. $handler = HandlerStack::create($mock);
  97. $client = new Client(['handler' => $handler]);
  98. // userland code starts
  99. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  100. $this->assertInstanceOf("\PHPCouchDB\Database", $server->useDb(
  101. [\PHPCouchDB\Server::OPTION_NAME => "egdb", \PHPCouchDB\Server::OPTION_CREATE_IF_NOT_EXISTS => true]
  102. ));
  103. }
  104. public function testGetClient() {
  105. $mock = new MockHandler([ ]);
  106. $handler = HandlerStack::create($mock);
  107. $client = new Client(['handler' => $handler]);
  108. // userland code starts
  109. $server = new \PHPCouchDB\Server([\PHPCouchDB\Server::OPTION_CLIENT => $client]);
  110. $this->assertInstanceOf("\GuzzleHttp\ClientInterface", $server->getClient());
  111. }
  112. }