예제 #1
0
    def test_nested_field_include(self):
        pet = Pet(name='Garfield',
                  toys='paper ball, string',
                  species='cat',
                  owner=Person(name='Fred',
                               employer=Company(name='McDonalds')))

        expected_serializer_data = {
            'owner': {
                'employer': {
                    'name': 'McDonalds'
                }
            }
        }

        serializer = PetSerializer(pet,
                                   expand=['owner.employer'],
                                   fields=['owner.employer.name'])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(
            pet,
            expand=(field for field in ('owner.employer', )),
            fields=(field for field in ('owner.employer.name', )))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #2
0
    def test_basic_expand(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred", hobbies="sailing"),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string",
            "species": "cat",
            "owner": {
                "name": "Fred",
                "hobbies": "sailing"
            },
            "sold_from": None,
            "diet": "",
        }

        request = MockRequest(
            query_params=MultiValueDict({"expand": ["owner"]}))
        serializer = PetSerializer(pet, context={"request": request})
        self.assertEqual(serializer.data, expected_serializer_data)
        self.assertEqual(serializer.fields["owner"].context.get("request"),
                         request)

        serializer = PetSerializer(pet,
                                   expand=(field for field in ("owner", )))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #3
0
    def test_nested_field_include(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred", employer=Company(name="McDonalds")),
        )

        expected_serializer_data = {
            "owner": {
                "employer": {
                    "name": "McDonalds"
                }
            }
        }

        serializer = PetSerializer(pet,
                                   expand=["owner.employer"],
                                   fields=["owner.employer.name"])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(
            pet,
            expand=(field for field in ("owner.employer", )),
            fields=(field for field in ("owner.employer.name", )),
        )
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #4
0
    def test_all_special_value_in_serialize(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred", employer=Company(name="McDonalds")),
        )

        class PetSerializer(FlexFieldsModelSerializer):
            owner = serializers.PrimaryKeyRelatedField(
                queryset=Person.objects.all(), allow_null=True)

            class Meta:
                model = Pet
                fields = "__all__"

        serializer = PetSerializer(
            fields=("name", "toys"),
            data={
                "name": "Garfield",
                "toys": "paper ball",
                "species": "cat",
                "owner": None,
            },
        )

        serializer.is_valid(raise_exception=True)
예제 #5
0
    def test_nested_field_omit(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred", employer=Company(name="McDonalds")),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string",
            "species": "cat",
            "owner": {
                "hobbies": "",
                "employer": {
                    "name": "McDonalds"
                }
            },
        }

        serializer = PetSerializer(
            pet,
            expand=["owner.employer"],
            omit=["owner.name", "owner.employer.public"])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(
            pet,
            expand=(field for field in ("owner.employer", )),
            omit=(field for field in ("owner.name", "owner.employer.public")),
        )
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #6
0
    def test_nested_field_omit(self):
        pet = Pet(name='Garfield',
                  toys='paper ball, string',
                  species='cat',
                  owner=Person(name='Fred',
                               employer=Company(name='McDonalds')))

        expected_serializer_data = {
            'name': 'Garfield',
            'toys': 'paper ball, string',
            'species': 'cat',
            'owner': {
                'hobbies': '',
                'employer': {
                    'name': 'McDonalds'
                }
            }
        }

        serializer = PetSerializer(
            pet,
            expand=['owner.employer'],
            omit=['owner.name', 'owner.employer.public'])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(
            pet,
            expand=(field for field in ('owner.employer', )),
            omit=(field for field in ('owner.name', 'owner.employer.public')))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #7
0
    def test_basic_field_include(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred"),
        )

        expected_serializer_data = {"name": "Garfield", "toys": "paper ball, string"}

        serializer = PetSerializer(pet, fields=["name", "toys"])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(pet, fields=(field for field in ("name", "toys")))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #8
0
    def test_expand_from_request(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred",
                         hobbies="sailing",
                         employer=Company(name="McDonalds")),
        )

        request = MockRequest(
            query_params=MultiValueDict({"expand": ["owner.employer"]}))
        serializer = PetSerializer(pet, context={"request": request})

        self.assertEqual(
            serializer.data,
            {
                "name": "Garfield",
                "toys": "paper ball, string",
                "species": "cat",
                "owner": {
                    "name": "Fred",
                    "hobbies": "sailing",
                    "employer": {
                        "public": False,
                        "name": "McDonalds"
                    },
                },
            },
        )
예제 #9
0
    def test_expand_from_request(self):
        pet = Pet(name='Garfield',
                  toys='paper ball, string',
                  species='cat',
                  owner=Person(name='Fred',
                               hobbies='sailing',
                               employer=Company(name='McDonalds')))

        request = MockRequest(
            query_params=MultiValueDict({'expand': ['owner.employer']}))
        serializer = PetSerializer(pet, context={'request': request})

        self.assertEqual(
            serializer.data, {
                'name': 'Garfield',
                'toys': 'paper ball, string',
                'species': 'cat',
                'owner': {
                    'name': 'Fred',
                    'hobbies': 'sailing',
                    'employer': {
                        'public': False,
                        'name': 'McDonalds'
                    }
                }
            })
