public function testBulkUpdateOneExistingAndTwoMissingDocs()
 {
     $this->createIndex();
     $doc1 = array('name' => 'test1' . rand(100, 10000), 'value' => 'myTestVal' . rand(100, 10000));
     $doc2 = array('name' => 'test2' . rand(100, 10000), 'value' => 'myTestVal' . rand(100, 10000));
     $doc3 = array('name' => 'test3' . rand(100, 10000), 'value' => 'myTestVal' . rand(100, 10000));
     $allDocs = [$doc1, $doc2, $doc3];
     $bulkCreateRequest = new BulkCreateRequest(ES_INDEX, self::TYPE, $this->getSerializer());
     $bulkCreateRequest->addDocument($doc1, 'doc1');
     /** @var BulkResponse $response */
     $response = $this->getClient()->send($bulkCreateRequest);
     $this->assertGreaterThanOrEqual(0, $response->took());
     $bulkUpdateRequest = new BulkUpdateRequest(ES_INDEX, self::TYPE, $this->getSerializer());
     $bulkUpdateRequest->addDocument($doc1, 'doc1');
     $bulkUpdateRequest->addDocument($doc2, 'doc2');
     $bulkUpdateRequest->addDocument($doc3, 'doc3');
     /** @var BulkResponse $response */
     $response = $this->getClient()->send($bulkUpdateRequest);
     $this->assertGreaterThanOrEqual(0, $response->took());
     $items = $response->getItems();
     $this->assertTrue(is_array($items));
     $this->assertCount(3, $items);
     foreach ($items as $key => $item) {
         if (0 === $key) {
             $this->assertTrue($item[AbstractBulkUpdateRequest::BULK_ACTION]['ok']);
             $doc = $this->getDocument(ES_INDEX, self::TYPE, $item[AbstractBulkUpdateRequest::BULK_ACTION]['_id']);
             $this->assertEquals($allDocs[$key], $doc);
         } else {
             $this->assertContains('[' . $item[AbstractBulkUpdateRequest::BULK_ACTION]['_id'] . ']: document missing', $item[AbstractBulkUpdateRequest::BULK_ACTION]['error']);
         }
         $this->assertArrayHasKey(AbstractBulkUpdateRequest::BULK_ACTION, $item);
         $this->assertSame(ES_INDEX, $item[AbstractBulkUpdateRequest::BULK_ACTION]['_index']);
         $this->assertSame(self::TYPE, $item[AbstractBulkUpdateRequest::BULK_ACTION]['_type']);
     }
 }
 public function testAddAction()
 {
     $id = 'my-id';
     $doc = array('my' => 'doc');
     $serializedDoc = 'my-doc';
     $action = array(AbstractBulkCreateRequest::BULK_ACTION => array('_id' => $id, '_index' => self::INDEX, '_type' => self::TYPE));
     $this->serializer->expects($this->once())->method('serialize')->with($doc, array())->willReturn($serializedDoc);
     $this->request->addDocument($doc, $id);
     $expected = json_encode($action) . AbstractBulkCreateRequest::LINE_BREAK . $serializedDoc . AbstractBulkCreateRequest::LINE_BREAK;
     $result = $this->request->getBody();
     $this->assertSame($expected, $result);
 }
 public function testBulkDeleteFirstExisting()
 {
     $this->createIndex();
     $doc1 = array('name' => 'test1' . rand(100, 10000), 'value' => 'myTestVal' . rand(100, 10000));
     $bulkCreateRequest = new BulkCreateRequest(ES_INDEX, self::TYPE, $this->getSerializer());
     $bulkCreateRequest->addDocument($doc1, 'doc1');
     $bulkDeleteRequest = new BulkDeleteRequest(ES_INDEX, self::TYPE, $this->getSerializer());
     $bulkDeleteRequest->add(array('doc1', 'doc2', 'doc3'));
     /** @var BulkResponse $response */
     $response = $this->getClient()->send($bulkCreateRequest);
     $this->assertGreaterThanOrEqual(0, $response->took());
     $response = $this->getClient()->send($bulkDeleteRequest);
     $this->assertGreaterThanOrEqual(0, $response->took());
     $items = $response->getItems();
     $this->assertTrue(is_array($items));
     $this->assertCount(3, $items);
     foreach ($items as $key => $item) {
         $this->assertArrayHasKey(AbstractBulkDeleteRequest::BULK_ACTION, $item);
         $this->assertSame(ES_INDEX, $item[AbstractBulkDeleteRequest::BULK_ACTION]['_index']);
         $this->assertSame(self::TYPE, $item[AbstractBulkDeleteRequest::BULK_ACTION]['_type']);
         if (0 === $key) {
             $this->assertSame(2, $item[AbstractBulkDeleteRequest::BULK_ACTION]['_version']);
             $this->assertTrue($item[AbstractBulkDeleteRequest::BULK_ACTION]['ok']);
             $docRequest = new GetDocumentRequest(ES_INDEX, self::TYPE, $this->getSerializer());
             $docRequest->setId($item[AbstractBulkDeleteRequest::BULK_ACTION]['_id']);
             try {
                 $this->getClient()->send($docRequest);
                 $this->fail('document isn\'t deleted');
             } catch (ClientException $exception) {
                 $this->assertSame(404, $exception->getCode());
             }
         } else {
             $this->assertSame(1, $item[AbstractBulkDeleteRequest::BULK_ACTION]['_version']);
             $this->assertFalse($item[AbstractBulkDeleteRequest::BULK_ACTION]['found']);
         }
     }
 }