From 8c469344fa38a1b38da3c177035e25e4a8a3e383 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mantas=20Marcinkevi=C4=8Dius?= <marc.mantas@gmail.com>
Date: Wed, 20 Jul 2016 12:02:01 +0300
Subject: [PATCH] added a test for nested inner hit

---
 tests/InnerHit/NestedInnerHitTest.php | 117 ++++++++++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 tests/InnerHit/NestedInnerHitTest.php

diff --git a/tests/InnerHit/NestedInnerHitTest.php b/tests/InnerHit/NestedInnerHitTest.php
new file mode 100644
index 0000000..9cb88fc
--- /dev/null
+++ b/tests/InnerHit/NestedInnerHitTest.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace ONGR\ElasticsearchDSL\Tests\InnerHit;
+
+use ONGR\ElasticsearchDSL\InnerHit\NestedInnerHit;
+use ONGR\ElasticsearchDSL\Query\MatchQuery;
+use ONGR\ElasticsearchDSL\Query\NestedQuery;
+use ONGR\ElasticsearchDSL\Query\TermQuery;
+
+class NestedInnerHitTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * Data provider for testToArray().
+     *
+     * @return array
+     */
+    public function getTestToArrayData()
+    {
+        $out = [];
+
+        $matchQuery = new MatchQuery('foo.bar.aux', 'foo');
+        $nestedQuery = new NestedQuery('foo.bar', $matchQuery);
+        $innerHit = new NestedInnerHit('acme', 'foo', $nestedQuery);
+        $nestedInnerHit1 = new NestedInnerHit('aux', 'foo.bar.aux', $matchQuery);
+        $nestedInnerHit2 = new NestedInnerHit('lux', 'foo.bar.aux', $matchQuery);
+        $innerHit->addInnerHit($nestedInnerHit1);
+        $innerHit->addInnerHit($nestedInnerHit2);
+
+        $out[] = [
+            $nestedInnerHit1,
+            [
+                'path' => [
+                    'foo.bar.aux' => [
+                        'query' => $matchQuery->toArray(),
+                    ],
+                ],
+            ],
+        ];
+
+        $out[] = [
+            $innerHit,
+            [
+                'path' => [
+                    'foo' => [
+                        'query' => $nestedQuery->toArray(),
+                        'inner_hits' => [
+                            'aux' => [
+                                'path' => [
+                                    'foo.bar.aux' => [
+                                        'query' => $matchQuery->toArray(),
+                                    ],
+                                ],
+                            ],
+                            'lux' => [
+                                'path' => [
+                                    'foo.bar.aux' => [
+                                        'query' => $matchQuery->toArray(),
+                                    ],
+                                ],
+                            ]
+                        ],
+                    ],
+                ],
+            ],
+        ];
+
+        return $out;
+    }
+
+
+    /**
+     * Tests toArray() method.
+     *
+     * @param NestedInnerHit $innerHit
+     * @param array          $expected
+     *
+     * @dataProvider getTestToArrayData
+     */
+    public function testToArray($innerHit, $expected)
+    {
+        $this->assertEquals($expected, $innerHit->toArray());
+    }
+
+
+    /**
+     * Tests getters and setters for $name, $path and $query
+     */
+    public function testGettersAndSetters()
+    {
+        $query = new MatchQuery('acme', 'test');
+        $hit = new NestedInnerHit('test', 'acme', new TermQuery('foo', 'bar'));
+        $hit->setName('foo');
+        $hit->setPath('bar');
+        $hit->setQuery($query);
+
+        $this->assertEquals('foo', $hit->getName());
+        $this->assertEquals('bar', $hit->getPath());
+        $this->assertEquals($query, $hit->getQuery());
+    }
+
+    /**
+     * Tests getInnerHit() method
+     */
+    public function testGetInnerHit()
+    {
+        $query = new MatchQuery('acme', 'test');
+        $hit = new NestedInnerHit('test', 'acme', $query);
+        $nestedInnerHit1 = new NestedInnerHit('foo', 'acme.foo', $query);
+        $nestedInnerHit2 = new NestedInnerHit('bar', 'acme.bar', $query);
+        $hit->addInnerHit($nestedInnerHit1);
+        $hit->addInnerHit($nestedInnerHit2);
+
+        $this->assertEquals($nestedInnerHit1, $hit->getInnerHit('foo'));
+        $this->assertEquals($nestedInnerHit2, $hit->getInnerHit('bar'));
+        $this->assertNull($hit->getInnerHit('non_existing_hit'));
+    }
+}
-- 
GitLab