def test_match(self):
     matcher = HasQueryCount(Is(3))
     collector = QueryCollector()
     collector.count = 3
     # not inspected
     del collector.queries
     self.assertThat(matcher.match(collector), Is(None))
 def test_mismatch(self):
     matcher = HasQueryCount(LessThan(2))
     collector = RequestTimelineCollector()
     collector.count = 2
     collector.queries = [
         (0, 1, "SQL-main-slave", "SELECT 1 FROM Person", None),
         (2, 3, "SQL-main-slave", "SELECT 1 FROM Product", None),
         ]
     mismatch = matcher.match(collector)
     self.assertThat(mismatch, Not(Is(None)))
     details = mismatch.get_details()
     lines = []
     for name, content in details.items():
         self.assertEqual("queries", name)
         self.assertEqual("text", content.content_type.type)
         lines.append(''.join(content.iter_text()))
     separator = "-" * 70
     expected_lines = [
         "0-1@SQL-main-slave SELECT 1 FROM Person\n" + separator + "\n" +
         "2-3@SQL-main-slave SELECT 1 FROM Product\n" + separator,
         ]
     self.assertEqual(expected_lines, lines)
     self.assertEqual(
         "queries do not match: %s" % (LessThan(2).match(2).describe(),),
         mismatch.describe())
 def test_with_backtrace(self):
     matcher = HasQueryCount(LessThan(2))
     collector = RequestTimelineCollector()
     collector.count = 2
     collector.queries = [
         (0, 1, "SQL-main-slave", "SELECT 1 FROM Person",
          '  File "example", line 2, in <module>\n'
          '    Store.of(Person).one()\n'),
         (2, 3, "SQL-main-slave", "SELECT 1 FROM Product",
          '  File "example", line 3, in <module>\n'
          '    Store.of(Product).one()\n'),
         ]
     mismatch = matcher.match(collector)
     self.assertThat(mismatch, Not(Is(None)))
     details = mismatch.get_details()
     lines = []
     for name, content in details.items():
         self.assertEqual("queries", name)
         self.assertEqual("text", content.content_type.type)
         lines.append(''.join(content.iter_text()))
     separator = "-" * 70
     backtrace_separator = "." * 70
     expected_lines = [
         '0-1@SQL-main-slave SELECT 1 FROM Person\n' + separator + '\n' +
         '  File "example", line 2, in <module>\n' +
         '    Store.of(Person).one()\n' + backtrace_separator + '\n' +
         '2-3@SQL-main-slave SELECT 1 FROM Product\n' + separator + '\n' +
         '  File "example", line 3, in <module>\n' +
         '    Store.of(Product).one()\n' + backtrace_separator,
         ]
     self.assertEqual(expected_lines, lines)
     self.assertEqual(
         "queries do not match: %s" % (LessThan(2).match(2).describe(),),
         mismatch.describe())
 def test_match(self):
     matcher = HasQueryCount(Is(3))
     collector = RequestTimelineCollector()
     collector.count = 3
     # not inspected
     del collector.queries
     self.assertThat(matcher.match(collector), Is(None))
 def test_mismatch(self):
     matcher = HasQueryCount(LessThan(2))
     collector = QueryCollector()
     collector.count = 2
     collector.queries = [("foo", "bar"), ("baaz", "quux")]
     mismatch = matcher.match(collector)
     self.assertThat(mismatch, Not(Is(None)))
     details = mismatch.get_details()
     lines = []
     for name, content in details.items():
         self.assertEqual("queries", name)
         self.assertEqual("text", content.content_type.type)
         lines.append(''.join(content.iter_text()))
     self.assertEqual(["('foo', 'bar')\n('baaz', 'quux')"],
         lines)
     self.assertEqual(
         "queries do not match: %s" % (LessThan(2).match(2).describe(),),
         mismatch.describe())