/**
  * Test edges method
  */
 public function testEdgesAny()
 {
     $connection = $this->connection;
     $edgeCollection = $this->edgeCollection;
     $document1 = new Document();
     $document2 = new Document();
     $documentHandler = new DocumentHandler($connection);
     $edgeDocumentHandler = new EdgeHandler($connection);
     $document1->someAttribute = 'someValue1';
     $document2->someAttribute = 'someValue2';
     $documentHandler->add('ArangoDBPHPTestSuiteTestCollection01', $document1);
     $documentHandler->add('ArangoDBPHPTestSuiteTestCollection01', $document2);
     $documentHandle1 = $document1->getHandle();
     $documentHandle2 = $document2->getHandle();
     $edgeDocument1 = $edgeDocumentHandler->saveEdge($edgeCollection->getName(), $documentHandle1, $documentHandle2, array('value' => 1));
     $edgeDocument2 = $edgeDocumentHandler->saveEdge($edgeCollection->getName(), $documentHandle2, $documentHandle1, array('value' => 2));
     $edgeDocument3 = $edgeDocumentHandler->saveEdge($edgeCollection->getName(), $documentHandle1, $documentHandle2, array('value' => 3));
     $edgesQueryResult = $edgeDocumentHandler->edges($edgeCollection->getName(), $documentHandle1, "any");
     $this->assertEquals(3, count($edgesQueryResult));
     foreach ($edgesQueryResult as $edge) {
         $this->assertInstanceOf('triagens\\ArangoDb\\Edge', $edge);
         if ($edge->value === 1) {
             $this->assertEquals($documentHandle1, $edge->getFrom());
             $this->assertEquals($documentHandle2, $edge->getTo());
             $this->assertEquals($edgeDocument1, $edge->getId());
         } else {
             if ($edge->value === 2) {
                 $this->assertEquals($documentHandle2, $edge->getFrom());
                 $this->assertEquals($documentHandle1, $edge->getTo());
                 $this->assertEquals($edgeDocument2, $edge->getId());
             } else {
                 $this->assertEquals($documentHandle1, $edge->getFrom());
                 $this->assertEquals($documentHandle2, $edge->getTo());
                 $this->assertEquals($edgeDocument3, $edge->getId());
             }
         }
     }
     // test empty result
     $edgesQueryResult = $edgeDocumentHandler->edges($edgeCollection->getName(), "ArangoDBPHPTestSuiteTestCollection01/foobar", "any");
     $this->assertEquals(0, count($edgesQueryResult));
 }
 /**
  * Try to create and delete an edge with wrong encoding
  * We expect an exception here:
  *
  * @expectedException \triagens\ArangoDb\ClientException
  */
 public function testCreateAndDeleteEdgeWithWrongEncoding()
 {
     $connection = $this->connection;
     $this->collection;
     $edgeCollection = $this->edgeCollection;
     $this->collectionHandler;
     $document1 = new Document();
     $document2 = new Document();
     $documentHandler = new DocumentHandler($connection);
     $edgeDocument = new Edge();
     $edgeDocumentHandler = new EdgeHandler($connection);
     $document1->someAttribute = 'someValue1';
     $document2->someAttribute = 'someValue2';
     $documentHandler->add('ArangoDBPHPTestSuiteTestCollection01', $document1);
     $documentHandler->add('ArangoDBPHPTestSuiteTestCollection01', $document2);
     $documentHandle1 = $document1->getHandle();
     $documentHandle2 = $document2->getHandle();
     $isoValue = iconv("UTF-8", "ISO-8859-1//TRANSLIT", "knowsü");
     $edgeDocument->set('label', $isoValue);
     $edgeDocumentId = $edgeDocumentHandler->saveEdge($edgeCollection->getId(), $documentHandle1, $documentHandle2, $edgeDocument);
     //        $resultingDocument = $documentHandler->get($edgeCollection->getId(), $edgeDocumentId);
     $resultingEdge = $edgeDocumentHandler->get($edgeCollection->getId(), $edgeDocumentId);
     $resultingAttribute = $resultingEdge->label;
     $this->assertTrue($resultingAttribute === 'knows', 'Attribute set on the Edge is different from the one retrieved!');
     $edgesQuery1Result = $edgeDocumentHandler->edges($edgeCollection->getId(), $documentHandle1, 'out');
     $this->assertArrayHasKey('documents', $edgesQuery1Result, "edges didn't return an array with a documents attribute!");
     $statement = new Statement($connection, array("query" => '', "count" => true, "batchSize" => 1000, "sanitize" => true));
     $statement->setQuery('FOR p IN PATHS(ArangoDBPHPTestSuiteTestCollection01, ArangoDBPHPTestSuiteTestEdgeCollection01, "outbound")  RETURN p');
     $cursor = $statement->execute();
     $result = $cursor->current();
     $this->assertInstanceOf('triagens\\ArangoDb\\Document', $result, "IN PATHS statement did not return a document object!");
     $resultingEdge->set('label', 'knows not');
     $documentHandler->update($resultingEdge);
     $resultingEdge = $edgeDocumentHandler->get($edgeCollection->getId(), $edgeDocumentId);
     $resultingAttribute = $resultingEdge->label;
     $this->assertTrue($resultingAttribute === 'knows not', 'Attribute "knows not" set on the Edge is different from the one retrieved (' . $resultingAttribute . ')!');
     $documentHandler->delete($document1);
     $documentHandler->delete($document2);
     // On ArangoDB 1.0 deleting a vertex doesn't delete the associated edge. Caution!
     $edgeDocumentHandler->delete($resultingEdge);
 }