You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

category_tests.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from django.core.urlresolvers import reverse
  2. from django.test import TestCase
  3. from django_dynamic_fixture import G
  4. from oscar.test.testcases import WebTestCase
  5. from oscar.core.compat import get_user_model
  6. from oscar.apps.catalogue.models import Category
  7. from oscar.apps.dashboard.catalogue.forms import CategoryForm
  8. from oscar.apps.catalogue.categories import create_from_breadcrumbs
  9. User = get_user_model()
  10. def create_test_category_tree():
  11. trail = 'A > B > C'
  12. create_from_breadcrumbs(trail)
  13. trail = 'A > B > D'
  14. create_from_breadcrumbs(trail)
  15. trail = 'A > E > F'
  16. create_from_breadcrumbs(trail)
  17. trail = 'A > E > G'
  18. create_from_breadcrumbs(trail)
  19. class TestCategoryForm(TestCase):
  20. def setUp(self):
  21. Category.objects.all().delete()
  22. def test_conflicting_slugs_recognized(self):
  23. create_test_category_tree()
  24. f = CategoryForm()
  25. #root categories
  26. ref_node_pk = Category.objects.get(name='A').pk
  27. conflicting = f.is_slug_conflicting('A', ref_node_pk, 'right')
  28. self.assertEqual(conflicting, True)
  29. conflicting = f.is_slug_conflicting('A', None, 'left')
  30. self.assertEqual(conflicting, True)
  31. conflicting = f.is_slug_conflicting('A', None, 'first-child')
  32. self.assertEqual(conflicting, True)
  33. conflicting = f.is_slug_conflicting('B', None, 'left')
  34. self.assertEqual(conflicting, False)
  35. #subcategories
  36. ref_node_pk = Category.objects.get(name='C').pk
  37. conflicting = f.is_slug_conflicting('D', ref_node_pk, 'left')
  38. self.assertEqual(conflicting, True)
  39. ref_node_pk = Category.objects.get(name='B').pk
  40. conflicting = f.is_slug_conflicting('D', ref_node_pk, 'first-child')
  41. self.assertEqual(conflicting, True)
  42. ref_node_pk = Category.objects.get(name='F').pk
  43. conflicting = f.is_slug_conflicting('D', ref_node_pk, 'left')
  44. self.assertEqual(conflicting, False)
  45. ref_node_pk = Category.objects.get(name='E').pk
  46. conflicting = f.is_slug_conflicting('D', ref_node_pk, 'first-child')
  47. self.assertEqual(conflicting, False)
  48. #updating
  49. f.instance = Category.objects.get(name='E')
  50. ref_node_pk = Category.objects.get(name='A').pk
  51. conflicting = f.is_slug_conflicting('E', ref_node_pk, 'first-child')
  52. self.assertEqual(conflicting, False)
  53. class TestCategoryDashboard(WebTestCase):
  54. def setUp(self):
  55. self.staff = G(User, is_staff=True)
  56. create_from_breadcrumbs('A > B > C')
  57. def test_redirects_to_main_dashboard_after_creating_top_level_category(self):
  58. a = Category.objects.get(name='A')
  59. category_add = self.app.get(reverse('dashboard:catalogue-category-create'),
  60. user=self.staff)
  61. form = category_add.form
  62. form['name'] = 'Top-level category'
  63. form['_position'] = 'right'
  64. form['_ref_node_id'] = a.id
  65. response = form.submit()
  66. self.assertRedirects(response,
  67. reverse('dashboard:catalogue-category-list'))
  68. def test_redirects_to_parent_list_after_creating_child_category(self):
  69. b = Category.objects.get(name='B')
  70. c = Category.objects.get(name='C')
  71. category_add = self.app.get(reverse('dashboard:catalogue-category-create'),
  72. user=self.staff)
  73. form = category_add.form
  74. form['name'] = 'Child category'
  75. form['_position'] = 'left'
  76. form['_ref_node_id'] = c.id
  77. response = form.submit()
  78. self.assertRedirects(response,
  79. reverse('dashboard:catalogue-category-detail-list',
  80. args=(b.pk,)))
  81. def test_handles_invalid_form_gracefully(self):
  82. dashboard_index = self.app.get(reverse('dashboard:index'),
  83. user=self.staff)
  84. category_index = dashboard_index.click("Categories")
  85. category_add = category_index.click("Create new category")
  86. response = category_add.form.submit()
  87. self.assertEqual(200, response.status_code)