Skip to content

Commit 93d28a2

Browse files
committed
Initial django integration tests
1 parent 7d8bd37 commit 93d28a2

10 files changed

+143
-15
lines changed

.ci-support/requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ pytest-runner==4.2
33
pytest-timeout==1.3.2
44
pytest-mock==1.10.0
55
pytest-xdist==1.23.2
6+
pytest-django==3.4.3
67
pybind11>=2.2
8+
invoke==1.2.0

environment.devenv.yml

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ dependencies:
88
- pytest-mock
99
- pytest-xdist
1010
- pytest-timeout
11+
- pytest-django
1112
- yapf
1213
- isort
1314
- pylint
15+
- invoke

pytest.ini

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
[pytest]
22
addopts = --basetemp=tmp
33
timeout = 10
4+
python_files = tests.py test_*.py *_tests.py
5+
DJANGO_SETTINGS_MODULE = tests.settings

setup.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from setuptools import setup
22

3-
setup(name='django-pymodsecurity',
4-
version='0.0.1',
5-
description='Django middleware for ModSecurity.',
6-
url='https://github.com/GustavoKatel/django-pymodsecurity',
7-
author='GustavoKatel',
8-
author_email='[email protected]',
9-
license='MIT',
10-
packages=['django_pymodsecurity'],
11-
install_requires=[
12-
'Django',
13-
],
14-
zip_safe=False)
3+
setup(
4+
name='django-pymodsecurity',
5+
version='0.0.1',
6+
description='Django middleware for ModSecurity.',
7+
url='https://github.com/GustavoKatel/django-pymodsecurity',
8+
author='GustavoKatel',
9+
author_email='[email protected]',
10+
license='MIT',
11+
packages=['django_pymodsecurity'],
12+
install_requires=[
13+
'Django',
14+
],
15+
zip_safe=False)

tasks.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import glob
2+
import os
3+
4+
from invoke import task
5+
6+
SOURCE_PATH = 'django_pymodsecurity'
7+
TESTS_PATH = 'tests'
8+
9+
10+
@task
11+
def format(ctx, noimports=False, nostyle=False):
12+
if not noimports:
13+
from isort import SortImports
14+
15+
if not nostyle:
16+
from yapf.yapflib.yapf_api import FormatFile
17+
18+
for filename in glob.glob('**/*.py', recursive=True):
19+
if not noimports:
20+
SortImports(filename)
21+
if not nostyle:
22+
FormatFile(filename, in_place=True)
23+
24+
25+
@task
26+
def test(ctx, n='auto', m='1', debug=False, nocapture=False):
27+
import pytest
28+
args = [
29+
'-n=%s' % n,
30+
'-m=%s' % m,
31+
]
32+
33+
if debug:
34+
args.append('-vv')
35+
36+
if nocapture:
37+
args.append('--capture=no')
38+
39+
pytest.main(args)

tests/conftest.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
import pytest
2+
from django.conf import settings
23

34
pytest_plugins = ['tests.fixtures']
5+
6+
7+
# def pytest_configure():
8+
# settings.configure()

tests/fixtures.py

-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import os
22

33
import pytest
4-
from django.conf import settings
54
from django.test import RequestFactory, override_settings
65

76
import ModSecurity
87
from django_pymodsecurity.middleware import PyModSecurityMiddleware
98

10-
settings.configure()
11-
129

1310
class GetResponseMock(object):
1411
def __init__(self, mock_response=None):

tests/settings.py

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import os
2+
3+
from django.conf.global_settings import *
4+
5+
SECRET_KEY = 'dev'
6+
7+
DEBUG = False
8+
9+
ALLOWED_HOSTS = []
10+
11+
INSTALLED_APPS = [
12+
'django.contrib.admin',
13+
'django.contrib.auth',
14+
'django.contrib.contenttypes',
15+
'django.contrib.sessions',
16+
'django.contrib.messages',
17+
'django.contrib.staticfiles',
18+
]
19+
20+
MIDDLEWARE = [
21+
'django_pymodsecurity.middleware.PyModSecurityMiddleware',
22+
'django.contrib.sessions.middleware.SessionMiddleware',
23+
'django.middleware.common.CommonMiddleware',
24+
'django.middleware.csrf.CsrfViewMiddleware',
25+
'django.contrib.auth.middleware.AuthenticationMiddleware',
26+
'django.contrib.messages.middleware.MessageMiddleware',
27+
'django.middleware.clickjacking.XFrameOptionsMiddleware',
28+
]
29+
30+
ROOT_URLCONF = 'tests.urls'
31+
32+
TEMPLATES = [
33+
{
34+
'BACKEND': 'django.template.backends.django.DjangoTemplates',
35+
'DIRS': [],
36+
'APP_DIRS': True,
37+
'OPTIONS': {
38+
'context_processors': [
39+
'django.template.context_processors.debug',
40+
'django.template.context_processors.request',
41+
'django.contrib.auth.context_processors.auth',
42+
'django.contrib.messages.context_processors.messages',
43+
],
44+
},
45+
},
46+
]
47+
48+
DATABASES = {
49+
'default': {
50+
'ENGINE': 'django.db.backends.sqlite3',
51+
'NAME': ':memory:',
52+
}
53+
}
54+
55+
AUTH_PASSWORD_VALIDATORS = []
56+
57+
LANGUAGE_CODE = 'en-us'
58+
59+
TIME_ZONE = 'UTC'
60+
61+
USE_I18N = True
62+
63+
USE_L10N = True
64+
65+
USE_TZ = True
66+
67+
STATIC_URL = '/static/'

tests/test_integration_request.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import pytest
2+
3+
4+
@pytest.mark.wip
5+
@pytest.mark.timeout(-1)
6+
def test_request(client):
7+
response = client.get('/')
8+
9+
print(response)

tests/urls.py

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from django.contrib import admin
2+
from django.urls import path
3+
4+
urlpatterns = []

0 commit comments

Comments
 (0)