/**
  * Try to create and delete a document with several keys
  */
 public function testCreateAndDeleteDocumentWithSeveralKeys()
 {
     $connection = $this->connection;
     $collection = $this->collection;
     $documentHandler = new DocumentHandler($connection);
     $keys = array("foo", "bar", "bar:bar", "baz", "1", "0", "a-b-c", "a:b", "this-is-a-test", "FOO", "BAR", "Bar", "bAr");
     foreach ($keys as $key) {
         $document = new Document();
         $document->someAttribute = 'someValue';
         $document->set('_key', $key);
         $documentId = $documentHandler->add($collection->getName(), $document);
         $resultingDocument = $documentHandler->get($collection->getName(), $documentId);
         $resultingAttribute = $resultingDocument->someAttribute;
         $resultingKey = $resultingDocument->getKey();
         $this->assertTrue($resultingAttribute === 'someValue', 'Resulting Attribute should be "someValue". It\'s :' . $resultingAttribute);
         $this->assertTrue($resultingKey === $key, 'Resulting Attribute should be "someValue". It\'s :' . $resultingKey);
         $documentHandler->delete($document);
     }
 }
 /**
  * Try to create and delete a document with several keys
  */
 public function testCreateAndDeleteDocumentWithSeveralKeys()
 {
     $connection = $this->connection;
     $collection = $this->collection;
     $documentHandler = new DocumentHandler($connection);
     $keys = array("_", "foo", "bar", "bar:bar", "baz", "1", "0", "a-b-c", "a:b", "this-is-a-test", "FOO", "BAR", "Bar", "bAr");
     $adminHandler = new AdminHandler($this->connection);
     $version = preg_replace("/-[a-z0-9]+\$/", "", $adminHandler->getServerVersion());
     if (version_compare($version, '2.6.0') >= 0) {
         // 2.6 will also allow the following document keys, while 2.5 will not
         $keys[] = ".";
         $keys[] = ":";
         $keys[] = "@";
         $keys[] = "-.:@";
         $keys[] = "*****@*****.**";
         $keys[] = ":.foo@bar-bar_bar.baz.com.:";
     }
     foreach ($keys as $key) {
         $document = new Document();
         $document->someAttribute = 'someValue';
         $document->set('_key', $key);
         $documentId = $documentHandler->add($collection->getName(), $document);
         $resultingDocument = $documentHandler->get($collection->getName(), $documentId);
         $resultingAttribute = $resultingDocument->someAttribute;
         $resultingKey = $resultingDocument->getKey();
         $this->assertTrue($resultingAttribute === 'someValue', 'Resulting Attribute should be "someValue". It\'s :' . $resultingAttribute);
         $this->assertTrue($resultingKey === $key, 'Resulting Attribute should be "someValue". It\'s :' . $resultingKey);
         $documentHandler->delete($document);
     }
 }
 /**
  * Try to create, head and delete a edge
  */
 public function testCreateHeadAndDeleteEdgeWithRevision()
 {
     $connection = $this->connection;
     $edgeHandler = new EdgeHandler($connection);
     $edgeCollection = $this->edgeCollection;
     $document1 = new Document();
     $document2 = new Document();
     $documentHandler = new DocumentHandler($connection);
     $edgeDocument = new Edge();
     $document1->someAttribute = 'someValue1';
     $document2->someAttribute = 'someValue2';
     $documentHandler->add('ArangoDBPHPTestSuiteTestCollection01', $document1);
     $documentHandler->add('ArangoDBPHPTestSuiteTestCollection01', $document2);
     $documentHandle1 = $document1->getHandle();
     $documentHandle2 = $document2->getHandle();
     $edgeDocument->set('label', 'knows');
     $edgeId = $edgeHandler->saveEdge($edgeCollection->getName(), $documentHandle1, $documentHandle2, $edgeDocument);
     try {
         $edgeHandler->getHead($edgeCollection->getId(), $edgeId, "12345", true);
     } catch (\Exception $e412) {
     }
     $this->assertEquals($e412->getCode(), 412);
     try {
         $edgeHandler->getHead($edgeCollection->getId(), "notExisting");
     } catch (\Exception $e404) {
     }
     $this->assertEquals($e404->getCode(), 404);
     $result304 = $edgeHandler->getHead($edgeCollection->getId(), $edgeId, $edgeDocument->getRevision(), false);
     $this->assertEquals($result304["etag"], '"' . $edgeDocument->getRevision() . '"');
     $this->assertEquals($result304["content-length"], 0);
     $this->assertEquals($result304["httpCode"], 304);
     $result200 = $edgeHandler->getHead($edgeCollection->getId(), $edgeId, $edgeDocument->getRevision(), true);
     $this->assertEquals($result200["etag"], '"' . $edgeDocument->getRevision() . '"');
     $this->assertNotEquals($result200["content-length"], 0);
     $this->assertEquals($result200["httpCode"], 200);
     $documentHandler->delete($document1);
     $documentHandler->delete($document2);
     $edgeHandler->deleteById($edgeCollection->getName(), $edgeId);
 }