diff --git a/evennia/typeclasses/managers.py b/evennia/typeclasses/managers.py index c3902275f0..c27e5a04e7 100644 --- a/evennia/typeclasses/managers.py +++ b/evennia/typeclasses/managers.py @@ -197,6 +197,8 @@ class TypedObjectManager(idmapper.manager.SharedMemoryManager): query.append(("db_key", key)) if category: query.append(("db_category", category)) + else: + query.append(("db_category", None)) return _Tag.objects.filter(**dict(query)) else: # search only among tags stored on on this model diff --git a/evennia/typeclasses/tests.py b/evennia/typeclasses/tests.py index 04e37a28c2..198e3eb086 100644 --- a/evennia/typeclasses/tests.py +++ b/evennia/typeclasses/tests.py @@ -314,6 +314,23 @@ class TestTags(BaseEvenniaTest): self.obj1.tags.add("tagC", "categoryC") self.assertFalse(self.obj1.tags.has(category="categoryD")) + def test_tag_add_no_category__issue_2688(self): + """ + Adding a tag without a category should create a new tag:None tag + rather than trying to update an existing tag:category tag. + """ + # adding tag+category, creates tag+category entry + self.obj1.tags.add("testing", category="testing_category") + self.assertEqual( + self.obj1.tags.all(return_key_and_category=True), [("testing", "testing_category")] + ) + # adding a new tag with no category should create a tag+None entry + self.obj1.tags.add("testing") + self.assertEqual( + self.obj1.tags.all(return_key_and_category=True), + [("testing", "testing_category"), ("testing", None)], + ) + class TestNickHandler(BaseEvenniaTest): """