Skip to content

Commit

Permalink
Add connection to sumbmission import
Browse files Browse the repository at this point in the history
  • Loading branch information
ericnewcomer committed Dec 11, 2010
1 parent 154ba41 commit 4a1c9d5
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 12 deletions.
9 changes: 5 additions & 4 deletions rapidsms_xforms/models.py
Expand Up @@ -3,6 +3,7 @@
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.db import models
from django.db import connections, router, transaction, DEFAULT_DB_ALIAS
from eav.models import Attribute, Value
from eav import register
from eav.managers import EntityManager
Expand Down Expand Up @@ -206,7 +207,7 @@ def process_odk_submission(self, xml, values):

return submission

def process_import_submission(self, raw, values):
def process_import_submission(self, raw, connection, values):
"""
Given a dict of values and the original row, import the data
as a submission. Validates against contraints including checking
Expand All @@ -226,9 +227,9 @@ def process_import_submission(self, raw, values):
field.clean_submission(values[field.command])

# check if the values contain extra fields not in our form
for command, value in values.items():
for command, value in values.items():
fields = self.fields.filter(command=command)
if len(fields) != 1:
if len(fields) != 1 and command != "connection":
raise ValidationError("Could not resolve field for %s" % command)

# resolve object types to their actual objects
Expand All @@ -238,7 +239,7 @@ def process_import_submission(self, raw, values):
values[field.command] = typedef['parser'](field.command, values[field.command])

# create submission and update the values
submission = self.submissions.create(type='import', raw=raw)
submission = self.submissions.create(type='import', raw=raw, connection=connection)
self.update_submission_from_dict(submission, values)
return submission

Expand Down
21 changes: 13 additions & 8 deletions rapidsms_xforms/tests.py
Expand Up @@ -11,6 +11,7 @@
from django.contrib.sites.models import Site
from .app import App
from rapidsms.messages.incoming import IncomingMessage
from rapidsms.models import Connection, Backend

class ModelTest(TestCase): #pragma: no cover

Expand Down Expand Up @@ -773,45 +774,49 @@ def parse_timespan(command, value):

def testImportSubmissions(self):

# our fake submitter
backend, created = Backend.objects.get_or_create(name='test')
connection, created = Connection.objects.get_or_create(identity='123', backend=backend)

# Our form has fields: gender, age, and name (optional)
# try passing a string for an int field
values = { 'gender': 'male', 'age': 'Should be number', 'name': 'Eugene'}
self.assertRaises(ValidationError, self.xform.process_import_submission, "", values)
self.assertRaises(ValidationError, self.xform.process_import_submission, "", connection, values)
self.assertEquals(0, len(self.xform.submissions.all()))

# try sending something that is not a string
values = { 'age': 25, 'gender': 'male', 'name': 'Eugene'}
self.assertRaises(TypeError, self.xform.process_import_submission, "", values)
self.assertRaises(TypeError, self.xform.process_import_submission, "", connection, values)
self.assertEquals(0, len(self.xform.submissions.all()))

# try excluding an optional field
values = { 'age': '25', 'gender': 'male'}
self.xform.process_import_submission("", values)
self.xform.process_import_submission("", connection, values)
self.assertEquals(1, len(self.xform.submissions.all()))

# try excluding a required field
values = { 'gender': 'male', 'name': 'Eugene'}
self.assertRaises(ValidationError, self.xform.process_import_submission, "", values)
self.assertRaises(ValidationError, self.xform.process_import_submission, "", connection, values)
self.assertEquals(1, len(self.xform.submissions.all()))

# check that constraint is upheld
self.field.constraints.create(type='max_val', test='100', message="Nobody is that old")
self.field.constraints.create(type='min_val', test='0', message="You are negative old")

values = { 'gender': 'male', 'age': '900', 'name': 'Eugene'}
self.assertRaises(ValidationError, self.xform.process_import_submission, "", values)
self.assertRaises(ValidationError, self.xform.process_import_submission, "", connection, values)
self.assertEquals(1, len(self.xform.submissions.all()))

values = { 'gender': 'male', 'age': '-1', 'name': 'Eugene'}
self.assertRaises(ValidationError, self.xform.process_import_submission, "", values)
self.assertRaises(ValidationError, self.xform.process_import_submission, "", connection, values)
self.assertEquals(1, len(self.xform.submissions.all()))

# try sending extra fields that are not in the form
values = { 'gender': 'male', 'age': 'Should be number', 'name': 'Eugene', 'extra': "This shouldn't be provided"}
self.assertRaises(ValidationError, self.xform.process_import_submission, "", values)
self.assertRaises(ValidationError, self.xform.process_import_submission, "", connection, values)
self.assertEquals(1, len(self.xform.submissions.all()))

# try sending extra fields that are not in the form
values = { 'gender': 'male', 'age': '99', 'name': 'Eugene'}
self.xform.process_import_submission("", values)
self.xform.process_import_submission("", connection, values)
self.assertEquals(2, len(self.xform.submissions.all()))

0 comments on commit 4a1c9d5

Please sign in to comment.