test_serializers.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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(serializer.__name__, 'TestSerializerIdTitleRepliesLastPosterNameSubset')
  15. self.assertEqual(serializer.Meta.fields, fields)
  16. serialized_thread = serializer(thread).data
  17. self.assertEqual(
  18. serialized_thread, {
  19. 'id': thread.id,
  20. 'title': thread.title,
  21. 'replies': thread.replies,
  22. 'last_poster_name': thread.last_poster_name,
  23. }
  24. )
  25. self.assertFalse(TestSerializer.Meta.fields == serializer.Meta.fields)
  26. def test_exclude_fields(self):
  27. """classmethod exclude_fields creates new serializer"""
  28. category = Category.objects.get(slug='first-category')
  29. thread = testutils.post_thread(category=category)
  30. kept_fields = ('id', 'title', 'weight')
  31. removed_fields = tuple(set(TestSerializer.Meta.fields) - set(kept_fields))
  32. serializer = TestSerializer.exclude_fields(*removed_fields)
  33. self.assertEqual(serializer.__name__, 'TestSerializerIdTitleWeightSubset')
  34. self.assertEqual(serializer.Meta.fields, kept_fields)
  35. serialized_thread = serializer(thread).data
  36. self.assertEqual(
  37. serialized_thread, {
  38. 'id': thread.id,
  39. 'title': thread.title,
  40. 'weight': thread.weight,
  41. }
  42. )
  43. self.assertFalse(TestSerializer.Meta.fields == serializer.Meta.fields)
  44. def test_extend_fields(self):
  45. """classmethod extend_fields creates new serializer"""
  46. category = Category.objects.get(slug='first-category')
  47. thread = testutils.post_thread(category=category)
  48. added_fields = ('category', )
  49. serializer = TestSerializer.extend_fields(*added_fields)
  50. serialized_thread = serializer(thread).data
  51. self.assertEqual(serialized_thread['category'], category.pk)
  52. class TestSerializer(serializers.ModelSerializer, MutableFields):
  53. url = serializers.SerializerMethodField()
  54. class Meta:
  55. model = Thread
  56. fields = (
  57. 'id', 'title', 'replies', 'has_unapproved_posts', 'started_on', 'last_post_on',
  58. 'last_post_is_event', 'last_post', 'last_poster_name', 'is_unapproved', 'is_hidden',
  59. 'is_closed', 'weight',
  60. )