Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

test_munger.py 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from django.test import TestCase
  2. from django.test.utils import override_settings
  3. from django.utils.translation import gettext_lazy as _
  4. from oscar.apps.search import facets
  5. FACET_COUNTS = {
  6. 'dates': {},
  7. 'fields': {
  8. 'category': [('Fiction', 12), ('Horror', 6), ('Comedy', 3)],
  9. 'product_class': [('Book', 18), ('DVD', 3)],
  10. 'rating': [],
  11. },
  12. 'queries': {
  13. 'price_exact:[0 TO 20]': 15,
  14. 'price_exact:[20 TO 40]': 5,
  15. 'price_exact:[40 TO 60]': 1,
  16. 'price_exact:[60 TO *]': 0,
  17. }
  18. }
  19. FACET_COUNTS_WITH_PRICE_RANGE_SELECTED = {
  20. 'dates': {},
  21. 'fields': {
  22. 'category': [('Fiction', 12), ('Horror', 6), ('Comedy', 3)],
  23. 'product_class': [('Book', 18), ('DVD', 3)],
  24. 'rating': [],
  25. },
  26. 'queries': {
  27. 'price_exact:[0 TO 20]': 0,
  28. 'price_exact:[20 TO 40]': 21,
  29. 'price_exact:[40 TO 60]': 0,
  30. 'price_exact:[60 TO *]': 0,
  31. }
  32. }
  33. SEARCH_FACETS = {
  34. 'fields': {
  35. 'product_class': {'name': _('Type'), 'field': 'product_class'},
  36. 'rating': {'name': _('Rating'), 'field': 'rating'},
  37. 'category': {'name': _('Category'), 'field': 'category'},
  38. },
  39. 'queries': {
  40. 'price_range': {
  41. 'name': _('Price range'),
  42. 'field': 'price',
  43. 'queries': [
  44. (_('0 to 20'), '[0 TO 20]'),
  45. (_('20 to 40'), '[20 TO 40]'),
  46. (_('40 to 60'), '[40 TO 60]'),
  47. (_('60+'), '[60 TO *]'),
  48. ]
  49. },
  50. },
  51. }
  52. @override_settings(OSCAR_SEARCH_FACETS=SEARCH_FACETS)
  53. class TestFacetMunger(TestCase):
  54. def test_with_no_facets_selected(self):
  55. munger = facets.FacetMunger(
  56. path='/search?q=test',
  57. selected_multi_facets={},
  58. facet_counts=FACET_COUNTS)
  59. data = munger.facet_data()
  60. self.assertTrue('category' in data)
  61. self.assertEqual(3, len(data['category']['results']))
  62. # Check a sample facet dict has the right keys
  63. datum = data['category']['results'][0]
  64. for key in ('count', 'disabled', 'name', 'select_url',
  65. 'selected', 'show_count'):
  66. self.assertTrue(key in datum)
  67. self.assertEqual(datum['count'], 12)
  68. self.assertEqual(datum['name'], 'Fiction')
  69. self.assertFalse(datum['selected'])
  70. def test_pagination_params_are_reset(self):
  71. munger = facets.FacetMunger(
  72. path='/search?q=test&page=2',
  73. selected_multi_facets={},
  74. facet_counts=FACET_COUNTS)
  75. data = munger.facet_data()
  76. # Check a sample facet dict has the right keys
  77. for facet_data in data.values():
  78. for result in facet_data['results']:
  79. self.assertTrue('page' not in result['select_url'])
  80. def test_with_price_facets_selected(self):
  81. munger = facets.FacetMunger(
  82. path='/search?q=test&selected_facets=price_exact%3A%5B20+TO+40%5D',
  83. selected_multi_facets={'price_exact': ['[20 TO 40]']},
  84. facet_counts=FACET_COUNTS_WITH_PRICE_RANGE_SELECTED)
  85. data = munger.facet_data()
  86. self.assertTrue('price_range' in data)
  87. self.assertEqual(4, len(data['price_range']['results']))
  88. # Check a sample facet dict has the right keys
  89. datum = data['price_range']['results'][1]
  90. for key in ('count', 'disabled', 'name', 'deselect_url',
  91. 'selected', 'show_count'):
  92. self.assertTrue(key in datum)
  93. self.assertEqual(datum['count'], 21)
  94. self.assertTrue(datum['selected'])