Skip to content

Commit

Permalink
Trying to get all the tests to run
Browse files Browse the repository at this point in the history
  • Loading branch information
ribalba committed Jul 29, 2014
1 parent 582df90 commit 21826f1
Show file tree
Hide file tree
Showing 39 changed files with 372 additions and 160 deletions.
7 changes: 5 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ install:
- python manage.py syncdb --noinput
- python manage.py migrate --noinput
script:
- python manage.py test --noinput --settings=formhub.preset.travis_test
- python manage.py test --noinput --settings=formhub.preset.ehealth_test
- ./js_tests/EnvJasmine/bin/run_all_tests.sh --testDir=../ --configFile=../env_jasmine.conf.js
notifications:
irc: "irc.freenode.org#sel-columbia"
email:
- [email protected]
flowdock: 232485f7661e644ae5878944c2597042

1 change: 0 additions & 1 deletion api/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
from tests import *
10 changes: 9 additions & 1 deletion api/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
from tests import *
from test_api import *
from test_data_api import *
from test_forms_api import *
from test_models import *
from test_orgs_api import *
from test_profiles_api import *
from test_projects_api import *
from test_teams_api import *
from test_users_api import *
65 changes: 65 additions & 0 deletions formhub/preset/ehealth_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#
# Alter this skeleton to agree with the needs of your local environment

# Note: if you are using a URL 12-Factor configuration scheme, you will not be using this file

# important thing we do here is to import all those symbols that are defined in settings.py
from ..settings import * # get most settings from ../settings.py

import os

# or perhaps you would prefer something like:
# from staging import * # which in turn imports ../settings.py

import logging
import tempfile
south_logger=logging.getLogger('south')
south_logger.setLevel(logging.INFO)


# # # and now you can override the settings which we just got from settings.py # # # #

# for example, choose a different database...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'FormhubDjangoDB',
'USER': 'postgres',
'PASSWORD': '',
'HOST': '',
#'OPTIONS': {
# 'autocommit': True, # NOTE: this option becomes obsolete in django 1.6
#}
},
}
# or:
DEBUG = True

SECRET_KEY = 'mlfs33^s1l4xf6a36$0#srgcpj%dd*sisfo6HOktYXB9y'

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

TESTING_MODE = True


TOUCHFORMS_URL = 'http://localhost:8000/'

ENKETO_URL = 'https://enketo.org/'
#ENKETO_API_TOKEN = 'nfg5qaxk5oe'

#this token is needed for testing
ENKETO_API_TOKEN = 'abc'

CELERY_ALWAYS_EAGER = True
CELERY_EAGER_PROPAGATES_EXCEPTIONS = True


BROKER_BACKEND = 'memory'

#MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')

_temp_media = tempfile.mkdtemp()
MEDIA_ROOT = _temp_media
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')

#DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
5 changes: 2 additions & 3 deletions formhub/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

from pymongo import MongoClient


import djcelery
djcelery.setup_loader()

Expand Down Expand Up @@ -190,7 +189,7 @@
'djcelery',
'stats',
'sms_support',
'django_nose',
# 'django_nose',
)

OAUTH2_PROVIDER = {
Expand Down Expand Up @@ -221,7 +220,7 @@
)
}

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
#TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

