Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

munger_tests.py 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from django.test import TestCase
  2. from oscar.apps.search import facets
  3. FACET_COUNTS = {
  4. u'dates': {},
  5. u'fields': {
  6. 'category': [('Fiction', 12), ('Horror', 6), ('Comedy', 3)],
  7. 'product_class': [('Book', 18), ('DVD', 3)],
  8. 'rating': [],
  9. },
  10. u'queries': {
  11. u'price_exact:[0 TO 20]': 15,
  12. u'price_exact:[20 TO 40]': 5,
  13. u'price_exact:[40 TO 60]': 1,
  14. u'price_exact:[60 TO *]': 0,
  15. }
  16. }
  17. FACET_COUNTS_WITH_PRICE_RANGE_SELECTED = {
  18. u'dates': {},
  19. u'fields': {
  20. 'category': [('Fiction', 12), ('Horror', 6), ('Comedy', 3)],
  21. 'product_class': [('Book', 18), ('DVD', 3)],
  22. 'rating': [],
  23. },
  24. u'queries': {
  25. u'price_exact:[0 TO 20]': 0,
  26. u'price_exact:[20 TO 40]': 21,
  27. u'price_exact:[40 TO 60]': 0,
  28. u'price_exact:[60 TO *]': 0,
  29. }
  30. }
  31. class TestFacetMunger(TestCase):
  32. def test_with_no_facets_selected(self):
  33. munger = facets.FacetMunger(
  34. path='/search?q=test',
  35. selected_multi_facets={},
  36. facet_counts=FACET_COUNTS)
  37. data = munger.facet_data()
  38. self.assertTrue('category' in data)
  39. self.assertEqual(3, len(data['category']['results']))
  40. # Check a sample facet dict has the right keys
  41. datum = data['category']['results'][0]
  42. for key in ('count', 'disabled', 'name', 'select_url',
  43. 'selected', 'show_count'):
  44. self.assertTrue(key in datum)
  45. self.assertEqual(datum['count'], 12)
  46. self.assertEqual(datum['name'], 'Fiction')
  47. self.assertFalse(datum['selected'])
  48. def test_pagination_params_are_reset(self):
  49. munger = facets.FacetMunger(
  50. path='/search?q=test&page=2',
  51. selected_multi_facets={},
  52. facet_counts=FACET_COUNTS)
  53. data = munger.facet_data()
  54. # Check a sample facet dict has the right keys
  55. for facet_data in data.values():
  56. for result in facet_data['results']:
  57. self.assertTrue('page' not in result['select_url'])
  58. def test_with_price_facets_selected(self):
  59. munger = facets.FacetMunger(
  60. path='/search?q=test&selected_facets=price_exact%3A%5B20+TO+40%5D',
  61. selected_multi_facets={'price_exact': [u'[20 TO 40]']},
  62. facet_counts=FACET_COUNTS_WITH_PRICE_RANGE_SELECTED)
  63. data = munger.facet_data()
  64. self.assertTrue('price_range' in data)
  65. self.assertEqual(4, len(data['price_range']['results']))
  66. # Check a sample facet dict has the right keys
  67. datum = data['price_range']['results'][1]
  68. for key in ('count', 'disabled', 'name', 'deselect_url',
  69. 'selected', 'show_count'):
  70. self.assertTrue(key in datum)
  71. self.assertEqual(datum['count'], 21)
  72. self.assertTrue(datum['selected'])