123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- from django.db import connection
- from django.test import TestCase
- from misago.core.pgutils import PgPartialIndex
- from misago.threads.models import Thread
- class PgPartialIndexTests(TestCase):
- def test_multiple_fields(self):
- """multiple fields are supported"""
- with connection.schema_editor() as editor:
- sql = PgPartialIndex(
- fields=["has_events", "is_hidden"],
- name="test_partial",
- where={"has_events": True},
- ).create_sql(Thread, editor)
- self.assertIn('CREATE INDEX "test_partial" ON "misago_threads_thread"', sql)
- self.assertIn('ON "misago_threads_thread" ("has_events", "is_hidden")', sql)
- def test_where_clauses(self):
- """where clauses generate correctly"""
- with connection.schema_editor() as editor:
- sql = PgPartialIndex(
- fields=["has_events"], name="test_partial", where={"has_events": True}
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" = true'))
- sql = PgPartialIndex(
- fields=["has_events"], name="test_partial", where={"has_events": False}
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" = false'))
- sql = PgPartialIndex(
- fields=["has_events"], name="test_partial", where={"has_events": 42}
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" = 42'))
- sql = PgPartialIndex(
- fields=["has_events"], name="test_partial", where={"has_events__lt": 42}
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" < 42'))
- sql = PgPartialIndex(
- fields=["has_events"], name="test_partial", where={"has_events__gt": 42}
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" > 42'))
- sql = PgPartialIndex(
- fields=["has_events"],
- name="test_partial",
- where={"has_events__lte": 42},
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" <= 42'))
- sql = PgPartialIndex(
- fields=["has_events"],
- name="test_partial",
- where={"has_events__gte": 42},
- ).create_sql(Thread, editor)
- self.assertTrue(sql.endswith('WHERE "has_events" >= 42'))
- def test_multiple_where_clauses(self):
- """where clause with multiple conditions generates correctly"""
- with connection.schema_editor() as editor:
- sql = PgPartialIndex(
- fields=["has_events"],
- name="test_partial",
- where={"has_events__gte": 42, "is_hidden": True},
- ).create_sql(Thread, editor)
- self.assertTrue(
- sql.endswith('WHERE "has_events" >= 42 AND "is_hidden" = true')
- )
- def test_set_name_with_model(self):
- """valid index name is autogenerated"""
- index = PgPartialIndex(
- fields=["has_events", "is_hidden"], where={"has_events": True}
- )
- index.set_name_with_model(Thread)
- self.assertEqual(index.name, "misago_thre_has_eve_1b05b8_part")
- index = PgPartialIndex(
- fields=["has_events", "is_hidden", "is_closed"], where={"has_events": True}
- )
- index.set_name_with_model(Thread)
- self.assertEqual(index.name, "misago_thre_has_eve_eaab5e_part")
- index = PgPartialIndex(
- fields=["has_events", "is_hidden", "is_closed"],
- where={"has_events": True, "is_closed": False},
- )
- index.set_name_with_model(Thread)
- self.assertEqual(index.name, "misago_thre_has_eve_e738fe_part")
- def test_index_repr(self):
- """index creates descriptive representation string"""
- index = PgPartialIndex(fields=["has_events"], where={"has_events": True})
- self.assertEqual(
- repr(index),
- "<PgPartialIndex: fields='has_events', where='has_events=True'>",
- )
- index = PgPartialIndex(
- fields=["has_events", "is_hidden"], where={"has_events": True}
- )
- self.assertIn("fields='has_events, is_hidden',", repr(index))
- self.assertIn(", where='has_events=True'", repr(index))
- index = PgPartialIndex(
- fields=["has_events", "is_hidden", "is_closed"],
- where={"has_events": True, "is_closed": False, "replies__gte": 5},
- )
- self.assertIn("fields='has_events, is_hidden, is_closed',", repr(index))
- self.assertIn(
- ", where='has_events=True, is_closed=False, replies__gte=5'", repr(index)
- )
|