From 6880725615532f74a02ea405effca514b44dc6d1 Mon Sep 17 00:00:00 2001 From: Eugene Savchenko Date: Fri, 3 Aug 2018 23:21:23 +0300 Subject: [PATCH] Added tests for meta_fields, meta_exclude and meta_preset --- tests/test_serializer_customizing_meta.py | 104 ++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 tests/test_serializer_customizing_meta.py diff --git a/tests/test_serializer_customizing_meta.py b/tests/test_serializer_customizing_meta.py new file mode 100644 index 000000000..49db93258 --- /dev/null +++ b/tests/test_serializer_customizing_meta.py @@ -0,0 +1,104 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from django.db import models +from django.test import TestCase + +from rest_framework import serializers + + +class Product(models.Model): + name = models.CharField(max_length=10) + + +class Item(models.Model): + f1 = models.CharField(max_length=10) + f2 = models.CharField(max_length=10000) + user = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='items') + + +class TestCustomizingMetaOptions(TestCase): + def test_meta_fields(self): + class ItemSerializer(serializers.ModelSerializer): + class Meta: + model = Item + fields = '__all__' + + class ProductSerializer(serializers.ModelSerializer): + items = ItemSerializer(many=True, meta_fields=['f1']) + + class Meta: + model = Product + fields = '__all__' + + ShortenProductSerializer = ProductSerializer.meta_fields('id', 'name') + + self.assertEqual(len(ProductSerializer().fields['items'].child.get_fields()), 1) + self.assertEqual(len(ShortenProductSerializer().get_fields()), 2) + + def test_meta_fields_all(self): + class ItemSerializer(serializers.ModelSerializer): + class Meta: + model = Item + fields = ['f1'] + + serializer = ItemSerializer(meta_fields='__all__') + self.assertEqual(len(serializer.get_fields()), 4) + + def test_meta_exclude(self): + class ItemSerializer(serializers.ModelSerializer): + class Meta: + model = Item + fields = '__all__' + + class ProductSerializer(serializers.ModelSerializer): + items = ItemSerializer(many=True, meta_exclude=['id', 'f2', 'user']) + + class Meta: + model = Product + fields = '__all__' + + ShortenProductSerializer = ProductSerializer.meta_exclude('items') + + self.assertEqual(len(ProductSerializer().fields['items'].child.get_fields()), 1) + self.assertEqual(len(ShortenProductSerializer().get_fields()), 2) + + def test_meta_exclude_from_defined_fields(self): + class ItemSerializer(serializers.ModelSerializer): + class Meta: + model = Item + fields = ['user', 'f1', 'f2'] + + serializer = ItemSerializer(meta_exclude=['f2']) + self.assertEqual(len(serializer.get_fields()), 2) + + def test_meta_preset(self): + class ItemSerializer(serializers.ModelSerializer): + class Meta: + model = Item + fields = '__all__' + presets = { + 'short': { + 'fields': ['f1'] + } + } + + class ProductSerializer(serializers.ModelSerializer): + items = ItemSerializer(many=True, meta_preset='short') + + class Meta: + model = Product + fields = '__all__' + presets = { + 'short': { + 'fields': ['id', 'name'] + }, + 'light': { + 'exclude': ['items'] + } + } + + ShortenProductSerializer = ProductSerializer.meta_preset('short') + + self.assertEqual(len(ProductSerializer().fields['items'].child.get_fields()), 1) + self.assertEqual(len(ShortenProductSerializer().get_fields()), 2)