45
from canonical.launchpad.webapp import canonical_url
43
46
from canonical.launchpad.webapp.batching import BatchNavigator
47
from lp.testing._login import person_logged_in
48
from lp.testing._webservice import QueryCollector
51
class BrowsesWithQueryLimit(Matcher):
52
"""Matches the rendering of an objects default view with a query limit.
54
This is a wrapper for HasQueryCount which does the heavy lifting on the
55
query comparison - BrowsesWithQueryLimit simply provides convenient
56
glue to use a userbrowser and view an object.
59
def __init__(self, query_limit, user):
60
"""Create a BrowsesWithQueryLimit checking for limit query_limit.
62
:param query_limit: The number of queries permited for the page.
63
:param user: The user to use to render the page.
65
self.query_limit = query_limit
68
def match(self, context):
69
# circular dependencies.
70
from canonical.launchpad.testing.pages import setupBrowserForUser
71
with person_logged_in(self.user):
72
context_url = canonical_url(context)
73
browser = setupBrowserForUser(self.user)
74
collector = QueryCollector()
77
browser.open(context_url)
78
counter = HasQueryCount(LessThan(self.query_limit))
79
# When bug 724691 is fixed, this can become an AnnotateMismatch to
80
# describe the object being rendered.
81
return counter.match(collector)
83
# Unregister now in case this method is called multiple
84
# times in a single test.
85
collector.unregister()
88
return "BrowsesWithQueryLimit(%s, %s)" % (self.query_limit, self.user)
46
91
class DoesNotProvide(Mismatch):