SWAGGER_SETTINGS = {
"exclude_namespaces": [], # List URL namespaces to ignore
Expand Down
2 changes: 1 addition & 1 deletion formhub/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@
url(r"^(?P<username>\w+)/forms/(?P<id_string>[^/]+)/form\.xls$", 'odk_logger.views.download_xlsform', name="download_xlsform"),
url(r"^(?P<username>\w+)/forms/(?P<id_string>[^/]+)/form\.json", 'odk_logger.views.download_jsonform', name="download_jsonform"),
url(r"^(?P<username>\w+)/delete/(?P<id_string>[^/]+)/$", 'odk_logger.views.delete_xform'),
# url(r"^(?P<username>\w+)/(?P<id_string>[^/]+)/toggle_form_active/$", 'odk_logger.views.toggle_form_active'),
url(r"^(?P<username>\w+)/(?P<id_string>[^/]+)/toggle_form_active/$", 'odk_logger.views.toggle_form_active'),

# SMS support
url(r'^(?P<username>[^/]+)/forms/(?P<id_string>[^/]+)/sms_submission/(?P<service>[a-z]+)/?$', 'sms_support.providers.import_submission_for_form', name='sms_submission_form_api'),
Expand Down
9 changes: 5 additions & 4 deletions main/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,10 +291,11 @@ def publish(self, user, id_string=None):
else:
cleaned_xls_file = self.cleaned_data['xls_file']

#We need to save it here so if the file already exists we get the _N filename
cleaned_xls_file = default_storage.save(\
cleaned_xls_file.name, \
ContentFile(cleaned_xls_file.read()))
if cleaned_xls_file and not settings.TESTING_MODE:
#We need to save it here so if the file already exists we get the _N filename
cleaned_xls_file = default_storage.save(\
cleaned_xls_file.name, \
ContentFile(cleaned_xls_file.read()))

if not cleaned_xls_file:
cleaned_url = self.cleaned_data['xls_url']
Expand Down
6 changes: 4 additions & 2 deletions main/models/meta_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
from odk_logger.models import XForm

from hashlib import md5
from django.conf import settings


def upload_to(instance, filename):
if instance.data_type == 'media':
return os.path.join(
return os.path.join(settings.MEDIA_ROOT,
instance.xform.user.username,
'formid-media',
filename
)
return os.path.join(
return os.path.join(settings.MEDIA_ROOT,
instance.xform.user.username,
'docs',
filename
Expand Down Expand Up @@ -95,6 +96,7 @@ def supporting_docs(xform, data_file=None):
data_file=data_file,
data_file_type=data_file.content_type)
doc.save()

return type_for_form(xform, data_type)

@staticmethod
Expand Down
2 changes: 1 addition & 1 deletion main/templates/show.html
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ <h3 data-toggle="collapse" class="toggler" data-target="#map_tab">{% trans "Mapb
<h3 data-toggle="collapse" class="toggler" data-target="#sms_tab">{% trans "SMS Support" %} (<acronym title="SMS Support is in beta stage now. Please use carefully as API and IDs might change.">beta</acronym>)</h3>
<div id='sms_tab' class="collapse">
<form action="{% url "main.views.edit" content_user.username xform.id_string %}" method="post" enctype="multipart/form-data">

{% if xform.allows_sms %}
<p>{% blocktrans %}This form has enabled SMS submissions.{% endblocktrans %} {% blocktrans with id_string=xform.sms_id_string %}Submit to this form using the “<em>{{ id_string }}</em>” identifier.{% endblocktrans %}</p>
{% endif %}
Expand Down
58 changes: 29 additions & 29 deletions main/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
#from test_crowdforms import TestCrowdforms
#from test_csv_export import TestExport
#from test_form_api import TestFormAPI
#from test_form_public_api import TestFormPublicAPI
#from test_form_auth import TestFormAuth
#from test_form_edit import TestFormEdit
#from test_form_enter_data import TestFormEnterData
#from test_form_errors import TestFormErrors
#from test_form_exports import TestFormExports
#from test_form_gallery import TestFormGallery
#from test_form_metadata import TestFormMetadata
#from test_form_permissions import TestFormPermissions
#from test_form_show import TestFormShow
#from test_form_show_submission import TestFormShowSubmission
#from test_google_docs_export import TestGoogleDocsExport
#from test_google_doc import TestGoogleDoc
#from test_gps import TestGPS
#from test_http_auth import TestBasicHttpAuthentication
#from test_kml_export import TestKMLExport
#from test_past_bugs import TestCSVExport, TestInputs, TestSubmissionBugs,\
# TestCascading
#from test_process import TestSite
#from test_user_id_string_unique_together import TestUnique
#from test_user_login import TestUserLogin
#from test_user_login import TestUserReservedNames
#from test_user_profile import TestUserProfile
#from test_user_settings import TestUserSettings
#from test_form_api_delete import TestFormAPIDelete
#from test_audit_log import TestAuditLog
from test_audit_log import *
from test_base import *
from test_crowdforms import *
from test_csv_export import *
from test_form_api import *
from test_form_api_delete import *
from test_form_auth import *
from test_form_edit import *
from test_form_enter_data import *
from test_form_errors import *
from test_form_exports import *
from test_form_gallery import *
from test_form_metadata import *
from test_form_permissions import *
from test_form_public_api import *
from test_form_show import *
from test_form_show_submission import *
from test_google_doc import *
from test_google_docs_export import *
from test_gps import *
from test_http_auth import *
from test_kml_export import *
from test_past_bugs import *
from test_people_roles import *
from test_process import *
from test_user_id_string_unique_together import *
from test_user_login import *
from test_user_profile import *
from test_user_settings import *
47 changes: 43 additions & 4 deletions main/tests/test_base.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from __future__ import print_function
import base64
import os
import re
Expand All @@ -12,9 +11,14 @@
from django_digest.test import Client as DigestClient
from django.test import TestCase
from django.test.client import Client
from django.conf import settings

from odk_logger.models import XForm, Instance, Attachment
from django.conf import settings

import shutil
import tempfile




class MainTestCase(TestCase):
Expand All @@ -31,8 +35,41 @@ def setUp(self):

def tearDown(self):
# clear mongo db after each test
settings.MONGO_DB.instances.drop()

self._teardown_test_environment()

settings.MONGO_DB.instances.drop()


def _setup_test_environment(self):
"Create temp directory and update MEDIA_ROOT and default storage."
if not hasattr(settings, "_original_media_root" ):
settings._original_media_root = settings.MEDIA_ROOT

if not hasattr(settings, "_original_file_storage" ):
settings._original_file_storage = settings.DEFAULT_FILE_STORAGE

if not hasattr(self, "_temp_media" ):
self._temp_media = tempfile.mkdtemp()
settings.MEDIA_ROOT = self._temp_media
settings.DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'


def _teardown_test_environment(self):
"Delete temp storage."
if hasattr(self, "_temp_media" ):
shutil.rmtree(self._temp_media, ignore_errors=True)
del self._temp_media

if hasattr(settings, "_original_media_root" ):
settings.MEDIA_ROOT = settings._original_media_root
del settings._original_media_root

if hasattr(settings, "_original_file_storage" ):
settings.DEFAULT_FILE_STORAGE = settings._original_file_storage
del settings._original_file_storage


def _create_user(self, username, password):
user, created = User.objects.get_or_create(username=username)
user.set_password(password)
Expand Down Expand Up @@ -123,6 +160,7 @@ def _make_submission(self, path, username=None, add_uuid=False,
touchforms=False, forced_submission_time=None):
# store temporary file with dynamic uuid
tmp_file = None

if add_uuid and not touchforms:
tmp_file = NamedTemporaryFile(delete=False)
split_xml = None
Expand All @@ -141,13 +179,14 @@ def _make_submission(self, path, username=None, add_uuid=False,
if username is None:
username = self.user.username
url = '/%s/submission' % username

# touchforms submission
if add_uuid and touchforms:
post_data['uuid'] = self.xform.uuid
if touchforms:
url = '/submission' # touchform has no username

self.response = self.anon.post(url, post_data)


if forced_submission_time:
instance = Instance.objects.order_by('-pk').all()[0]
Expand Down
3 changes: 3 additions & 0 deletions main/tests/test_csv_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
class TestExport(MainTestCase):

def setUp(self):
self._setup_test_environment()

self._create_user_and_login()
self.fixture_dir = os.path.join(
self.this_directory, 'fixtures', 'csv_export')
Expand All @@ -21,6 +23,7 @@ def test_csv_export_url(self):
def test_csv_export_output(self):
path = os.path.join(self.fixture_dir, 'tutorial_w_repeats.xls')
self._publish_xls_file_and_set_xform(path)

path = os.path.join(self.fixture_dir, 'tutorial_w_repeats.xml')
self._make_submission(
path, forced_submission_time=self._submission_time)
Expand Down
10 changes: 6 additions & 4 deletions main/tests/test_form_enter_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ class TestFormEnterData(MainTestCase):

def setUp(self):
MainTestCase.setUp(self)
self._create_user_and_login()
#Already done by setUp
#self._create_user_and_login()
self._publish_transportation_form_and_submit_instance()
self.perm_url = reverse(set_perm, kwargs={
'username': self.user.username, 'id_string': self.xform.id_string})
Expand Down Expand Up @@ -75,7 +76,7 @@ def _get_grcode_view_response(self):
request, self.user.username, self.xform.id_string)
return response

@unittest.skipIf(settings.EHEALTH_AFRICA_OPTOMIZATIONS, 'No QRCODE on eHealth screens')
@unittest.skipIf(not hasattr(settings, "EHEALTH_AFRICA_OPTOMIZATIONS"), 'No QRCODE on eHealth screens')
def test_qrcode_view(self):
with HTTMock(enketo_mock):
response = self._get_grcode_view_response()
Expand All @@ -85,7 +86,7 @@ def test_qrcode_view(self):
data = f.read()
self.assertContains(response, data.strip(), status_code=200)

@unittest.skipIf(settings.EHEALTH_AFRICA_OPTOMIZATIONS, 'No QRCODE on eHealth screens')
@unittest.skipIf(not hasattr(settings, "EHEALTH_AFRICA_OPTOMIZATIONS"), 'No QRCODE on eHealth screens')
def test_qrcode_view_with_enketo_error(self):
with HTTMock(enketo_error_mock):
response = self._get_grcode_view_response()
Expand All @@ -98,8 +99,9 @@ def test_enter_data_redir(self):
request = factory.get('/')
request.user = self.user
response = enter_data(
request, self.user.username, self.xform.id_string)
request, self.user.username, self.xform.id_string, test_server="https://testserver.com/bob")
#make sure response redirect to an enketo site

enketo_base_url = urlparse(settings.ENKETO_URL).netloc
redirected_base_url = urlparse(response['Location']).netloc
#TODO: checking if the form is valid on enketo side
Expand Down
Loading

0 comments on commit 21826f1

Please sign in to comment.