From f3fa6bad073aaa1d4706f61c202cab3b95e71c97 Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 7 Feb 2019 23:23:51 +0100 Subject: [PATCH] Unittest manager get_object_with_account --- evennia/objects/manager.py | 18 +++++++++--------- evennia/objects/tests.py | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/evennia/objects/manager.py b/evennia/objects/manager.py index 9907c960d6..399a43293d 100644 --- a/evennia/objects/manager.py +++ b/evennia/objects/manager.py @@ -69,7 +69,7 @@ class ObjectDBManager(TypedObjectManager): object candidates. Return: - match (Object or list): One or more matching results. + match (query): Matching query. """ ostring = to_unicode(ostring).lstrip('*') @@ -77,7 +77,7 @@ class ObjectDBManager(TypedObjectManager): dbref = self.dbref(ostring) if dbref: try: - return self.get(id=dbref) + return self.get(db_account__id=dbref) except self.model.DoesNotExist: pass @@ -87,13 +87,13 @@ class ObjectDBManager(TypedObjectManager): if exact: return self.filter(cand_restriction & Q(db_account__username__iexact=ostring)) else: # fuzzy matching - ply_cands = self.filter(cand_restriction & Q(accountdb__username__istartswith=ostring) - ).values_list("db_key", flat=True) - if candidates: - index_matches = string_partial_matching(ply_cands, ostring, ret_index=True) - return [obj for ind, obj in enumerate(make_iter(candidates)) if ind in index_matches] - else: - return string_partial_matching(ply_cands, ostring, ret_index=False) + obj_cands = self.select_related().filter(cand_restriction & Q(db_account__username__istartswith=ostring)) + acct_cands = [obj.account for obj in obj_cands] + + if obj_cands: + index_matches = string_partial_matching([acct.key for acct in acct_cands], ostring, ret_index=True) + acct_cands = [acct_cands[i].id for i in index_matches] + return obj_cands.filter(db_account__id__in=acct_cands) def get_objs_with_key_and_typeclass(self, oname, otypeclass_path, candidates=None): """ diff --git a/evennia/objects/tests.py b/evennia/objects/tests.py index 6bfe34248f..a08b1ec29d 100644 --- a/evennia/objects/tests.py +++ b/evennia/objects/tests.py @@ -1,5 +1,6 @@ from evennia.utils.test_resources import EvenniaTest from evennia import DefaultObject, DefaultCharacter, DefaultRoom, DefaultExit +from evennia.objects.models import ObjectDB class DefaultObjectTest(EvenniaTest): @@ -45,3 +46,21 @@ class DefaultObjectTest(EvenniaTest): self.assertTrue(self.room1.get_absolute_url()) self.assertTrue('admin' in self.room1.web_get_admin_url()) + + +class TestObjectManager(EvenniaTest): + "Test object manager methods" + def test_get_object_with_account(self): + query = ObjectDB.objects.get_object_with_account("TestAccount").first() + self.assertEqual(query, self.char1) + query = ObjectDB.objects.get_object_with_account(self.account.dbref) + self.assertEqual(query, self.char1) + query = ObjectDB.objects.get_object_with_account("TestAccou").first() + self.assertEqual(query, None) + + query = ObjectDB.objects.get_object_with_account("TestAccou", exact=False) + self.assertEqual(tuple(query), (self.char1, self.char2)) + + query = ObjectDB.objects.get_object_with_account( + "TestAccou", candidates=[self.char1, self.obj1], exact=False) + self.assertEqual(list(query), [self.char1])