123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- from django.db import connection
- from django.test import TestCase
- from misago.threads.models import Thread
- from misago.core.pgutils import PgPartialIndex
- 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))
|