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

1from rest_framework import serializers, status 

2from rest_framework.decorators import api_view 

3from rest_framework.response import Response 

4 

5from django import forms 

6from django.contrib.auth.models import User 

7from django.http import HttpResponse 

8from django.template import engines 

9 

10from captcha.fields import CaptchaField 

11from captcha.serializers import CaptchaModelSerializer, CaptchaSerializer 

12 

13 

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 %} 

28 

29 <form action="{% url 'captcha-test' %}" method="post"> 

30 {{form.as_p}} 

31 <p><input type="submit" value="Continue &rarr;"></p> 

32 </form> 

33 </body> 

34</html> 

35""" 

36 

37 

38def _get_template(template_string): 

39 return engines["django"].from_string(template_string) 

40 

41 

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() 

50 

51 t = _get_template(TEST_TEMPLATE) 

52 

53 return HttpResponse( 

54 t.render(context=dict(passed=passed, form=form), request=request) 

55 ) 

56 

57 

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") 

63 

64 return _test(request, CaptchaTestForm) 

65 

66 

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") 

72 

73 class Meta: 

74 model = User 

75 fields = ("subject", "sender", "captcha") 

76 

77 return _test(request, CaptchaTestModelForm) 

78 

79 

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")) 

85 

86 class Meta: 

87 model = User 

88 fields = ("subject", "sender", "captcha") 

89 

90 return _test(request, CaptchaTestModelForm) 

91 

92 

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 ) 

98 

99 return _test(request, CaptchaTestErrorMessageForm) 

100 

101 

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) 

107 

108 return _test(request, CaptchaTestForm) 

109 

110 

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") 

117 

118 return _test(request, CaptchaTestForm) 

119 

120 

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) 

126 

127 

128@api_view(["POST"]) 

129def test_model_serializer(request): 

130 class UserCaptchaModelSerializer(CaptchaModelSerializer): 

131 subject = serializers.CharField(max_length=100) 

132 sender = serializers.EmailField() 

133 

134 class Meta: 

135 model = User 

136 fields = ("subject", "sender", "captcha_code", "captcha_hashkey") 

137 

138 serializer = UserCaptchaModelSerializer(data=request.POST) 

139 serializer.is_valid(raise_exception=True) 

140 return Response(status=status.HTTP_200_OK)