No Description

test_post_service_django.py 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import pytest
  2. from django.test import TestCase
  3. from django.contrib.auth import get_user_model
  4. from commu.usecases.post_service import PostService
  5. from commu.entities.user import UserRole
  6. from core.repositories.django_post_repository import DjangoPostRepository
  7. from core.repositories.django_user_repository import DjangoUserRepository
  8. User = get_user_model()
  9. class PostServiceIntegrationTest(TestCase):
  10. def setUp(self):
  11. # Use Django's repositories
  12. self.user_repo = DjangoUserRepository()
  13. self.post_repo = DjangoPostRepository()
  14. self.service = PostService(self.post_repo, self.user_repo)
  15. # Create some users using Django ORM
  16. self.admin = User.objects.create_user(username="admin", is_superuser=True, is_staff=True)
  17. self.user = User.objects.create_user(username="user", is_staff=True)
  18. self.guest = User.objects.create_user(username="guest") # Not staff or superuser
  19. def test_create_post_by_user(self):
  20. post = self.service.create_post(str(self.user.id), "Hello Django!", ["img1.png"], ["vid1.mp4"])
  21. assert post.text == "Hello Django!"
  22. assert post.images == ["img1.png"]
  23. assert post.videos == ["vid1.mp4"]
  24. def test_guest_cannot_create_post(self):
  25. with self.assertRaises(PermissionError):
  26. self.service.create_post(str(self.guest.id), "Forbidden")
  27. def test_search_posts(self):
  28. p1 = self.service.create_post(str(self.user.id), "First Django post")
  29. p2 = self.service.create_post(str(self.user.id), "Second hello world")
  30. results = self.service.search_posts("hello")
  31. assert len(results) == 1
  32. assert results[0].text == "Second hello world"
  33. def test_rate_post(self):
  34. post = self.service.create_post(str(self.user.id), "Rate me Django!")
  35. self.service.rate_post(post.id, str(self.admin.id), 5)
  36. self.service.rate_post(post.id, str(self.user.id), 4)
  37. updated_post = self.post_repo.get(post.id)
  38. assert abs(updated_post.average_rating() - 4.5) < 1e-6
  39. def test_guest_cannot_rate_post(self):
  40. post = self.service.create_post(str(self.user.id), "No guest rate")
  41. with self.assertRaises(PermissionError):
  42. self.service.rate_post(post.id, str(self.guest.id), 2)
  43. def test_rating_bounds(self):
  44. post = self.service.create_post(str(self.user.id), "Bounds Django")
  45. with self.assertRaises(ValueError):
  46. self.service.rate_post(post.id, str(self.admin.id), 0)
  47. with self.assertRaises(ValueError):
  48. self.service.rate_post(post.id, str(self.admin.id), 6)