Skip to content

Commit

Permalink
Merge pull request #54 from jeromelebleu/tests/add-1.11-2.0
Browse files Browse the repository at this point in the history
Add testing for Django 1.11 and 2.0
  • Loading branch information
jxcl committed Jul 3, 2018
2 parents 5dcdb1b + 4748349 commit ca7b647
Show file tree
Hide file tree
Showing 8 changed files with 90 additions and 89 deletions.
10 changes: 6 additions & 4 deletions .travis.yml
Expand Up @@ -6,18 +6,20 @@ cache: pip
sudo: false
env:
matrix:
- TOX_ENV=dj17
- TOX_ENV=dj18
- TOX_ENV=dj19
- TOX_ENV=dj110
- TOX_ENV=dj111
- TOX_ENV=dj20
- TOX_ENV=djdev
matrix:
exclude:
- python: "3.5"
env: TOX_ENV=dj17
- python: "2.7"
env: TOX_ENV=dj20
- python: "2.7"
env: TOX_ENV=djdev
allow_failures:
- env: TOX_ENV=djdev

install:
- pip install --upgrade pip
- pip install tox
Expand Down
28 changes: 16 additions & 12 deletions setup.py
Expand Up @@ -12,6 +12,7 @@
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()


setup(
name='django-betterforms',
version=version,
Expand All @@ -20,25 +21,28 @@ def read(fname):
url="https://django-betterforms.readthedocs.org/en/latest/",
author="Fusionbox",
author_email='programmers@fusionbox.com',
packages=[package for package in find_packages() if package.startswith('betterforms')],
install_requires=[
'Django>=1.4',
'six',
],
tests_require=[
'mock>=1.0.1',
],
packages=[package for package in find_packages()
if package.startswith('betterforms')],
install_requires=['Django>=1.8'],
zip_safe=False,
include_package_data=True,
classifiers=[
'Development Status :: 4 - Beta',
'Development Status :: 5 - Production/Stable',
'Framework :: Django',
'Framework :: Django :: 1.8',
'Framework :: Django :: 1.9',
'Framework :: Django :: 1.10',
'Framework :: Django :: 1.11',
'Framework :: Django :: 2.0',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Topic :: Internet :: WWW/HTTP',
'Programming Language :: Python',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Internet :: WWW/HTTP',
],
)
9 changes: 6 additions & 3 deletions tests/models.py
Expand Up @@ -7,8 +7,9 @@ class User(models.Model):


class Profile(models.Model):
user = models.OneToOneField('User', related_name='profile')

user = models.OneToOneField(
User, on_delete=models.CASCADE, related_name='profile',
)
display_name = models.CharField(max_length=255, blank=True)


Expand All @@ -27,5 +28,7 @@ class Book(models.Model):


class BookImage(models.Model):
book = models.ForeignKey(Book, related_name='images')
book = models.ForeignKey(
Book, on_delete=models.CASCADE, related_name='images',
)
name = models.CharField(max_length=255)
5 changes: 5 additions & 0 deletions tests/requirements.txt
@@ -0,0 +1,5 @@
django-formtools
pytest
pytest-django
pytest-cov
mock >=1.0.1
56 changes: 26 additions & 30 deletions tests/settings.py
@@ -1,45 +1,41 @@
from __future__ import print_function
import os
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'betterforms-tests.db',
},
}

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.staticfiles',
'betterforms',
'tests',
)

DEBUG = True

SECRET_KEY = 'JVpuGfSgVm2IxJ03xArw5mwmPuYEzAJMbhsTnvLXOPSQR4z93o'

PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
SITE_ID = 1

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
# We need the SessionMiddleware for the WizardView support tests in Django >= 1.7
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
)
ROOT_URLCONF = 'tests.urls'

TEMPLATES = [
{
'DIRS': [
os.path.join(PROJECT_PATH, 'templates/'),
],
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
},
]

INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.contenttypes',
'django.contrib.auth',
'django.contrib.admin',
'django.contrib.staticfiles',
'tests',
'betterforms',
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
)

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'sqlite_database',
}
}

ROOT_URLCONF = 'tests.urls'
# Django 1.9 and earlier
MIDDLEWARE_CLASSES = MIDDLEWARE

STATIC_URL = '/static/'
DEBUG = True
28 changes: 14 additions & 14 deletions tests/tests.py
@@ -1,10 +1,8 @@
from collections import OrderedDict

import django
from django.test import TestCase
from django.test.client import RequestFactory
from django.views.generic import CreateView
from django.core import urlresolvers
from django.utils.encoding import force_text

from .models import User, Profile, Badge, Book
Expand All @@ -15,6 +13,11 @@
ModifiesDataCustomCleanMultiform,
)

