test_serializers.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 == fields)
  27. class TestSerializer(serializers.ModelSerializer, Subsettable):
  28. url = serializers.SerializerMethodField()
  29. class Meta:
  30. model = Thread
  31. fields = (
  32. 'id',
  33. 'title',
  34. 'replies',
  35. 'has_unapproved_posts',
  36. 'started_on',
  37. 'last_post_on',
  38. 'last_post_is_event',
  39. 'last_post',
  40. 'last_poster_name',
  41. 'is_unapproved',
  42. 'is_hidden',
  43. 'is_closed',
  44. 'weight',
  45. 'url',
  46. )
  47. def get_url(self, obj):
  48. return {
  49. 'index': obj.get_absolute_url(),
  50. 'new_post': obj.get_new_post_url(),
  51. 'last_post': obj.get_last_post_url(),
  52. 'unapproved_post': obj.get_unapproved_post_url(),
  53. 'last_poster': self.get_last_poster_url(obj),
  54. }