def test_basic_edit(self): original_xml = self.get_xml('original') edit_xml = self.get_xml('edit') xform = post_xform(original_xml, domain=self.domain) self.assertEqual(self.ID, xform.form_id) self.assertTrue(xform.is_normal) self.assertEqual("", xform.form_data['vitals']['height']) self.assertEqual("other", xform.form_data['assessment']['categories']) xform = post_xform(edit_xml, domain=self.domain) self.assertEqual(self.ID, xform.form_id) self.assertTrue(xform.is_normal) self.assertEqual("100", xform.form_data['vitals']['height']) self.assertEqual("Edited Baby!", xform.form_data['assessment']['categories']) deprecated_xform = self.formdb.get_form(xform.deprecated_form_id) self.assertEqual(self.ID, deprecated_xform.orig_id) self.assertNotEqual(self.ID, deprecated_xform.form_id) self.assertTrue(deprecated_xform.is_deprecated) self.assertEqual("", deprecated_xform.form_data['vitals']['height']) self.assertEqual( "other", deprecated_xform.form_data['assessment']['categories']) self.assertEqual(xform.received_on, deprecated_xform.received_on) self.assertEqual(xform.deprecated_form_id, deprecated_xform.form_id) self.assertTrue(xform.edited_on > deprecated_xform.received_on) self.assertEqual(deprecated_xform.get_xml(), original_xml) self.assertEqual(xform.get_xml(), edit_xml)
def test_basic_edit(self): original_xml = self.get_xml('original') edit_xml = self.get_xml('edit') xform = post_xform(original_xml, domain=self.domain) self.assertEqual(self.ID, xform.form_id) self.assertTrue(xform.is_normal) self.assertEqual("", xform.form_data['vitals']['height']) self.assertEqual("other", xform.form_data['assessment']['categories']) xform = post_xform(edit_xml, domain=self.domain) self.assertEqual(self.ID, xform.form_id) self.assertTrue(xform.is_normal) self.assertEqual("100", xform.form_data['vitals']['height']) self.assertEqual("Edited Baby!", xform.form_data['assessment']['categories']) deprecated_xform = self.formdb.get_form(xform.deprecated_form_id) self.assertEqual(self.ID, deprecated_xform.orig_id) self.assertNotEqual(self.ID, deprecated_xform.form_id) self.assertTrue(deprecated_xform.is_deprecated) self.assertEqual("", deprecated_xform.form_data['vitals']['height']) self.assertEqual("other", deprecated_xform.form_data['assessment']['categories']) self.assertEqual(xform.received_on, deprecated_xform.received_on) self.assertEqual(xform.deprecated_form_id, deprecated_xform.form_id) self.assertTrue(xform.edited_on > deprecated_xform.received_on) self.assertEqual( deprecated_xform.get_xml(), original_xml ) self.assertEqual(xform.get_xml(), edit_xml)
def test_basic_duplicate(self): xml_data = self.get_xml('duplicate') xform = post_xform(xml_data) self.assertEqual(self.ID, xform.form_id) self.assertTrue(xform.is_normal) self.assertEqual("test-domain", xform.domain) xform = post_xform(xml_data, domain='test-domain') self.assertNotEqual(self.ID, xform.form_id) self.assertTrue(xform.is_duplicate) self.assertTrue(self.ID in xform.problem)
def test_basic_duplicate(self): xml_data = self.get_xml('duplicate') xform = post_xform(xml_data) self.assertEqual(self.ID, xform.form_id) self.assertTrue(xform.is_normal) self.assertEqual("test-domain", xform.domain) xform = post_xform(xml_data, domain='test-domain') self.assertNotEqual(self.ID, xform.form_id) self.assertTrue(xform.is_duplicate) self.assertTrue(self.ID in xform.problem) if settings.TESTS_SHOULD_USE_SQL_BACKEND: self.assertEqual(self.ID, xform.orig_id)
def test_gps_location(self): xml_data = self.get_xml('gps_location', override_path=('data', )) xform = post_xform(xml_data) self.assertEqual( xform.metadata.location, # '42.3739063 -71.1109113 0.0 886.0' GeoPoint( latitude=Decimal('42.3739063'), longitude=Decimal('-71.1109113'), altitude=Decimal('0.0'), accuracy=Decimal('886.0'), )) result = { 'username': u'*****@*****.**', 'doc_type': 'Metadata', 'instanceID': u'5d3d01561f584e85b53669a48bfc6039', 'userID': u'f7f0c79e-8b79-11df-b7de-005056c00008', 'timeEnd': '2013-07-20T00:02:27.493000Z', 'appVersion': u'2.0', 'timeStart': '2013-07-19T21:21:31.188000Z', 'deprecatedID': None, 'deviceID': u'commconnect', 'location': '42.3739063 -71.1109113 0.0 886.0', } self._check_metadata(xform, result)
def testClosed(self): xml_data = self.get_xml('meta') xform = post_xform(xml_data) self.assertNotEqual(None, xform.metadata) self.assertEqual(date(2010, 07, 22), xform.metadata.timeStart.date()) self.assertEqual(date(2010, 07, 23), xform.metadata.timeEnd.date()) self.assertEqual("admin", xform.metadata.username) self.assertEqual("f7f0c79e-8b79-11df-b7de-005056c00008", xform.metadata.userID) self.assertEqual("v1.2.3 (biz bazzle)", xform.metadata.appVersion) result = { 'username': u'admin', 'doc_type': 'Metadata', 'instanceID': None, 'userID': u'f7f0c79e-8b79-11df-b7de-005056c00008', 'timeEnd': '2010-07-23T13:55:11.648000Z', 'appVersion': u'v1.2.3 (biz bazzle)', 'timeStart': '2010-07-22T13:54:27.971000Z', 'deprecatedID': None, 'deviceID': None, 'clinic_id': u'5020280', 'location': None, } self._check_metadata(xform, result)
def test_gps_location(self): xml_data = self.get_xml('gps_location', override_path=('data',)) xform = post_xform(xml_data) self.assertEqual( xform.metadata.location, # '42.3739063 -71.1109113 0.0 886.0' GeoPoint( latitude=Decimal('42.3739063'), longitude=Decimal('-71.1109113'), altitude=Decimal('0.0'), accuracy=Decimal('886.0'), ) ) result = { 'username': u'*****@*****.**', 'doc_type': 'Metadata', 'instanceID': u'5d3d01561f584e85b53669a48bfc6039', 'userID': u'f7f0c79e-8b79-11df-b7de-005056c00008', 'timeEnd': '2013-07-20T00:02:27.493000Z', 'appVersion': u'2.0', 'timeStart': '2013-07-19T21:21:31.188000Z', 'deprecatedID': None, 'deviceID': u'commconnect', 'location': '42.3739063 -71.1109113 0.0 886.0', } self._check_metadata(xform, result)
def test_empty_gps_location(self): xml_data = self.get_xml('gps_empty_location', override_path=('data', )) xform = post_xform(xml_data) self.assertEqual(xform.metadata.location, None) self.assertEqual(xform.metadata.to_json()['location'], None)
def test_empty_gps_location(self): xml_data = self.get_xml('gps_empty_location', override_path=('data',)) xform = post_xform(xml_data) self.assertEqual( xform.metadata.location, None ) self.assertEqual(xform.metadata.to_json()['location'], None)
def test_various_encodings(self): tests = (("utf-8", u"हिन्दी चट्टानों"), ("UTF-8", u"हिन्दी चट्टानों"), ("ASCII", "hello")) xml_template = self.get_xml("encoding") for encoding, value in tests: xml_data = xml_template.format( encoding=encoding, form_id=uuid.uuid4().hex, sample_value=value.encode(encoding) ) xform = post_xform(xml_data) self.assertEqual(value, xform.form_data["test"]) elem = xform.get_xml_element() self.assertEqual(value, elem.find("{http://commcarehq.org/couchforms-tests}test").text)
def _test(self, name, any_id_ok=False, tz_differs=False): instance = self.get_xml(name) expected = self.get_json(self._get_expected_name(name, tz_differs)) xform = post_xform(instance) xform_json = json.loads(json.dumps(xform.to_json())) if getattr(settings, 'TESTS_SHOULD_USE_SQL_BACKEND', False): expected, xform_json = self._process_sql_json(expected, xform_json, any_id_ok) else: expected, xform_json = self._process_couch_json(expected, xform_json, any_id_ok) self.assertDictEqual(xform_json, expected)
def testClosed(self): xml_data = self.get_xml("namespaces") xform = post_xform(xml_data) self.assertEqual("http://commcarehq.org/test/ns", xform.xmlns) self._assert_xmlns("no namespace here", xform, "form/empty") self._assert_xmlns("http://commcarehq.org/test/flatns", xform, "form/flat", True) self._assert_xmlns("http://commcarehq.org/test/parent", xform, "form/parent", True) self._assert_xmlns("cwo", xform, "form/parent/childwithout") self._assert_xmlns("http://commcarehq.org/test/child1", xform, "form/parent/childwith", True) self._assert_xmlns("http://commcarehq.org/test/child2", xform, "form/parent/childwithelement", True) self._assert_xmlns("gc", xform, "form/parent/childwithelement/grandchild") self._assert_xmlns("lcwo", xform, "form/parent/lastchildwithout") self._assert_xmlns("nothing here either", xform, "form/lastempty")
def _test(self, name, any_id_ok=False, tz_differs=False): instance = self.get_xml(name) expected = self.get_json(self._get_expected_name(name, tz_differs)) xform = post_xform(instance) xform_json = json.loads(json.dumps(xform.to_json())) if getattr(settings, 'TESTS_SHOULD_USE_SQL_BACKEND', False): expected, xform_json = self._process_sql_json( expected, xform_json, any_id_ok) else: expected, xform_json = self._process_couch_json( expected, xform_json, any_id_ok) self.assertDictEqual(xform_json, expected)
def testMetaBadUsername(self): xml_data = self.get_xml('meta_bad_username') xform = post_xform(xml_data) self.assertEqual(xform.metadata.appVersion, '2.0') result = { 'username': u'2013-07-19', 'doc_type': 'Metadata', 'instanceID': u'e8afaec3c66745ef80e48062d4b91b56', 'userID': u'f7f0c79e-8b79-11df-b7de-005056c00008', 'timeEnd': '2013-07-20T00:02:27.493000Z', 'appVersion': u'2.0', 'timeStart': '2013-07-19T21:21:31.188000Z', 'deprecatedID': None, 'deviceID': u'commconnect', 'location': None, } self._check_metadata(xform, result)
def test_various_encodings(self): tests = ( ('utf-8', u'हिन्दी चट्टानों'), ('UTF-8', u'हिन्दी चट्टानों'), ('ASCII', 'hello'), ) xml_template = self.get_xml('encoding') for encoding, value in tests: xml_data = xml_template.format( encoding=encoding, form_id=uuid.uuid4().hex, sample_value=value.encode(encoding), ) xform = post_xform(xml_data) self.assertEqual(value, xform.form_data['test']) elem = xform.get_xml_element() self.assertEqual(value, elem.find('{http://commcarehq.org/couchforms-tests}test').text)
def testMetaAppVersionDict(self): xml_data = self.get_xml('meta_dict_appversion') xform = post_xform(xml_data) self.assertEqual(xform.metadata.appVersion, '2.0') result = { 'username': u'*****@*****.**', 'doc_type': 'Metadata', 'instanceID': u'5d3d01561f584e85b53669a48bfc6039', 'userID': u'f7f0c79e-8b79-11df-b7de-005056c00008', 'timeEnd': '2013-07-20T00:02:27.493000Z', 'appVersion': u'2.0', 'timeStart': '2013-07-19T21:21:31.188000Z', 'deprecatedID': None, 'deviceID': u'commconnect', 'location': None, } self._check_metadata(xform, result)
def testClosed(self): xml_data = self.get_xml('namespaces') xform = post_xform(xml_data) self.assertEqual("http://commcarehq.org/test/ns", xform.xmlns) self._assert_xmlns('no namespace here', xform, 'form/empty') self._assert_xmlns('http://commcarehq.org/test/flatns', xform, 'form/flat', True) self._assert_xmlns('http://commcarehq.org/test/parent', xform, 'form/parent', True) self._assert_xmlns('cwo', xform, 'form/parent/childwithout') self._assert_xmlns('http://commcarehq.org/test/child1', xform, 'form/parent/childwith', True) self._assert_xmlns('http://commcarehq.org/test/child2', xform, 'form/parent/childwithelement', True) self._assert_xmlns('gc', xform, 'form/parent/childwithelement/grandchild') self._assert_xmlns('lcwo', xform, 'form/parent/lastchildwithout') self._assert_xmlns('nothing here either', xform, 'form/lastempty')
def test_wrong_doc_type(self): domain = 'test-domain' instance = self.get_xml('duplicate') # Post an xform with an alternate doc_type xform1 = post_xform(instance, domain=domain) # Change the doc_type of the form by archiving it xform1.archive() xform1 = FormAccessors().get_form(xform1.form_id) self.assertTrue(xform1.is_archived) # Post an xform with that has different doc_type but same id _, xform2, _ = submit_form_locally( instance, domain=domain, ) self.assertNotEqual(xform1.form_id, xform2.form_id)
def testDecimalAppVersion(self): ''' Tests that an appVersion that looks like a decimal: (a) is not converted to a Decimal by couchdbkit (b) does not crash anything ''' xml_data = self.get_xml('decimalmeta') xform = post_xform(xml_data) self.assertEqual(xform.metadata.appVersion, '2.0') result = { 'username': u'admin', 'doc_type': 'Metadata', 'instanceID': None, 'userID': u'f7f0c79e-8b79-11df-b7de-005056c00008', 'timeEnd': '2010-07-23T13:55:11.648000Z', 'appVersion': u'2.0', 'timeStart': '2010-07-22T13:54:27.971000Z', 'deprecatedID': None, 'deviceID': None, 'clinic_id': u'5020280', 'location': None, } self._check_metadata(xform, result)
def testMetaDateInDatetimeFields(self): xml_data = self.get_xml('date_in_meta', override_path=('data', )) xform = post_xform(xml_data) self.assertEqual(datetime(2014, 7, 10), xform.metadata.timeStart) self.assertEqual(datetime(2014, 7, 11), xform.metadata.timeEnd)
def testMetaDateInDatetimeFields(self): xml_data = self.get_xml('date_in_meta', override_path=('data',)) xform = post_xform(xml_data) self.assertEqual(datetime(2014, 7, 10), xform.metadata.timeStart) self.assertEqual(datetime(2014, 7, 11), xform.metadata.timeEnd)
def test_missing_meta_key(self): xml_data = self.get_xml('missing_date_in_meta', override_path=('data', )) xform = post_xform(xml_data) self.assertEqual(datetime(2014, 7, 10), xform.metadata.timeStart) self.assertIsNone(xform.metadata.timeEnd)
def test_missing_meta_key(self): xml_data = self.get_xml('missing_date_in_meta', override_path=('data',)) xform = post_xform(xml_data) self.assertEqual(datetime(2014, 7, 10), xform.metadata.timeStart) self.assertIsNone(xform.metadata.timeEnd)