From 78385d71559b98296a324f3fff5eb78f4961e322 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 9 Mar 2024 20:33:48 +0100 Subject: [PATCH] Fix object-search tag query bypassing search string. Resolve #3438 --- CHANGELOG.md | 3 +++ evennia/objects/manager.py | 6 +----- evennia/objects/tests.py | 19 ++++++++++++++++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91ab4540b6..9fb9459899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,10 +24,13 @@ will show for admins in some more places (Griatch) - [Fix][pull3420]: Refactor Clothing contrib's inventory command align with Evennia core's version (michaelfaith84, Griatch) +- [Fix][issue3438]: Limiting search by tag didn't take search-string into + account (Griatch) - Fix: Resolve a bug when loading on-demand-handler data from database (Griatch) - Doc fixes (iLPdev, Griatch, CloudKeeper) [pull3420]: https://github.com/evennia/evennia/pull/3420 +[issue3438]: https://github.com/evennia/evennia/issues/3438 ## Evennia 3.2.0 diff --git a/evennia/objects/manager.py b/evennia/objects/manager.py index 43f8684d35..7b5f51cb75 100644 --- a/evennia/objects/manager.py +++ b/evennia/objects/manager.py @@ -6,7 +6,6 @@ import re from django.conf import settings from django.db.models import Q from django.db.models.fields import exceptions - from evennia.server import signals from evennia.typeclasses.managers import TypeclassManager, TypedObjectManager from evennia.utils.utils import ( @@ -442,9 +441,6 @@ class ObjectDBManager(TypedObjectManager): ) def _search_by_tag(query, taglist): - if not query: - query = self.all() - for tagkey, tagcategory in taglist: query = query.filter(db_tags__db_key=tagkey, db_tags__db_category=tagcategory) @@ -452,7 +448,7 @@ class ObjectDBManager(TypedObjectManager): if not searchdata and searchdata != 0: if tags: - return _search_by_tag(make_iter(tags)) + return _search_by_tag(self.all(), make_iter(tags)) return self.none() diff --git a/evennia/objects/tests.py b/evennia/objects/tests.py index 25701def87..a77b348d02 100644 --- a/evennia/objects/tests.py +++ b/evennia/objects/tests.py @@ -9,7 +9,7 @@ from evennia.typeclasses.tags import ( TagCategoryProperty, TagProperty, ) -from evennia.utils import create +from evennia.utils import create, search from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTestCase @@ -137,6 +137,23 @@ class DefaultObjectTest(BaseEvenniaTest): DefaultObject.get_default_lockstring(account=self.account, caller=self.char1), pattern ) + def test_search_by_tag_kwarg(self): + "Test the by_tag method" + + self.obj1.tags.add("plugh", category="adventure") + + self.assertEqual(self.char1.search("Obj", quiet=True), [self.obj1]) + # should not find a match + self.assertEqual(self.char1.search("Dummy", quiet=True), []) + # should still not find a match + self.assertEqual(self.char1.search("Dummy", tags=[("plugh", "adventure")], quiet=True), []) + + self.assertEqual(list(search.search_object("Dummy", tags=[("plugh", "adventure")])), []) + self.assertEqual( + list(search.search_object("Obj", tags=[("plugh", "adventure")])), [self.obj1] + ) + self.assertEqual(list(search.search_object("Obj", tags=[("dummy", "adventure")])), []) + def test_get_default_lockstring_room(self): pattern = ( f"control:pid({self.account.id}) or id({self.char1.id}) or"