File: test_recursion.py

package info (click to toggle)
python-drf-spectacular 0.28.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,748 kB
  • sloc: python: 14,174; javascript: 114; sh: 61; makefile: 30
file content (60 lines) | stat: -rw-r--r-- 1,530 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import uuid

import pytest
from django.db import models
from rest_framework import mixins, serializers, viewsets
from rest_framework.renderers import JSONRenderer

from tests import assert_schema, generate_schema


class TreeNode(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    label = models.TextField()

    parent = models.ForeignKey(
        'TreeNode',
        null=True,
        blank=True,
        related_name='children',
        on_delete=models.DO_NOTHING
    )


class TreeNodeSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ['id', 'label', 'parent', 'children']
        model = TreeNode

    def get_fields(self):
        fields = super(TreeNodeSerializer, self).get_fields()
        fields['children'] = TreeNodeSerializer(many=True)
        return fields


class TreeNodeViewset(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    serializer_class = TreeNodeSerializer
    queryset = TreeNode.objects.none()


def test_recursion(no_warnings):
    assert_schema(
        generate_schema('nodes', TreeNodeViewset),
        'tests/test_recursion.yml'
    )


@pytest.mark.django_db
def test_model_setup_is_valid():
    root = TreeNode(label='root')
    root.save()
    leaf1 = TreeNode(label='leaf1', parent=root)
    leaf1.save()
    leaf2 = TreeNode(label='leaf2', parent=root)
    leaf2.save()

    JSONRenderer().render(
        TreeNodeSerializer(root).data,
        accepted_media_type='application/json; indent=4'
    ).decode()