Coverage for /home/marco/Code/django-simple-captcha/captcha/tests/views.py: 100.00%
78 statements
« prev ^ index » next coverage.py v7.6.5, created at 2024-11-15 09:22 +0100
« prev ^ index » next coverage.py v7.6.5, created at 2024-11-15 09:22 +0100
1from rest_framework import serializers, status
2from rest_framework.decorators import api_view
3from rest_framework.response import Response
5from django import forms
6from django.contrib.auth.models import User
7from django.http import HttpResponse
8from django.template import engines
10from captcha.fields import CaptchaField
11from captcha.serializers import CaptchaModelSerializer, CaptchaSerializer
14TEST_TEMPLATE = r"""
15<!doctype html>
16<html>
17 <head>
18 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
19 <title>captcha test</title>
20 </head>
21 <body>
22 {% if passed %}
23 <p style="color:green">Form validated</p>
24 {% endif %}
25 {% if form.errors %}
26 {{form.errors}}
27 {% endif %}
29 <form action="{% url 'captcha-test' %}" method="post">
30 {{form.as_p}}
31 <p><input type="submit" value="Continue →"></p>
32 </form>
33 </body>
34</html>
35"""
38def _get_template(template_string):
39 return engines["django"].from_string(template_string)
42def _test(request, form_class):
43 passed = False
44 if request.POST:
45 form = form_class(request.POST)
46 if form.is_valid():
47 passed = True
48 else:
49 form = form_class()
51 t = _get_template(TEST_TEMPLATE)
53 return HttpResponse(
54 t.render(context=dict(passed=passed, form=form), request=request)
55 )
58def test(request):
59 class CaptchaTestForm(forms.Form):
60 subject = forms.CharField(max_length=100)
61 sender = forms.EmailField()
62 captcha = CaptchaField(help_text="asdasd")
64 return _test(request, CaptchaTestForm)
67def test_model_form(request):
68 class CaptchaTestModelForm(forms.ModelForm):
69 subject = forms.CharField(max_length=100)
70 sender = forms.EmailField()
71 captcha = CaptchaField(help_text="asdasd")
73 class Meta:
74 model = User
75 fields = ("subject", "sender", "captcha")
77 return _test(request, CaptchaTestModelForm)
80def test_custom_generator(request):
81 class CaptchaTestModelForm(forms.ModelForm):
82 subject = forms.CharField(max_length=100)
83 sender = forms.EmailField()
84 captcha = CaptchaField(generator=lambda: ("111111", "111111"))
86 class Meta:
87 model = User
88 fields = ("subject", "sender", "captcha")
90 return _test(request, CaptchaTestModelForm)
93def test_custom_error_message(request):
94 class CaptchaTestErrorMessageForm(forms.Form):
95 captcha = CaptchaField(
96 help_text="asdasd", error_messages=dict(invalid="TEST CUSTOM ERROR MESSAGE")
97 )
99 return _test(request, CaptchaTestErrorMessageForm)
102def test_non_required(request):
103 class CaptchaTestForm(forms.Form):
104 sender = forms.EmailField()
105 subject = forms.CharField(max_length=100)
106 captcha = CaptchaField(help_text="asdasd", required=False)
108 return _test(request, CaptchaTestForm)
111def test_id_prefix(request):
112 class CaptchaTestForm(forms.Form):
113 sender = forms.EmailField()
114 subject = forms.CharField(max_length=100)
115 captcha1 = CaptchaField(id_prefix="form1")
116 captcha2 = CaptchaField(id_prefix="form2")
118 return _test(request, CaptchaTestForm)
121@api_view(["POST"])
122def test_serializer(request):
123 serializer = CaptchaSerializer(data=request.POST)
124 serializer.is_valid(raise_exception=True)
125 return Response(status=status.HTTP_200_OK)
128@api_view(["POST"])
129def test_model_serializer(request):
130 class UserCaptchaModelSerializer(CaptchaModelSerializer):
131 subject = serializers.CharField(max_length=100)
132 sender = serializers.EmailField()
134 class Meta:
135 model = User
136 fields = ("subject", "sender", "captcha_code", "captcha_hashkey")
138 serializer = UserCaptchaModelSerializer(data=request.POST)
139 serializer.is_valid(raise_exception=True)
140 return Response(status=status.HTTP_200_OK)