test_serializers.py 2.9 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 MutableFields
  5. from misago.threads import testutils
  6. from misago.threads.models import Thread
  7. class MutableFieldsSerializerTests(TestCase):
  8. def test_subset_fields(self):
  9. """classmethod subset_fields 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(*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_exclude_fields(self):
  28. """classmethod exclude_fields 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.exclude_fields(*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_extend_fields(self):
  44. """classmethod extend_fields 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.extend_fields(*added_fields)
  49. serialized_thread = serializer(thread).data
  50. self.assertEqual(serialized_thread['category'], category.pk)
  51. class TestSerializer(serializers.ModelSerializer, MutableFields):
  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. )