예제 #10
0
    def test_basic_field_include(self):
        pet = Pet(name='Garfield',
                  toys='paper ball, string',
                  species='cat',
                  owner=Person(name='Fred'))

        expected_serializer_data = {
            'name': 'Garfield',
            'toys': 'paper ball, string'
        }

        serializer = PetSerializer(pet, fields=['name', 'toys'])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(pet,
                                   fields=(field
                                           for field in ('name', 'toys')))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #11
0
def test_nested_field_include():
    pet = Pet(name='Garfield',
              toys='paper ball, string',
              species='cat',
              owner=Person(name='Fred', employer=Company(name='McDonalds')))

    serializer = PetSerializer(pet,
                               expand=['owner.employer'],
                               fields=['owner.employer.name'])
    assert serializer.data == {'owner': {'employer': {'name': 'McDonalds'}}}
예제 #12
0
    def test_basic_expand(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred", hobbies="sailing"),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string",
            "species": "cat",
            "owner": {"name": "Fred", "hobbies": "sailing"},
        }

        serializer = PetSerializer(pet, expand=["owner"])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(pet, expand=(field for field in ("owner",)))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #13
0
def test_basic_field_omit():
    pet = Pet(name='Garfield',
              toys='paper ball, string',
              species='cat',
              owner=Person(name='Fred'))

    serializer = PetSerializer(pet, exclude=['species', 'owner'])
    assert serializer.data == {
        'name': 'Garfield',
        'toys': 'paper ball, string'
    }
    def test_basic_field_omit(self):
        pet = Pet(name='Garfield',
                  toys='paper ball, string',
                  species='cat',
                  owner=Person(name='Fred'))

        serializer = PetSerializer(pet, omit=['species', 'owner'])

        self.assertEqual(serializer.data, {
            'name': 'Garfield',
            'toys': 'paper ball, string'
        })
예제 #15
0
    def test_basic_expand(self):
        pet = Pet(name='Garfield',
                  toys='paper ball, string',
                  species='cat',
                  owner=Person(name='Fred', hobbies='sailing'))

        expected_serializer_data = {
            'name': 'Garfield',
            'toys': 'paper ball, string',
            'species': 'cat',
            'owner': {
                'name': 'Fred',
                'hobbies': 'sailing'
            }
        }

        serializer = PetSerializer(pet, expand=['owner'])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(pet,
                                   expand=(field for field in ('owner', )))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #16
0
    def test_basic_field_omit(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred"),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string",
            "diet": "",
            "sold_from": None,
        }

        serializer = PetSerializer(pet, omit=["species", "owner"])
        self.assertEqual(serializer.data, expected_serializer_data)

        serializer = PetSerializer(pet,
                                   omit=(field
                                         for field in ("species", "owner")))
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #17
0
    def test_fields_include_with_custom_param_name(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred"),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string"
        }

        serializer = PetSerializer(pet, only=["name", "toys"])
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #18
0
def test_expand(expand):
    pet = Pet(name='Garfield',
              toys='paper ball, string',
              species='cat',
              owner=Person(name='Fred', hobbies='sailing'))

    serializer = PetSerializer(pet, expand=[expand])
    assert serializer.data == {
        'name': 'Garfield',
        'toys': 'paper ball, string',
        'species': 'cat',
        'owner': {
            'name': 'Fred',
            'hobbies': 'sailing',
            'employer': None
        }
    }
예제 #19
0
    def test_omit_with_custom_param_name(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred"),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string",
            "diet": "",
            "sold_from": None,
        }

        serializer = PetSerializer(pet, exclude=["species", "owner"])
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #20
0
    def test_expand_with_custom_param_name(self):
        pet = Pet(
            name="Garfield",
            toys="paper ball, string",
            species="cat",
            owner=Person(name="Fred", hobbies="sailing"),
        )

        expected_serializer_data = {
            "name": "Garfield",
            "toys": "paper ball, string",
            "species": "cat",
            "owner": {
                "name": "Fred",
                "hobbies": "sailing"
            },
        }

        serializer = PetSerializer(pet, include=["owner"])
        self.assertEqual(serializer.data, expected_serializer_data)
예제 #21
0
def test_nested_field_omit():
    pet = Pet(name='Garfield',
              toys='paper ball, string',
              species='cat',
              owner=Person(name='Fred', employer=Company(name='McDonalds')))

    serializer = PetSerializer(
        pet,
        expand=['owner.employer'],
        exclude=['species', 'owner.hobbies', 'owner.employer.public'])
    assert serializer.data == {
        'name': 'Garfield',
        'toys': 'paper ball, string',
        'owner': {
            'name': 'Fred',
            'employer': {
                'name': 'McDonalds'
            }
        }
    }
예제 #22
0
def test_nested_expand(expand):
    pet = Pet(name='Garfield',
              toys='paper ball, string',
              species='cat',
              owner=Person(name='Fred',
                           hobbies='sailing',
                           employer=Company(name='McDonalds')))

    serializer = PetSerializer(pet, expand=[expand])
    assert serializer.data == {
        'name': 'Garfield',
        'toys': 'paper ball, string',
        'species': 'cat',
        'owner': {
            'name': 'Fred',
            'hobbies': 'sailing',
            'employer': {
                'public': False,
                'name': 'McDonalds'
            }
        }
    }