test_pgpartialindex.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from django.db import connection
  2. from django.test import TestCase
  3. from misago.threads.models import Thread
  4. from misago.core.pgutils import PgPartialIndex
  5. class PgPartialIndexTests(TestCase):
  6. def test_multiple_fields(self):
  7. """multiple fields are supported"""
  8. with connection.schema_editor() as editor:
  9. sql = PgPartialIndex(
  10. fields=['has_events', 'is_hidden'],
  11. name='test_partial',
  12. where={'has_events': True},
  13. ).create_sql(Thread, editor)
  14. self.assertIn('CREATE INDEX "test_partial" ON "misago_threads_thread"', sql)
  15. self.assertIn('ON "misago_threads_thread" ("has_events", "is_hidden")', sql)
  16. def test_where_clauses(self):
  17. """where clauses generate correctly"""
  18. with connection.schema_editor() as editor:
  19. sql = PgPartialIndex(
  20. fields=['has_events'],
  21. name='test_partial',
  22. where={'has_events': True},
  23. ).create_sql(Thread, editor)
  24. self.assertTrue(sql.endswith('WHERE "has_events" = true'))
  25. sql = PgPartialIndex(
  26. fields=['has_events'],
  27. name='test_partial',
  28. where={'has_events': False},
  29. ).create_sql(Thread, editor)
  30. self.assertTrue(sql.endswith('WHERE "has_events" = false'))
  31. sql = PgPartialIndex(
  32. fields=['has_events'],
  33. name='test_partial',
  34. where={'has_events': 42},
  35. ).create_sql(Thread, editor)
  36. self.assertTrue(sql.endswith('WHERE "has_events" = 42'))
  37. sql = PgPartialIndex(
  38. fields=['has_events'],
  39. name='test_partial',
  40. where={'has_events__lt': 42},
  41. ).create_sql(Thread, editor)
  42. self.assertTrue(sql.endswith('WHERE "has_events" < 42'))
  43. sql = PgPartialIndex(
  44. fields=['has_events'],
  45. name='test_partial',
  46. where={'has_events__gt': 42},
  47. ).create_sql(Thread, editor)
  48. self.assertTrue(sql.endswith('WHERE "has_events" > 42'))
  49. sql = PgPartialIndex(
  50. fields=['has_events'],
  51. name='test_partial',
  52. where={'has_events__lte': 42},
  53. ).create_sql(Thread, editor)
  54. self.assertTrue(sql.endswith('WHERE "has_events" <= 42'))
  55. sql = PgPartialIndex(
  56. fields=['has_events'],
  57. name='test_partial',
  58. where={'has_events__gte': 42},
  59. ).create_sql(Thread, editor)
  60. self.assertTrue(sql.endswith('WHERE "has_events" >= 42'))
  61. def test_multiple_where_clauses(self):
  62. """where clause with multiple conditions generates correctly"""
  63. with connection.schema_editor() as editor:
  64. sql = PgPartialIndex(
  65. fields=['has_events'],
  66. name='test_partial',
  67. where={
  68. 'has_events__gte': 42,
  69. 'is_hidden': True,
  70. },
  71. ).create_sql(Thread, editor)
  72. self.assertTrue(sql.endswith('WHERE "has_events" >= 42 AND "is_hidden" = true'))
  73. def test_set_name_with_model(self):
  74. """valid index name is autogenerated"""
  75. index = PgPartialIndex(
  76. fields=['has_events', 'is_hidden'],
  77. where={'has_events': True},
  78. )
  79. index.set_name_with_model(Thread)
  80. self.assertEqual(index.name, 'misago_thre_has_eve_1b05b8_part')
  81. index = PgPartialIndex(
  82. fields=['has_events', 'is_hidden', 'is_closed'],
  83. where={'has_events': True},
  84. )
  85. index.set_name_with_model(Thread)
  86. self.assertEqual(index.name, 'misago_thre_has_eve_eaab5e_part')
  87. index = PgPartialIndex(
  88. fields=['has_events', 'is_hidden', 'is_closed'],
  89. where={
  90. 'has_events': True,
  91. 'is_closed': False,
  92. },
  93. )
  94. index.set_name_with_model(Thread)
  95. self.assertEqual(index.name, 'misago_thre_has_eve_e738fe_part')
  96. def test_index_repr(self):
  97. """index creates descriptive representation string"""
  98. index = PgPartialIndex(
  99. fields=['has_events'],
  100. where={'has_events': True},
  101. )
  102. self.assertEqual(repr(index), "<PgPartialIndex: fields='has_events', where='has_events=True'>")
  103. index = PgPartialIndex(
  104. fields=['has_events', 'is_hidden'],
  105. where={'has_events': True},
  106. )
  107. self.assertIn("fields='has_events, is_hidden',", repr(index))
  108. self.assertIn(", where='has_events=True'", repr(index))
  109. index = PgPartialIndex(
  110. fields=['has_events', 'is_hidden', 'is_closed'],
  111. where={
  112. 'has_events': True,
  113. 'is_closed': False,
  114. 'replies__gte': 5,
  115. },
  116. )
  117. self.assertIn("fields='has_events, is_hidden, is_closed',", repr(index))
  118. self.assertIn(", where='has_events=True, is_closed=False, replies__gte=5'", repr(index))