|
7 | 7 | from rest_framework import serializers
|
8 | 8 |
|
9 | 9 | from ...types import DjangoObjectType
|
10 |
| -from ..models import MyFakeModel |
| 10 | +from ..models import MyFakeModel, MyFakeModelWithPassword |
11 | 11 | from ..mutation import SerializerMutation
|
12 | 12 |
|
13 | 13 |
|
@@ -86,6 +86,47 @@ class Meta:
|
86 | 86 | assert "created" not in MyMutation.Input._meta.fields
|
87 | 87 |
|
88 | 88 |
|
| 89 | +@mark.django_db |
| 90 | +def test_write_only_field(): |
| 91 | + class WriteOnlyFieldModelSerializer(serializers.ModelSerializer): |
| 92 | + password = serializers.CharField(write_only=True) |
| 93 | + |
| 94 | + class Meta: |
| 95 | + model = MyFakeModelWithPassword |
| 96 | + fields = ["cool_name", "password"] |
| 97 | + |
| 98 | + class MyMutation(SerializerMutation): |
| 99 | + class Meta: |
| 100 | + serializer_class = WriteOnlyFieldModelSerializer |
| 101 | + |
| 102 | + result = MyMutation.mutate_and_get_payload( |
| 103 | + None, mock_info(), **{"cool_name": "New Narf", "password": "admin"} |
| 104 | + ) |
| 105 | + |
| 106 | + assert hasattr(result, "cool_name") |
| 107 | + assert not hasattr(result, "password"), "'password' is write_only field and shouldn't be visible" |
| 108 | + |
| 109 | + |
| 110 | +@mark.django_db |
| 111 | +def test_write_only_field_using_extra_kwargs(): |
| 112 | + class WriteOnlyFieldModelSerializer(serializers.ModelSerializer): |
| 113 | + class Meta: |
| 114 | + model = MyFakeModelWithPassword |
| 115 | + fields = ["cool_name", "password"] |
| 116 | + extra_kwargs = {"password": {"write_only": True}} |
| 117 | + |
| 118 | + class MyMutation(SerializerMutation): |
| 119 | + class Meta: |
| 120 | + serializer_class = WriteOnlyFieldModelSerializer |
| 121 | + |
| 122 | + result = MyMutation.mutate_and_get_payload( |
| 123 | + None, mock_info(), **{"cool_name": "New Narf", "password": "admin"} |
| 124 | + ) |
| 125 | + |
| 126 | + assert hasattr(result, "cool_name") |
| 127 | + assert not hasattr(result, "password"), "'password' is write_only field and shouldn't be visible" |
| 128 | + |
| 129 | + |
89 | 130 | def test_nested_model():
|
90 | 131 | class MyFakeModelGrapheneType(DjangoObjectType):
|
91 | 132 | class Meta:
|
|
0 commit comments