mirror of
https://github.com/humhub/humhub.git
synced 2025-03-14 20:19:47 +01:00
Test search filter by topics
This commit is contained in:
parent
4cfa5f0dbb
commit
7abead96b6
@ -163,9 +163,11 @@ class ZendLucenceDriver extends AbstractDriver
|
||||
|
||||
if (!empty($request->topic)) {
|
||||
Wildcard::setMinPrefixLength(0);
|
||||
$subQuery = new Boolean();
|
||||
foreach ($request->topic as $topic) {
|
||||
$query->addSubquery(new Wildcard(new Term('*-' . $topic . '-*', 'tags')), true);
|
||||
$subQuery->addSubquery(new Wildcard(new Term('*-' . $topic . '-*', 'tags')));
|
||||
}
|
||||
$query->addSubquery($subQuery, true);
|
||||
}
|
||||
|
||||
if ($request->author) {
|
||||
|
@ -5,11 +5,13 @@ namespace humhub\modules\content\tests\codeception\unit\search;
|
||||
use humhub\modules\content\models\Content;
|
||||
use humhub\modules\content\Module;
|
||||
use humhub\modules\content\search\driver\AbstractDriver;
|
||||
use humhub\modules\content\search\driver\MysqlDriver;
|
||||
use humhub\modules\content\search\ResultSet;
|
||||
use humhub\modules\content\search\SearchRequest;
|
||||
use humhub\modules\content\tests\codeception\unit\TestContent;
|
||||
use humhub\modules\post\models\Post;
|
||||
use humhub\modules\space\models\Space;
|
||||
use humhub\modules\topic\models\Topic;
|
||||
use humhub\modules\user\models\User;
|
||||
use tests\codeception\_support\HumHubDbTestCase;
|
||||
use Yii;
|
||||
@ -21,25 +23,20 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
|
||||
abstract protected function createDriver(): AbstractDriver;
|
||||
|
||||
public function _before()
|
||||
abstract protected function updateNewAddedContents(): void;
|
||||
|
||||
protected function _before()
|
||||
{
|
||||
$this->searchDriver = $this->createDriver();
|
||||
|
||||
/** @var Module $module */
|
||||
$module = Yii::$app->getModule('content');
|
||||
|
||||
$module->setComponents([
|
||||
'search' => [
|
||||
'class' => get_class($this->searchDriver)
|
||||
]
|
||||
]);
|
||||
|
||||
$this->searchDriver->purge();
|
||||
$module->set('search', ['class' => get_class($this->searchDriver)]);
|
||||
|
||||
parent::_before();
|
||||
}
|
||||
|
||||
|
||||
public function testKeywords()
|
||||
{
|
||||
$space = Space::findOne(['id' => 1]);
|
||||
@ -55,12 +52,13 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
$this->assertEquals(1, count($this->getSearchResultByKeyword('Marabr*')->results));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @skip Not possible on MySQLDriver
|
||||
*/
|
||||
public function testShortKeywords()
|
||||
{
|
||||
if ($this->searchDriver instanceof MysqlDriver) {
|
||||
// Not possible on MySQLDriver
|
||||
return;
|
||||
}
|
||||
|
||||
$space = Space::findOne(['id' => 1]);
|
||||
$this->becomeUser('Admin');
|
||||
(new Post($space, Content::VISIBILITY_PUBLIC, ['message' => 'Some Other']))->save();
|
||||
@ -71,10 +69,16 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
$this->assertEquals(1, count($this->getSearchResultByKeyword('X')->results));
|
||||
}
|
||||
|
||||
private function getSearchRequest(): SearchRequest
|
||||
{
|
||||
$this->updateNewAddedContents();
|
||||
|
||||
return new SearchRequest();
|
||||
}
|
||||
|
||||
private function getSearchResultByKeyword(string $keyword): ResultSet
|
||||
{
|
||||
$request = new SearchRequest();
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = $keyword;
|
||||
return $this->searchDriver->search($request);
|
||||
}
|
||||
@ -94,7 +98,7 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
$post3->content->created_at = '2023-12-04 22:00:00';
|
||||
$post3->save();
|
||||
|
||||
$request = new SearchRequest();
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = 'Test';
|
||||
|
||||
$request->dateFrom = '2024-02-01';
|
||||
@ -116,6 +120,47 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
$this->assertEquals(2, count($result->results));
|
||||
}
|
||||
|
||||
public function testFilterTopics()
|
||||
{
|
||||
$space = Space::findOne(['id' => 1]);
|
||||
$this->becomeUser('Admin');
|
||||
|
||||
$post1 = new Post($space, Content::VISIBILITY_PUBLIC, ['message' => 'Test Test1']);
|
||||
if ($post1->save()) {
|
||||
Topic::attach($post1->content, ['_add:red']);
|
||||
}
|
||||
$topic1 = Topic::findOne(['name' => 'red']);
|
||||
$post2 = new Post($space, Content::VISIBILITY_PUBLIC, ['message' => 'Test Test2']);
|
||||
if ($post2->save()) {
|
||||
Topic::attach($post2->content, [$topic1, '_add:green']);
|
||||
}
|
||||
$topic2 = Topic::findOne(['name' => 'green']);
|
||||
$post3 = new Post($space, Content::VISIBILITY_PUBLIC, ['message' => 'Test Test3']);
|
||||
if ($post3->save()) {
|
||||
Topic::attach($post3->content, [$topic2, '_add:blue']);
|
||||
}
|
||||
$topic3 = Topic::findOne(['name' => 'blue']);
|
||||
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = 'Test';
|
||||
|
||||
$request->topic = [$topic1->id];
|
||||
$result = $this->searchDriver->search($request);
|
||||
$this->assertEquals(2, count($result->results));
|
||||
|
||||
$request->topic = [$topic1->id, $topic2->id];
|
||||
$result = $this->searchDriver->search($request);
|
||||
$this->assertEquals(3, count($result->results));
|
||||
|
||||
$request->topic = [$topic2->id];
|
||||
$result = $this->searchDriver->search($request);
|
||||
$this->assertEquals(2, count($result->results));
|
||||
|
||||
$request->topic = [$topic3->id];
|
||||
$result = $this->searchDriver->search($request);
|
||||
$this->assertEquals(1, count($result->results));
|
||||
}
|
||||
|
||||
public function testFilterContentType()
|
||||
{
|
||||
$space = Space::findOne(['id' => 1]);
|
||||
@ -125,7 +170,7 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
(new TestContent($space, Content::VISIBILITY_PUBLIC, ['message' => 'Test Test1']))->save();
|
||||
(new TestContent($space, Content::VISIBILITY_PUBLIC, ['message' => 'Test Test2']))->save();
|
||||
|
||||
$request = new SearchRequest();
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = 'Test';
|
||||
$request->contentType = TestContent::class;
|
||||
|
||||
@ -148,9 +193,8 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
(new Post($space, Content::VISIBILITY_PUBLIC, ['message' => 'TestAuthor Test4']))->save();
|
||||
(new Post($space, Content::VISIBILITY_PUBLIC, ['message' => 'TestAuthor Test5']))->save();
|
||||
|
||||
// Search by filter
|
||||
|
||||
$request = new SearchRequest();
|
||||
// Search by filter "Author"
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = 'TestAuthor';
|
||||
$request->author = [User::findOne(['username' => 'User2'])->guid];
|
||||
|
||||
@ -158,12 +202,12 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
|
||||
$this->assertEquals(3, count($result->results));
|
||||
|
||||
// Search by keyword
|
||||
// Search by keyword without filter "Author"
|
||||
$request = new SearchRequest();
|
||||
$request->keyword = 'Sara Tester';
|
||||
$request->keyword = 'TestAuthor';
|
||||
$result = $this->searchDriver->search($request);
|
||||
|
||||
$this->assertEquals(3, count($result->results));
|
||||
$this->assertEquals(4, count($result->results));
|
||||
}
|
||||
|
||||
public function testOrderBy()
|
||||
@ -183,12 +227,7 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
$post3->save();
|
||||
$post3->content->updateAttributes(['created_at' => '2023-02-01 11:00:00']);
|
||||
|
||||
$this->searchDriver->purge();
|
||||
$this->searchDriver->update($post1->content);
|
||||
$this->searchDriver->update($post2->content);
|
||||
$this->searchDriver->update($post3->content);
|
||||
|
||||
$request = new SearchRequest();
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = 'Keyword';
|
||||
$request->orderBy = SearchRequest::ORDER_BY_CREATION_DATE;
|
||||
$result = $this->searchDriver->search($request);
|
||||
@ -198,7 +237,7 @@ abstract class AbstractDriverTestSuite extends HumHubDbTestCase
|
||||
$this->assertEquals($post3->content->id, $result->results[1]->content->id);
|
||||
$this->assertEquals($post1->content->id, $result->results[2]->content->id);
|
||||
|
||||
$request = new SearchRequest();
|
||||
$request = $this->getSearchRequest();
|
||||
$request->keyword = 'Keyword';
|
||||
$request->orderBy = SearchRequest::ORDER_BY_SCORE;
|
||||
$result = $this->searchDriver->search($request);
|
||||
|
@ -11,4 +11,8 @@ class MysqlDriverTest extends AbstractDriverTestSuite
|
||||
{
|
||||
return new MysqlDriver();
|
||||
}
|
||||
|
||||
protected function updateNewAddedContents(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace humhub\modules\content\tests\codeception\unit\search;
|
||||
|
||||
use humhub\modules\content\models\Content;
|
||||
use humhub\modules\content\search\driver\AbstractDriver;
|
||||
use humhub\modules\content\search\driver\ZendLucenceDriver;
|
||||
|
||||
@ -11,4 +12,12 @@ class ZendLucenceDriverTest extends AbstractDriverTestSuite
|
||||
{
|
||||
return new ZendLucenceDriver();
|
||||
}
|
||||
|
||||
protected function updateNewAddedContents(): void
|
||||
{
|
||||
foreach (Content::find()->where(['visibility' => Content::VISIBILITY_PUBLIC])->each() as $content) {
|
||||
$this->searchDriver->delete($content);
|
||||
$this->searchDriver->update($content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user