|
9 | 9 | from unittest import TestCase |
10 | 10 |
|
11 | 11 | from rest_framework import fields |
| 12 | +from rest_framework.serializers import Serializer |
12 | 13 |
|
13 | 14 | from rest_framework_dataclasses.serializers import DataclassSerializer |
14 | 15 | from rest_framework_dataclasses.types import Literal |
@@ -268,3 +269,59 @@ class ObscureFeaturesTest(TestCase, FunctionalTestMixin): |
268 | 269 |
|
269 | 270 | def setUp(self): |
270 | 271 | self.instance.name = 'Bob' |
| 272 | + |
| 273 | +# Testcase 5 (source='*') |
| 274 | + |
| 275 | + |
| 276 | +@dataclasses.dataclass |
| 277 | +class PersonPet: |
| 278 | + name: str |
| 279 | + pet: Pet |
| 280 | + |
| 281 | + |
| 282 | +class PersonPetEmbeddedDataclassSerializer(DataclassSerializer): |
| 283 | + class PetSerializer(DataclassSerializer): |
| 284 | + class Meta: |
| 285 | + dataclass = Pet |
| 286 | + fields = ['name', 'owner_name', 'animal'] |
| 287 | + |
| 288 | + name = fields.CharField(source='pet.name') |
| 289 | + animal = fields.CharField(source='pet.animal') |
| 290 | + owner_name = fields.CharField(source='name') |
| 291 | + |
| 292 | + class Meta: |
| 293 | + dataclass = PersonPet |
| 294 | + fields = ['name', 'pet'] |
| 295 | + |
| 296 | + name = fields.CharField() |
| 297 | + pet = PetSerializer(source='*') |
| 298 | + |
| 299 | + |
| 300 | +class PersonPetEmbeddedDefaultSerializer(DataclassSerializer): |
| 301 | + class PetSerializer(Serializer): |
| 302 | + class Meta: |
| 303 | + dataclass = Pet |
| 304 | + fields = ['name', 'owner_name', 'animal'] |
| 305 | + |
| 306 | + name = fields.CharField(source='pet.name') |
| 307 | + animal = fields.CharField(source='pet.animal') |
| 308 | + owner_name = fields.CharField(source='name') |
| 309 | + |
| 310 | + class Meta: |
| 311 | + dataclass = PersonPet |
| 312 | + fields = ['name', 'pet'] |
| 313 | + |
| 314 | + name = fields.CharField() |
| 315 | + pet = PetSerializer(source='*') |
| 316 | + |
| 317 | + |
| 318 | +class SourceStarDataclassTest(TestCase, FunctionalTestMixin): |
| 319 | + serializer = PersonPetEmbeddedDataclassSerializer |
| 320 | + instance = PersonPet(name='Milo', pet=Pet(name='Katsu', animal='cat')) |
| 321 | + representation = {'name': 'Milo', 'pet': {'name': 'Katsu', 'animal': 'cat', 'owner_name': 'Milo'}} |
| 322 | + |
| 323 | + |
| 324 | +class SourceStarDefaultTest(TestCase, FunctionalTestMixin): |
| 325 | + serializer = PersonPetEmbeddedDefaultSerializer |
| 326 | + instance = PersonPet(name='Milo', pet=Pet(name='Katsu', animal='cat')) |
| 327 | + representation = {'name': 'Milo', 'pet': {'name': 'Katsu', 'animal': 'cat', 'owner_name': 'Milo'}} |
0 commit comments