Skip to content

Commit

Permalink
Drop Django 3.1 support & update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Ferdinand Hoffmann committed Jun 10, 2021
1 parent c706c7b commit e0d4b18
Show file tree
Hide file tree
Showing 9 changed files with 230 additions and 13 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ It heavily relies on django form fields & widgets and uses PostgreSQL JSON field

## Requirements

- [Django](https://www.djangoproject.com) version 2.2 or 3.1
- Python version 3.6+
- [Django](https://www.djangoproject.com) version 2.2 or 3.2
- [django-ordered-model](https://github.com/bfirsh/django-ordered-model)
- A [PostgreSQL](https://www.postgresql.org/) Database

Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ license_files = LICENSE
url = https://github.com/anfema/django-questionnaire-core
classifiers =
Framework :: Django :: 2.2
Framework :: Django :: 3.1
Framework :: Django :: 3.2
Programming Language :: Python :: 3
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Expand Down
1 change: 1 addition & 0 deletions test_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
coverage
django-ordered-model
psycopg2
180 changes: 179 additions & 1 deletion tests/fixtures/test1.json
Original file line number Diff line number Diff line change
@@ -1 +1,179 @@
[{"model": "questionnaire_core.questionnaire", "pk": 1, "fields": {"title": "test1"}}, {"model": "questionnaire_core.question", "pk": 1, "fields": {"order": 0, "questionnaire": 1, "question_text": "boolean (checkbox)", "question_type": "boolean", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 2, "fields": {"order": 1, "questionnaire": 1, "question_text": "boolean (yes/no)", "question_type": "boolean_yesno", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 3, "fields": {"order": 2, "questionnaire": 1, "question_text": "choices", "question_type": "choices", "question_options": {"choices": [{"value": "1", "label": "first"}, {"value": "2", "label": "second"}]}, "required": true}}, {"model": "questionnaire_core.question", "pk": 4, "fields": {"order": 3, "questionnaire": 1, "question_text": "choices multiple", "question_type": "choices_multiple", "question_options": {"choices": [{"value": "1", "label": "first"}, {"value": "2", "label": "second"}]}, "required": true}}, {"model": "questionnaire_core.question", "pk": 5, "fields": {"order": 4, "questionnaire": 1, "question_text": "file upload", "question_type": "file_upload", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 6, "fields": {"order": 5, "questionnaire": 1, "question_text": "multiple text", "question_type": "multiple_text", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 7, "fields": {"order": 6, "questionnaire": 1, "question_text": "number decimal", "question_type": "number_decimal", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 8, "fields": {"order": 7, "questionnaire": 1, "question_text": "number integer", "question_type": "number_integer", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 9, "fields": {"order": 8, "questionnaire": 1, "question_text": "number percent", "question_type": "number_percent", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 10, "fields": {"order": 9, "questionnaire": 1, "question_text": "range slider", "question_type": "range_slider", "question_options": {"max": 100, "step": 1, "min": 1}, "required": true}}, {"model": "questionnaire_core.question", "pk": 11, "fields": {"order": 10, "questionnaire": 1, "question_text": "text long", "question_type": "text_long", "question_options": {}, "required": true}}, {"model": "questionnaire_core.question", "pk": 12, "fields": {"order": 11, "questionnaire": 1, "question_text": "text short", "question_type": "text_short", "question_options": {}, "required": true}}]
[
{
"model": "questionnaire_core.questionnaire",
"pk": 1,
"fields": {
"title": "test1"
}
},
{
"model": "questionnaire_core.question",
"pk": 1,
"fields": {
"order": 0,
"questionnaire": 1,
"question_text": "boolean (checkbox)",
"question_type": "boolean",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 2,
"fields": {
"order": 1,
"questionnaire": 1,
"question_text": "boolean (yes/no)",
"question_type": "boolean_yesno",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 3,
"fields": {
"order": 2,
"questionnaire": 1,
"question_text": "choices",
"question_type": "choices",
"question_options": {
"choices": [
{
"value": "1",
"label": "first"
},
{
"value": "2",
"label": "second"
}
]
},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 4,
"fields": {
"order": 3,
"questionnaire": 1,
"question_text": "choices multiple",
"question_type": "choices_multiple",
"question_options": {
"choices": [
{
"value": "1",
"label": "first"
},
{
"value": "2",
"label": "second"
}
]
},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 5,
"fields": {
"order": 4,
"questionnaire": 1,
"question_text": "file upload",
"question_type": "file_upload",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 6,
"fields": {
"order": 5,
"questionnaire": 1,
"question_text": "multiple text",
"question_type": "multiple_text",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 7,
"fields": {
"order": 6,
"questionnaire": 1,
"question_text": "number decimal",
"question_type": "number_decimal",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 8,
"fields": {
"order": 7,
"questionnaire": 1,
"question_text": "number integer",
"question_type": "number_integer",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 9,
"fields": {
"order": 8,
"questionnaire": 1,
"question_text": "number percent",
"question_type": "number_percent",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 10,
"fields": {
"order": 9,
"questionnaire": 1,
"question_text": "range slider",
"question_type": "range_slider",
"question_options": {
"max": 100,
"step": 1,
"min": 1
},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 11,
"fields": {
"order": 10,
"questionnaire": 1,
"question_text": "text long",
"question_type": "text_long",
"question_options": {},
"required": true
}
},
{
"model": "questionnaire_core.question",
"pk": 12,
"fields": {
"order": 11,
"questionnaire": 1,
"question_text": "text short",
"question_type": "text_short",
"question_options": {},
"required": true
}
}
]
3 changes: 1 addition & 2 deletions tests/test_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
from .base import TestCaseBase


# Create your tests here.
class ModelTestCase(TestCaseBase):

def test_form_class_gets_created(self):
"""Form class get's created for questionnaire"""
"""Form class gets created for questionnaire"""
q1 = Questionnaire.objects.get(title='test1')
form_class = q1.build_form_class(QuestionnaireResult())
self.assertEqual(form_class.__name__, 'QuestionnaireForm')
1 change: 0 additions & 1 deletion tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from .base import TestCaseBase


# Create your tests here.
class ModelTestCase(TestCaseBase):

def test_questionnaire_test1_created(self):
Expand Down
42 changes: 42 additions & 0 deletions tests/test_ordering.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from django.test import TestCase

from questionnaire_core.models import Question, Questionnaire


class ModelTestCase(TestCase):

def test_ordering_create(self):
"""Questions are ordered in creation order"""
test_questionnaire = Questionnaire.objects.create(title='test_ordering_1')
Question.objects.create(
questionnaire=test_questionnaire,
question_type='boolean',
question_text='question 1',
)
Question.objects.create(
questionnaire=test_questionnaire,
question_type='boolean',
question_text='question 2',
)

self.assertEqual(test_questionnaire.questions.get(question_text='question 1').order, 0)
self.assertEqual(test_questionnaire.questions.get(question_text='question 2').order, 1)

def test_ordering_bulk_create(self):
"""Questions are ordered in creation order by bulk_create()"""
test_questionnaire = Questionnaire.objects.create(title='test_ordering_2')
Question.objects.bulk_create([
Question(
questionnaire=test_questionnaire,
question_type='boolean',
question_text='question 1',
),
Question(
questionnaire=test_questionnaire,
question_type='boolean',
question_text='question 2',
),
])

self.assertEqual(test_questionnaire.questions.get(question_text='question 1').order, 0)
self.assertEqual(test_questionnaire.questions.get(question_text='question 2').order, 1)
3 changes: 1 addition & 2 deletions tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
from .base import TestCaseBase


# Create your tests here.
class ViewTestCase(TestCaseBase):

def test_generic_view_get(self):
"""Generic view renders"""
"""Generic view renders on GET"""
response = self.client.get(reverse('test_view'))

self.assertEqual(response.status_code, 200)
Expand Down
8 changes: 3 additions & 5 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tox]
envlist =
py{36,37,38,39}-django{22,31}-orderedmodel31
py{36,37,38,39}-django{22,32}
flake8
isort

Expand All @@ -14,16 +14,14 @@ commands =
deps =
-rtest_requirements.txt
django22: Django~=2.2.0
django31: Django~=3.1.0
# compatible with django v2.0+:
orderedmodel31: django-ordered-model~=3.1.0
django32: Django~=3.2.0

setenv =
PYTHONPATH = {toxinidir}
PYTHONWARNINGS = module::DeprecationWarning

commands =
coverage run setup.py test
coverage run runtests.py
# coverage report -m
{[cleanup]commands}

Expand Down

0 comments on commit e0d4b18

Please sign in to comment.