diff --git a/extensions/sphinx/ActiveRelation.php b/extensions/sphinx/ActiveRelation.php new file mode 100644 index 0000000..15a5ba0 --- /dev/null +++ b/extensions/sphinx/ActiveRelation.php @@ -0,0 +1,22 @@ + + * @since 2.0 + */ +class ActiveRelation extends ActiveQuery implements ActiveRelationInterface +{ + use ActiveRelationTrait; +} \ No newline at end of file diff --git a/tests/unit/data/sphinx/ar/ArticleDb.php b/tests/unit/data/sphinx/ar/ArticleDb.php index 3c32f99..4972112 100644 --- a/tests/unit/data/sphinx/ar/ArticleDb.php +++ b/tests/unit/data/sphinx/ar/ArticleDb.php @@ -2,6 +2,7 @@ namespace yiiunit\data\sphinx\ar; +use yii\sphinx\ActiveRelation; use yiiunit\data\ar\ActiveRecord as ActiveRecordDb; class ArticleDb extends ActiveRecordDb @@ -10,4 +11,15 @@ class ArticleDb extends ActiveRecordDb { return 'yii2_test_article'; } + + public function getIndex() + { + $config = [ + 'modelClass' => ArticleIndex::className(), + 'primaryModel' => $this, + 'link' => ['id' => 'id'], + 'multiple' => false, + ]; + return new ActiveRelation($config); + } } \ No newline at end of file diff --git a/tests/unit/extensions/sphinx/ActiveRelationTest.php b/tests/unit/extensions/sphinx/ActiveRelationTest.php index 343a58b..05c48c9 100644 --- a/tests/unit/extensions/sphinx/ActiveRelationTest.php +++ b/tests/unit/extensions/sphinx/ActiveRelationTest.php @@ -19,37 +19,26 @@ class ActiveRelationTest extends SphinxTestCase ActiveRecordDb::$db = $this->getDbConnection(); } + // Tests : + public function testFindLazy() { - /** @var ArticleIndex $article */ - $article = ArticleIndex::find(['id' => 2]); - $this->assertFalse($article->isRelationPopulated('source')); - $source = $article->source; - $this->assertTrue($article->isRelationPopulated('source')); - $this->assertTrue($source instanceof ArticleDb); + /** @var ArticleDb $article */ + $article = ArticleDb::find(['id' => 2]); + $this->assertFalse($article->isRelationPopulated('index')); + $index = $article->index; + $this->assertTrue($article->isRelationPopulated('index')); + $this->assertTrue($index instanceof ArticleIndex); $this->assertEquals(1, count($article->populatedRelations)); } public function testFindEager() { - $articles = ArticleIndex::find()->with('source')->all(); - $this->assertEquals(2, count($articles)); - $this->assertTrue($articles[0]->isRelationPopulated('source')); - $this->assertTrue($articles[1]->isRelationPopulated('source')); - $this->assertTrue($articles[0]->source instanceof ArticleDb); - $this->assertTrue($articles[1]->source instanceof ArticleDb); - } - - /** - * @depends testFindEager - */ - public function testFindWithSnippets() - { - $articles = ArticleIndex::find() - ->match('about') - ->with('source') - ->snippetByModel() - ->all(); + $articles = ArticleDb::find()->with('index')->all(); $this->assertEquals(2, count($articles)); + $this->assertTrue($articles[0]->isRelationPopulated('index')); + $this->assertTrue($articles[1]->isRelationPopulated('index')); + $this->assertTrue($articles[0]->index instanceof ArticleIndex); + $this->assertTrue($articles[1]->index instanceof ArticleIndex); } } \ No newline at end of file diff --git a/tests/unit/extensions/sphinx/ExternalActiveRelationTest.php b/tests/unit/extensions/sphinx/ExternalActiveRelationTest.php new file mode 100644 index 0000000..81f7989 --- /dev/null +++ b/tests/unit/extensions/sphinx/ExternalActiveRelationTest.php @@ -0,0 +1,57 @@ +getConnection(); + ActiveRecordDb::$db = $this->getDbConnection(); + } + + // Tests : + + public function testFindLazy() + { + /** @var ArticleIndex $article */ + $article = ArticleIndex::find(['id' => 2]); + $this->assertFalse($article->isRelationPopulated('source')); + $source = $article->source; + $this->assertTrue($article->isRelationPopulated('source')); + $this->assertTrue($source instanceof ArticleDb); + $this->assertEquals(1, count($article->populatedRelations)); + } + + public function testFindEager() + { + $articles = ArticleIndex::find()->with('source')->all(); + $this->assertEquals(2, count($articles)); + $this->assertTrue($articles[0]->isRelationPopulated('source')); + $this->assertTrue($articles[1]->isRelationPopulated('source')); + $this->assertTrue($articles[0]->source instanceof ArticleDb); + $this->assertTrue($articles[1]->source instanceof ArticleDb); + } + + /** + * @depends testFindEager + */ + public function testFindWithSnippets() + { + $articles = ArticleIndex::find() + ->match('about') + ->with('source') + ->snippetByModel() + ->all(); + $this->assertEquals(2, count($articles)); + } +} \ No newline at end of file