summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
authorCarlton Gibson <carlton.gibson@noumenal.es>2022-02-03 08:33:26 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-02-03 13:50:37 +0100
commit4b8e9492d9003ca357a4402f831112dd72efd2f8 (patch)
tree876fa746f723e970c3c874d23c21d0f7fed10479 /tests/forms_tests
parent832adb31f27cfc18ad7542c7eda5a1b6ed5f1669 (diff)
downloaddjango-4b8e9492d9003ca357a4402f831112dd72efd2f8.tar.gz
Refs #32559 -- Added selenium test for FloatField client-side validation.
step="any" is required for non-integer values. See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#step Covers behaviour added in 7ec2a21be15af5b2c7513482c3bcfdd1e12782ed.
Diffstat (limited to 'tests/forms_tests')
-rw-r--r--tests/forms_tests/field_tests/test_floatfield.py23
-rw-r--r--tests/forms_tests/urls.py3
-rw-r--r--tests/forms_tests/views.py11
3 files changed, 36 insertions, 1 deletions
diff --git a/tests/forms_tests/field_tests/test_floatfield.py b/tests/forms_tests/field_tests/test_floatfield.py
index d6dffaccb1..7330c33503 100644
--- a/tests/forms_tests/field_tests/test_floatfield.py
+++ b/tests/forms_tests/field_tests/test_floatfield.py
@@ -1,7 +1,9 @@
from django.core.exceptions import ValidationError
from django.forms import FloatField, NumberInput
from django.test import SimpleTestCase
+from django.test.selenium import SeleniumTestCase
from django.test.utils import ignore_warnings, override_settings
+from django.urls import reverse
from django.utils import formats, translation
from django.utils.deprecation import RemovedInDjango50Warning
@@ -111,3 +113,24 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
msg = "'Enter a number.'"
with self.assertRaisesMessage(ValidationError, msg):
f.clean('1,001.1')
+
+
+@override_settings(ROOT_URLCONF='forms_tests.urls')
+class FloatFieldHTMLTest(SeleniumTestCase):
+
+ available_apps = ['forms_tests']
+
+ def test_float_field_rendering_passes_client_side_validation(self):
+ """
+ Rendered widget allows non-integer value with the client-side
+ validation.
+ """
+ from selenium.webdriver.common.by import By
+
+ self.selenium.get(self.live_server_url + reverse('form_view'))
+ number_input = self.selenium.find_element(By.ID, 'id_number')
+ number_input.send_keys('0.5')
+ is_valid = self.selenium.execute_script(
+ "return document.getElementById('id_number').checkValidity()"
+ )
+ self.assertTrue(is_valid)
diff --git a/tests/forms_tests/urls.py b/tests/forms_tests/urls.py
index dda75b52b4..7e27927099 100644
--- a/tests/forms_tests/urls.py
+++ b/tests/forms_tests/urls.py
@@ -1,7 +1,8 @@
from django.urls import path
-from .views import ArticleFormView
+from .views import ArticleFormView, form_view
urlpatterns = [
+ path('form_view/', form_view, name='form_view'),
path('model_form/<int:pk>/', ArticleFormView.as_view(), name='article_form'),
]
diff --git a/tests/forms_tests/views.py b/tests/forms_tests/views.py
index 44e4c84344..20f1bf161d 100644
--- a/tests/forms_tests/views.py
+++ b/tests/forms_tests/views.py
@@ -1,4 +1,6 @@
from django import forms
+from django.http import HttpResponse
+from django.template import Context, Template
from django.views.generic.edit import UpdateView
from .models import Article
@@ -16,3 +18,12 @@ class ArticleFormView(UpdateView):
model = Article
success_url = '/'
form_class = ArticleForm
+
+
+def form_view(request):
+ class Form(forms.Form):
+ number = forms.FloatField()
+
+ template = Template('<html>{{ form }}</html>')
+ context = Context({'form': Form()})
+ return HttpResponse(template.render(context))