Skip to content

Commit 6279a39

Browse files
committed
Move django tests out of the example app
1 parent fcaa9cf commit 6279a39

11 files changed

Lines changed: 161 additions & 5 deletions

File tree

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ services:
2828
- mongodb
2929

3030
script:
31+
- python runtests.py
3132
- python examples/django_app/manage.py test examples/django_app/
32-
- nosetests --with-coverage --cover-package=chatterbot
33+
- nosetests tests/ --with-coverage --cover-package=chatterbot
3334
- python tests/benchmarks.py
3435

3536
after_success:
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import json
2+
from django.test import TestCase
3+
from django.core.urlresolvers import reverse
4+
from django.utils.encoding import force_text
5+
from chatterbot.ext.django_chatterbot.views import ChatterBotView
6+
7+
8+
class ApiTestCase(TestCase):
9+
10+
def setUp(self):
11+
super(ApiTestCase, self).setUp()
12+
self.api_url = reverse('chatterbot:chatterbot')
13+
14+
def test_post(self):
15+
"""
16+
Test that a response is returned.
17+
"""
18+
data = {
19+
'text': 'How are you?'
20+
}
21+
response = self.client.post(
22+
self.api_url,
23+
data=json.dumps(data),
24+
content_type='application/json',
25+
format='json'
26+
)
27+
28+
self.assertEqual(response.status_code, 200)
29+
self.assertIn('text', str(response.content))
30+
self.assertIn('in_response_to', str(response.content))
31+
32+
def test_post_extra_data(self):
33+
post_data = {
34+
'text': 'Good morning.',
35+
'extra_data': {
36+
'user': 'jen@example.com'
37+
}
38+
}
39+
response = self.client.post(
40+
self.api_url,
41+
data=json.dumps(post_data),
42+
content_type='application/json',
43+
format='json'
44+
)
45+
46+
self.assertEqual(response.status_code, 200)
47+
self.assertIn('text', str(response.content))
48+
self.assertIn('extra_data', str(response.content))
49+
self.assertIn('in_response_to', str(response.content))
50+
51+
52+
class ApiIntegrationTestCase(TestCase):
53+
54+
def setUp(self):
55+
super(ApiIntegrationTestCase, self).setUp()
56+
self.api_url = reverse('chatterbot:chatterbot')
57+
58+
# Clear the response queue before tests
59+
ChatterBotView.chatterbot.conversation_sessions.get_default().conversation.flush()
60+
61+
def tearDown(self):
62+
super(ApiIntegrationTestCase, self).tearDown()
63+
64+
# Clear the response queue after tests
65+
ChatterBotView.chatterbot.conversation_sessions.get_default().conversation.flush()
66+
67+
def _get_json(self, response):
68+
return json.loads(force_text(response.content))
69+
70+
def test_get_conversation_empty(self):
71+
response = self.client.get(self.api_url)
72+
data = self._get_json(response)
73+
74+
self.assertIn('conversation', data)
75+
self.assertEqual(len(data['conversation']), 0)
76+
77+
def test_get_conversation(self):
78+
response = self.client.post(
79+
self.api_url,
80+
data=json.dumps({'text': 'How are you?'}),
81+
content_type='application/json',
82+
format='json'
83+
)
84+
85+
response = self.client.get(self.api_url)
86+
data = self._get_json(response)
87+
88+
self.assertIn('conversation', data)
89+
self.assertEqual(len(data['conversation']), 1)
90+
self.assertEqual(len(data['conversation'][0]), 2)
91+
self.assertIn('text', data['conversation'][0][0])
92+
self.assertIn('text', data['conversation'][0][1])

runtests.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
This is the test runner for the ChatterBot's Django tests.
5+
"""
6+
7+
import os
8+
import sys
9+
10+
import django
11+
from django.conf import settings
12+
from django.test.utils import get_runner
13+
14+
if __name__ == '__main__':
15+
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests_django.test_settings'
16+
django.setup()
17+
TestRunner = get_runner(settings)
18+
test_runner = TestRunner()
19+
failures = test_runner.run_tests(['tests_django'])
20+
sys.exit(bool(failures))

tests_django/__init__.py

Whitespace-only changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class ApiTestCase(TestCase):
77

88
def setUp(self):
99
super(ApiTestCase, self).setUp()
10-
self.api_url = reverse('chatterbot:chatterbot')
10+
self.api_url = reverse('chatterbot')
1111

1212
def test_post(self):
1313
"""

examples/django_app/tests/test_settings.py renamed to tests_django/test_chatterbot_settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ def test_modified_settings(self):
1212
def test_name_setting(self):
1313
from django.core.urlresolvers import reverse
1414

15-
api_url = reverse('chatterbot:chatterbot')
15+
api_url = reverse('chatterbot')
1616
response = self.client.get(api_url)
1717

1818
self.assertEqual(response.status_code, 405)
1919
self.assertIn('detail', str(response.content))
2020
self.assertIn('name', str(response.content))
21-
self.assertIn('Django ChatterBot Example', str(response.content))
21+
self.assertIn('Test Django ChatterBot', str(response.content))
File renamed without changes.
File renamed without changes.

examples/django_app/tests/test_integration.py renamed to tests_django/test_integration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class ApiIntegrationTestCase(TestCase):
1010

1111
def setUp(self):
1212
super(ApiIntegrationTestCase, self).setUp()
13-
self.api_url = reverse('chatterbot:chatterbot')
13+
self.api_url = reverse('chatterbot')
1414

1515
# Clear the response queue before tests
1616
ChatterBotView.chatterbot.conversation_sessions.get_default().conversation.flush()

tests_django/test_settings.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""
2+
Test Django settings
3+
"""
4+
import os
5+
6+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
7+
8+
SECRET_KEY = 'fake-key'
9+
10+
INSTALLED_APPS = [
11+
'django.contrib.auth',
12+
'django.contrib.contenttypes',
13+
'django.contrib.sessions',
14+
'chatterbot.ext.django_chatterbot',
15+
'tests_django',
16+
]
17+
18+
CHATTERBOT = {
19+
'name': 'Test Django ChatterBot',
20+
'trainer': 'chatterbot.trainers.ChatterBotCorpusTrainer',
21+
'training_data': [
22+
'chatterbot.corpus.english.greetings'
23+
]
24+
}
25+
26+
ROOT_URLCONF = 'chatterbot.ext.django_chatterbot.urls'
27+
28+
MIDDLEWARE_CLASSES = (
29+
'django.contrib.sessions.middleware.SessionMiddleware',
30+
'django.middleware.common.CommonMiddleware',
31+
'django.contrib.auth.middleware.AuthenticationMiddleware',
32+
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
33+
'django.contrib.messages.middleware.MessageMiddleware',
34+
'django.middleware.clickjacking.XFrameOptionsMiddleware',
35+
'django.middleware.security.SecurityMiddleware',
36+
)
37+
38+
DATABASES = {
39+
'default': {
40+
'ENGINE': 'django.db.backends.sqlite3',
41+
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
42+
}
43+
}

0 commit comments

Comments
 (0)