{ "info": { "author": "Thyrst", "author_email": "thyrst@seznam.cz", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "django-forms-test\n=================\n\nModule to simplify testing forms in Django framework\n\nInstallation\n------------\n\nYou can simply install it with use of ``pip``:\n\n``pip install django-forms-test``\n\nThen you'll import it into your testing script like this:\n\n``from django_forms_test import field, cleaned, FormTest``\n\nUsage\n-----\n\nYou will create a subclass of ``FormTest`` which is subclass of\n``django.test.TestCase``, so you can add tests as you are used to. To\nthe attribute ``form`` you assign class of the form you are testing.\n``required_fields`` should be a list of fields required by your form.\n\n.. code:: python\n\n class YourClass(FormTest):\n form = YourForm\n required_fields = ['email', 'message']\n\nInstead of the name of a field you can use a tuple of name and field\ntype. Available field types are ``URL``, ``TEXT``, ``PASSWORD``,\n``USERNAME``, ``EMAIL``. Field types serves to additional checking of\npermitted field value (e.g. a form shouldn't accept an invalid URL). The\n``TEXT`` is the default type and has no additional verifications.\n\n.. code:: python\n\n class YourClass(FormTest):\n form = YourForm\n required_fields = [('email', field.EMAIL), 'message'] # same as ('message', field.TEXT)\n\nFor testing of form's cleaning methods you can use a decorator\n``cleaned`` which accepts the input field values as arguments and passes\nthem cleaned to your function.\n\n.. code:: python\n\n class YourClass(FormTest):\n form = YourForm\n\n @cleaned(nick=' Bob ')\n def test_strip_nick(self, nick):\n self.assertEqual(nick, 'Bob')\n\nExample\n-------\n\nYou code this:\n\n.. code:: python\n\n class SaveFormTest(FormTest):\n form = SaveForm\n required_fields = ['title', 'tags', ('url', field.URL)]\n\n @cleaned(tags='one, two')\n def test_cleaning_tags(self, tags):\n self.assertIsInstance(tags, list)\n self.assertEqual(len(tags), 2)\n self.assertEqual(tags[1], 'two')\n\n @cleaned(description='')\n def test_cleaning_description(self, description):\n self.assertIsNone(description)\n\nInstead of this:\n\n.. code:: python\n\n class SaveFormTest(TestCase):\n\n data = {\n 'title': 'some title',\n 'url': 'http://some.url',\n 'tags': 'some tags',\n }\n\n def test_valid_form(self):\n form = SaveForm(self.data)\n self.assertTrue(form.is_valid())\n\n def test_invalid_url(self):\n my_data = copy(self.data)\n my_data['url'] = 'invalid url'\n form = SaveForm(my_data)\n\n self.assertFalse(form.is_valid())\n\n def test_required_fields(self):\n for field in ('title', 'url', 'tags'):\n with self.subTest(field=field):\n my_data = copy(self.data)\n my_data[field] = ''\n form = SaveForm(my_data)\n\n self.assertFalse(form.is_valid())\n\n def test_cleaning_tags(self):\n form = SaveForm({'tags': 'one, two'})\n form.is_valid()\n\n tags = form.cleaned_data['tags']\n self.assertIsInstance(tags, list)\n self.assertEqual(len(tags), 2)\n self.assertEqual(tags[1], 'two')\n\n def test_cleaning_description(self):\n form = SaveForm({'description': ''})\n form.is_valid()\n\n description = form.cleaned_data['description']\n self.assertIsNone(description)\n\nAnd you code this:\n\n.. code:: python\n\n class RegisterFormTest(FormTest):\n form = RegisterForm\n required_fields = [\n ('username', field.USERNAME),\n ('email', field.EMAIL),\n ('password', field.PASSWORD),\n ('confirm_password', field.PASSWORD),\n ]\n\nInstead of this:\n\n.. code:: python\n\n class RegisterFormTest(TestCase):\n\n data = {\n 'username': 'some_username',\n 'email': 'some@email.com',\n 'password': 'some password',\n 'confirm_password': 'some password',\n }\n\n def test_valid_form(self):\n form = RegisterForm(self.data)\n self.assertTrue(form.is_valid())\n\n def test_invalid_username(self):\n my_data = copy(self.data)\n my_data['email'] = 'invalid email'\n form = RegisterForm(my_data)\n\n self.assertFalse(form.is_valid())\n\n def test_invalid_email(self):\n my_data = copy(self.data)\n my_data['email'] = 'invalid email'\n form = RegisterForm(my_data)\n\n self.assertFalse(form.is_valid())\n\n def test_required_fields(self):\n for field in ('username', 'email', 'password', 'confirm_password'):\n with self.subTest(field=field):\n my_data = copy(self.data)\n my_data[field] = ''\n form = RegisterForm(my_data)\n\n self.assertFalse(form.is_valid())\n\n def test_password_safe_input(self):\n form = RegisterForm()\n input_type = form['password'].field.widget.input_type\n self.assertEqual(input_type, 'password')\n\n input_type = form['confirm_password'].field.widget.input_type\n self.assertEqual(input_type, 'password')\n\n\nAnnouncement\n------------\n\n\nI've done this just for my personal use, so there are many things that\nare still missing and I probably won't implement them until I need them.\nHowever feel free to send a pull request if you miss something.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/Thyrst/django-forms-test/archive/0.1.post1.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Thyrst/django-forms-test", "keywords": "django forms unittest test", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-forms-test", "package_url": "https://pypi.org/project/django-forms-test/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-forms-test/", "project_urls": { "Download": "https://github.com/Thyrst/django-forms-test/archive/0.1.post1.tar.gz", "Homepage": "https://github.com/Thyrst/django-forms-test" }, "release_url": "https://pypi.org/project/django-forms-test/0.1.post1/", "requires_dist": null, "requires_python": "", "summary": "Module to simplify testing forms in Django framework", "version": "0.1.post1" }, "last_serial": 2801336, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "33851fd6835c5cf6ec8fa629ef8ab76b", "sha256": "5afe7f4252a4e06a36763f3745a0b6ed0ce542ff7a383c263a58ffd11524938c" }, "downloads": -1, "filename": "django-forms-test-0.1.tar.gz", "has_sig": false, "md5_digest": "33851fd6835c5cf6ec8fa629ef8ab76b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3260, "upload_time": "2017-04-13T10:49:41", "url": "https://files.pythonhosted.org/packages/10/d6/0a4b591cf2a911c23715a1ce35c682d7081f4113aa5539ae96912ad6804d/django-forms-test-0.1.tar.gz" } ], "0.1.post1": [ { "comment_text": "", "digests": { "md5": "c229ee2f6bbc8ad22719b18fa241526d", "sha256": "a5599b94caef0b4753c21bd83bdf46df2d14eca5723027d1bd73a61a72a46463" }, "downloads": -1, "filename": "django_forms_test-0.1.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "c229ee2f6bbc8ad22719b18fa241526d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6169, "upload_time": "2017-04-13T11:57:49", "url": "https://files.pythonhosted.org/packages/24/87/6a5ba66f70936b2eccc815498f5a395b0a6fc5434a9ce3d6e4f1d5958375/django_forms_test-0.1.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ddf834a96c1aee558d658d7bb0aa9f2d", "sha256": "ef009558793401f91cfefb34e96647cfa64419b337b666a9d62586b85d043225" }, "downloads": -1, "filename": "django-forms-test-0.1.post1.tar.gz", "has_sig": false, "md5_digest": "ddf834a96c1aee558d658d7bb0aa9f2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3750, "upload_time": "2017-04-13T11:57:51", "url": "https://files.pythonhosted.org/packages/5a/02/9d357d84d9751f33209ada808e3f379c557e38bfb2ec625bdeefcbaa91a7/django-forms-test-0.1.post1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c229ee2f6bbc8ad22719b18fa241526d", "sha256": "a5599b94caef0b4753c21bd83bdf46df2d14eca5723027d1bd73a61a72a46463" }, "downloads": -1, "filename": "django_forms_test-0.1.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "c229ee2f6bbc8ad22719b18fa241526d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6169, "upload_time": "2017-04-13T11:57:49", "url": "https://files.pythonhosted.org/packages/24/87/6a5ba66f70936b2eccc815498f5a395b0a6fc5434a9ce3d6e4f1d5958375/django_forms_test-0.1.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ddf834a96c1aee558d658d7bb0aa9f2d", "sha256": "ef009558793401f91cfefb34e96647cfa64419b337b666a9d62586b85d043225" }, "downloads": -1, "filename": "django-forms-test-0.1.post1.tar.gz", "has_sig": false, "md5_digest": "ddf834a96c1aee558d658d7bb0aa9f2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3750, "upload_time": "2017-04-13T11:57:51", "url": "https://files.pythonhosted.org/packages/5a/02/9d357d84d9751f33209ada808e3f379c557e38bfb2ec625bdeefcbaa91a7/django-forms-test-0.1.post1.tar.gz" } ] }