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.

review_tests.py 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from random import randint
  2. from sys import maxint
  3. from django.test import TestCase
  4. from django.core.exceptions import ValidationError
  5. from oscar.core.compat import get_user_model
  6. from django.contrib.auth.models import AnonymousUser
  7. from django.db import IntegrityError
  8. from oscar.apps.catalogue.reviews.models import ProductReview, Vote
  9. from oscar.test.factories import create_product
  10. User = get_user_model()
  11. class ProductReviewTests(TestCase):
  12. def setUp(self):
  13. username = str(randint(0, maxint))
  14. self.user = User.objects.create_user(username, '%s@users.com'%username, '%spass123'%username)
  15. self.anon_user = AnonymousUser()
  16. self.product = create_product()
  17. self.review = ProductReview.objects.create(product=self.product,
  18. title="Dummy review",
  19. score=3,
  20. user=self.user)
  21. def test_top_level_reviews_must_have_titles_and_scores(self):
  22. self.assertRaises(ValidationError, ProductReview.objects.create, product=self.product,
  23. user=self.user)
  24. def test_top_level_anonymous_reviews_must_have_names_and_emails(self):
  25. self.assertRaises(ValidationError, ProductReview.objects.create, product=self.product,
  26. user=None, title="Anonymous review", score=3)
  27. class TopLevelProductReviewVoteTests(ProductReviewTests):
  28. def test_try_vote_without_login(self):
  29. self.assertRaises(ValueError, Vote.objects.create, review=self.review, delta=-1, user=self.anon_user)
  30. def test_try_vote_more_than_once(self):
  31. vote1 = Vote.objects.create(review=self.review, user=self.user, delta=1)
  32. self.assertTrue(vote1)
  33. self.assertRaises(IntegrityError, Vote.objects.create, review=self.review, delta=-1, user=self.user)