|
23 | 23 | from rest_framework.views import APIView
|
24 | 24 | from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
25 | 25 |
|
26 |
| -from .models import BasicModel |
| 26 | +from .models import BasicModel, ForeignKeySource |
27 | 27 |
|
28 | 28 | factory = APIRequestFactory()
|
29 | 29 |
|
@@ -556,6 +556,51 @@ def test_schema_for_regular_views(self):
|
556 | 556 | assert schema == expected
|
557 | 557 |
|
558 | 558 |
|
| 559 | +class ForeignKeySourceSerializer(serializers.ModelSerializer): |
| 560 | + class Meta: |
| 561 | + model = ForeignKeySource |
| 562 | + fields = ('id', 'name', 'target') |
| 563 | + |
| 564 | + |
| 565 | +class ForeignKeySourceView(generics.CreateAPIView): |
| 566 | + queryset = ForeignKeySource.objects.all() |
| 567 | + serializer_class = ForeignKeySourceSerializer |
| 568 | + |
| 569 | + |
| 570 | +@unittest.skipUnless(coreapi, 'coreapi is not installed') |
| 571 | +class TestSchemaGeneratorWithForeignKey(TestCase): |
| 572 | + def setUp(self): |
| 573 | + self.patterns = [ |
| 574 | + url(r'^example/?$', ForeignKeySourceView.as_view()), |
| 575 | + ] |
| 576 | + |
| 577 | + def test_schema_for_regular_views(self): |
| 578 | + """ |
| 579 | + Ensure that AutoField foreign keys are output as Integer. |
| 580 | + """ |
| 581 | + generator = SchemaGenerator(title='Example API', patterns=self.patterns) |
| 582 | + schema = generator.get_schema() |
| 583 | + |
| 584 | + expected = coreapi.Document( |
| 585 | + url='', |
| 586 | + title='Example API', |
| 587 | + content={ |
| 588 | + 'example': { |
| 589 | + 'create': coreapi.Link( |
| 590 | + url='/example/', |
| 591 | + action='post', |
| 592 | + encoding='application/json', |
| 593 | + fields=[ |
| 594 | + coreapi.Field('name', required=True, location='form', schema=coreschema.String(title='Name')), |
| 595 | + coreapi.Field('target', required=True, location='form', schema=coreschema.Integer(description='Target', title='Target')), |
| 596 | + ] |
| 597 | + ) |
| 598 | + } |
| 599 | + } |
| 600 | + ) |
| 601 | + assert schema == expected |
| 602 | + |
| 603 | + |
559 | 604 | @unittest.skipUnless(coreapi, 'coreapi is not installed')
|
560 | 605 | class Test4605Regression(TestCase):
|
561 | 606 | def test_4605_regression(self):
|
|
0 commit comments