test_pgpartialindex.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from django.db import connection
  2. from django.test import TestCase
  3. from misago.core.pgutils import PgPartialIndex
  4. from misago.threads.models import Thread
  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"], name="test_partial", where={"has_events": True}
  21. ).create_sql(Thread, editor)
  22. self.assertTrue(sql.endswith('WHERE "has_events" = true'))
  23. sql = PgPartialIndex(
  24. fields=["has_events"], name="test_partial", where={"has_events": False}
  25. ).create_sql(Thread, editor)
  26. self.assertTrue(sql.endswith('WHERE "has_events" = false'))
  27. sql = PgPartialIndex(
  28. fields=["has_events"], name="test_partial", where={"has_events": 42}
  29. ).create_sql(Thread, editor)
  30. self.assertTrue(sql.endswith('WHERE "has_events" = 42'))
  31. sql = PgPartialIndex(
  32. fields=["has_events"], name="test_partial", where={"has_events__lt": 42}
  33. ).create_sql(Thread, editor)
  34. self.assertTrue(sql.endswith('WHERE "has_events" < 42'))
  35. sql = PgPartialIndex(
  36. fields=["has_events"], name="test_partial", where={"has_events__gt": 42}
  37. ).create_sql(Thread, editor)
  38. self.assertTrue(sql.endswith('WHERE "has_events" > 42'))
  39. sql = PgPartialIndex(
  40. fields=["has_events"],
  41. name="test_partial",
  42. where={"has_events__lte": 42},
  43. ).create_sql(Thread, editor)
  44. self.assertTrue(sql.endswith('WHERE "has_events" <= 42'))
  45. sql = PgPartialIndex(
  46. fields=["has_events"],
  47. name="test_partial",
  48. where={"has_events__gte": 42},
  49. ).create_sql(Thread, editor)
  50. self.assertTrue(sql.endswith('WHERE "has_events" >= 42'))
  51. def test_multiple_where_clauses(self):
  52. """where clause with multiple conditions generates correctly"""
  53. with connection.schema_editor() as editor:
  54. sql = PgPartialIndex(
  55. fields=["has_events"],
  56. name="test_partial",
  57. where={"has_events__gte": 42, "is_hidden": True},
  58. ).create_sql(Thread, editor)
  59. self.assertTrue(
  60. sql.endswith('WHERE "has_events" >= 42 AND "is_hidden" = true')
  61. )
  62. def test_set_name_with_model(self):
  63. """valid index name is autogenerated"""
  64. index = PgPartialIndex(
  65. fields=["has_events", "is_hidden"], where={"has_events": True}
  66. )
  67. index.set_name_with_model(Thread)
  68. self.assertEqual(index.name, "misago_thre_has_eve_1b05b8_part")
  69. index = PgPartialIndex(
  70. fields=["has_events", "is_hidden", "is_closed"], where={"has_events": True}
  71. )
  72. index.set_name_with_model(Thread)
  73. self.assertEqual(index.name, "misago_thre_has_eve_eaab5e_part")
  74. index = PgPartialIndex(
  75. fields=["has_events", "is_hidden", "is_closed"],
  76. where={"has_events": True, "is_closed": False},
  77. )
  78. index.set_name_with_model(Thread)
  79. self.assertEqual(index.name, "misago_thre_has_eve_e738fe_part")
  80. def test_index_repr(self):
  81. """index creates descriptive representation string"""
  82. index = PgPartialIndex(fields=["has_events"], where={"has_events": True})
  83. self.assertEqual(
  84. repr(index),
  85. "<PgPartialIndex: fields='has_events', where='has_events=True'>",
  86. )
  87. index = PgPartialIndex(
  88. fields=["has_events", "is_hidden"], where={"has_events": True}
  89. )
  90. self.assertIn("fields='has_events, is_hidden',", repr(index))
  91. self.assertIn(", where='has_events=True'", repr(index))
  92. index = PgPartialIndex(
  93. fields=["has_events", "is_hidden", "is_closed"],
  94. where={"has_events": True, "is_closed": False, "replies__gte": 5},
  95. )
  96. self.assertIn("fields='has_events, is_hidden, is_closed',", repr(index))
  97. self.assertIn(
  98. ", where='has_events=True, is_closed=False, replies__gte=5'", repr(index)
  99. )