try:
from django.urls import reverse
except ImportError: # Django 1.9 and earlier
from django.core.urlresolvers import reverse


class MultiFormTest(TestCase):
def test_initial_data(self):
Expand Down Expand Up @@ -50,7 +53,9 @@ def test_as_table(self):

def test_fields(self):
form = UserProfileMultiForm()
self.assertEqual(form.fields, ['user-name', 'profile-name', 'profile-display_name'])
self.assertEqual(form.fields, [
'user-name', 'profile-name', 'profile-display_name'
])

def test_errors(self):
form = ErrorMultiForm()
Expand Down Expand Up @@ -97,7 +102,8 @@ def test_non_field_errors(self):
form = ErrorMultiForm(data={})

self.assertFalse(form.is_valid())
self.assertEqual(form.non_field_errors().as_text(), '* It broke\n* It broke')
self.assertEqual(form.non_field_errors().as_text(),
'* It broke\n* It broke')

def test_is_multipart(self):
form1 = ErrorMultiForm()
Expand All @@ -108,14 +114,7 @@ def test_is_multipart(self):

def test_media(self):
form = NeedsFileField()
static_prefix = ""
if django.VERSION < (1, 10):
static_prefix = "/static/"
self.assertEqual(form.media._js, [
static_prefix + 'admin/js/calendar.js',
static_prefix + 'admin/js/admin/DateTimeShortcuts.js',
'test.js',
])
self.assertIn('test.js', form.media._js)

def test_is_bound(self):
form = ErrorMultiForm()
Expand Down Expand Up @@ -169,7 +168,7 @@ def test_handles_none_initial_value(self):
UserProfileMultiForm(initial=None)

def test_works_with_wizard_view(self):
url = urlresolvers.reverse('test_wizard')
url = reverse('test_wizard')
self.client.get(url)

response = self.client.post(url, {
Expand All @@ -188,7 +187,8 @@ def test_works_with_wizard_view(self):
# support indexing, you are probably recommending to use form_dict
# instead of form_list on Django>=1.7 anyway though.
form_list = list(form_list)
self.assertEqual(form_list[0]['profile'].cleaned_data['name'], 'John Doe')
self.assertEqual(form_list[0]['profile'].cleaned_data['name'],
'John Doe')

def test_custom_clean_errors(self):
form = RaisesErrorCustomCleanMultiform({
Expand Down
16 changes: 4 additions & 12 deletions tests/urls.py
@@ -1,21 +1,11 @@
import django
from django.conf.urls import url

if django.VERSION >= (1, 8):
from formtools.wizard.views import SessionWizardView
else:
from django.contrib.formtools.wizard.views import SessionWizardView
from formtools.wizard.views import SessionWizardView

from .forms import Step1Form, Step2Form


class TestWizardView(SessionWizardView):
def get_context_data(self, **kwargs):
kwargs = super(TestWizardView, self).get_context_data(**kwargs)
# Django < 1.5 does not set the view object in the context
kwargs['view'] = self
return kwargs

def done(self, form_list, **kwargs):
context = {
'form_list': form_list,
Expand All @@ -24,5 +14,7 @@ def done(self, form_list, **kwargs):


urlpatterns = [
url(r'^test-wizard-view/$', TestWizardView.as_view([Step1Form, Step2Form]), name='test_wizard'),
url(r'^test-wizard-view/$',
TestWizardView.as_view([Step1Form, Step2Form]),
name='test_wizard'),
]
27 changes: 13 additions & 14 deletions tox.ini
@@ -1,24 +1,23 @@
[tox]
envlist=
{py27,py34,py35}-{dj17,dj18,dj19,dj110,djdev}
envlist =
{py27,py34}-dj{18,19,110}
{py27,py34,py35,py36}-dj111
{py34,py35,py36}-dj20
{py35,py36}-djdev

[testenv]
commands=
make {posargs:test}
basepython=
basepython =
py27: python2.7
py34: python3.4
py35: python3.5
deps=
dj17: Django>=1.7,<1.8
py36: python3.6
commands = make {posargs:test}
deps =
dj18: Django>=1.8,<1.9
dj19: Django>=1.9,<1.10
dj110: Django>=1.10,<1.11
dj111: Django>=1.11,<2.0
dj20: Django>=2.0,<2.1
djdev: https://github.com/django/django/archive/master.tar.gz
django-formtools
pytest
pytest-django
pytest-cov
mock
whitelist_externals=
make
-r{toxinidir}/tests/requirements.txt
whitelist_externals = make

0 comments on commit ca7b647

Please sign in to comment.