test_serializers.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from rest_framework import serializers
  2. from django.test import TestCase
  3. from misago.categories.models import Category
  4. from misago.core.serializers import Subsettable
  5. from misago.threads import testutils
  6. from misago.threads.models import Thread
  7. class SubsettableSerializerTests(TestCase):
  8. def test_create_subset_serializer(self):
  9. """classmethod subset creates new serializer"""
  10. category = Category.objects.get(slug='first-category')
  11. thread = testutils.post_thread(category=category)
  12. fields = ('id', 'title', 'replies', 'last_poster_name')
  13. serializer = TestSerializer.subset(*fields)
  14. self.assertEqual(
  15. serializer.__name__,
  16. 'TestSerializerIdTitleRepliesLastPosterNameSubset'
  17. )
  18. self.assertEqual(serializer.Meta.fields, fields)
  19. serialized_thread = serializer(thread).data
  20. self.assertEqual(serialized_thread, {
  21. 'id': thread.id,
  22. 'title': thread.title,
  23. 'replies': thread.replies,
  24. 'last_poster_name': thread.last_poster_name,
  25. })
  26. self.assertFalse(TestSerializer.Meta.fields == serializer.Meta.fields)
  27. def test_create_subset_serializer_exclude(self):
  28. """classmethod exclude creates new serializer"""
  29. category = Category.objects.get(slug='first-category')
  30. thread = testutils.post_thread(category=category)
  31. kept_fields = ('id', 'title', 'weight')
  32. removed_fields = tuple(set(TestSerializer.Meta.fields) - set(kept_fields))
  33. serializer = TestSerializer.subset_exclude(*removed_fields)
  34. self.assertEqual(serializer.__name__, 'TestSerializerIdTitleWeightSubset')
  35. self.assertEqual(serializer.Meta.fields, kept_fields)
  36. serialized_thread = serializer(thread).data
  37. self.assertEqual(serialized_thread, {
  38. 'id': thread.id,
  39. 'title': thread.title,
  40. 'weight': thread.weight,
  41. })
  42. self.assertFalse(TestSerializer.Meta.fields == serializer.Meta.fields)
  43. def test_create_subset_serializer_extend(self):
  44. """classmethod extend creates new serializer"""
  45. category = Category.objects.get(slug='first-category')
  46. thread = testutils.post_thread(category=category)
  47. added_fields = ('category',)
  48. serializer = TestSerializer.subset_extend(*added_fields)
  49. serialized_thread = serializer(thread).data
  50. self.assertEqual(serialized_thread['category'], category.pk)
  51. class TestSerializer(serializers.ModelSerializer, Subsettable):
  52. url = serializers.SerializerMethodField()
  53. class Meta:
  54. model = Thread
  55. fields = (
  56. 'id',
  57. 'title',
  58. 'replies',
  59. 'has_unapproved_posts',
  60. 'started_on',
  61. 'last_post_on',
  62. 'last_post_is_event',
  63. 'last_post',
  64. 'last_poster_name',
  65. 'is_unapproved',
  66. 'is_hidden',
  67. 'is_closed',
  68. 'weight',
  69. )