def testSaveFormData_8(self): """ Test repeated form definition created and data saved """ formdefmodel = create_xsd_and_populate("data/8_singlerepeat_2.xsd", domain=self.domain) self.assertEquals(int(formdefmodel.version), 2) self.assertEquals(int(formdefmodel.uiversion), 3) submission = populate("data/8_singlerepeat_2.xml", self.domain) m = Metadata.objects.get(attachment__submission=submission) self.assertEquals(int(m.version), 2) self.assertEquals(int(m.uiversion), 2) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_versioneddomain_xml_singlerepeat_2") try: row = cursor.fetchone() self.assertEquals(row[9],"deviceid0") self.assertEquals(row[10],"starttime") self.assertEquals(row[11],"endtime") cursor.execute("SELECT * FROM schema_versioneddomain_xml_singlerepeat_root_userid_2") row = cursor.fetchall() self.assertEquals(row[0][1],"userid0") self.assertEquals(row[1][1],"userid2") self.assertEquals(row[2][1],"userid3") self.assertEquals(row[0][2],1) self.assertEquals(row[1][2],1) self.assertEquals(row[2][2],1) finally: manager = XFormManager() manager.remove_schema(formdefmodel.id)
def testReSubmit(self): # original submission submission = populate("data/pf_followup_1.xml", domain=self.domain) self.assertEquals(submission.is_orphaned(),True) # register schema create_xsd_and_populate("data/pf_followup.xsd", domain=self.domain) # xformmanagger resubmission xformmanager = XFormManager() status = xformmanager.save_form_data(submission.xform) self.assertEquals(status,True)
def _testErrors(self, schema_file, instance_file, id): su = SU() xfm = XFM() xsd_file_name = os.path.join(os.path.dirname(__file__),schema_file) xml_file_name = os.path.join(os.path.dirname(__file__),instance_file) schema = xfm._add_schema_from_file(xsd_file_name) formdef = su.get_formdef_from_schema_file(xsd_file_name) data_tree = su._get_data_tree_from_file(xml_file_name) populator = XFormDBTablePopulator( formdef, schema ) queries = populator.populate( data_tree ) xfm.remove_schema(schema.id) return populator.errors
def testSaveFormData_7(self): """ Test very deep form definition created and data saved """ formdefmodel = create_xsd_and_populate("data/7_verydeep_2.xsd", "data/7_verydeep_2.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_versioneddomain_xml_verydeep_1") row = cursor.fetchone() try: self.assertEquals(row[9],"userid0") self.assertEquals(row[10],"great_grand1") self.assertEquals(row[11],222) self.assertEquals(row[12],1159) self.assertEquals(row[13],2002) finally: manager = XFormManager() manager.remove_schema(formdefmodel.id)
def create_xsd(xsd_file_name, domain=None, path=None): if not path: path = os.path.dirname(__file__) xsd_file_path = os.path.join(path,xsd_file_name) if xsd_file_name is None: return None f = open(xsd_file_path,"r") manager = XFormManager() formdefmodel = manager.add_schema(xsd_file_name, f, domain) f.close() # fake out the form submission formdefmodel.submit_ip = '127.0.0.1' formdefmodel.bytes_received = os.path.getsize(xsd_file_path) formdefmodel.form_display_name = 'mock display name' formdefmodel.domain = domain formdefmodel.save() return formdefmodel
def test4DeleteInstance(self): """ Test instance data deletion from XFormmanager """ formdefmodel_5 = create_xsd_and_populate("5_singlerepeat.xsd", domain=self.domain) instance_5 = populate("5_singlerepeat.xml", self.domain) formdefmodel_6 = create_xsd_and_populate("6_nestedrepeats.xsd", domain=self.domain) instance_6 = populate("6_nestedrepeats.xml", self.domain) xformmanager = XFormManager() num_handled = SubmissionHandlingOccurrence.objects.all().count() self.assertEquals(2,num_handled) count = Metadata.objects.all().count() self.assertEquals(2,count) # TODO - change this syntax once meta.attachment becomes meta.submission xformmanager.remove_data(formdefmodel_5.id, instance_5.xform.form_metadata.all()[0].raw_data ) xformmanager.remove_data(formdefmodel_6.id, instance_6.xform.form_metadata.all()[0].raw_data ) # test metadata deletion # Test that children have been marked as 'deleted' and are no longer 'initially handled' # (so that they are not considered 'orphans' i.e. unhandled) num_handled = SubmissionHandlingOccurrence.objects.all().count() self.assertEquals(2,num_handled) for handle_means in SubmissionHandlingOccurrence.objects.all(): self.assertEqual("deleted", handle_means.handled.method) self.assertFalse(instance_5.is_orphaned()) self.assertFalse(instance_6.is_orphaned()) count = Metadata.objects.all().count() self.assertEquals(0,count) # test raw data deletion if settings.DATABASE_ENGINE == 'mysql': cursor = connection.cursor() cursor.execute("SELECT * FROM schema_remdomain_xml_singlerepeat") row = cursor.fetchall() self.assertEquals(len(row),0) cursor.execute("SELECT * FROM schema_remdomain_xml_singlerepeat_root_userid") row = cursor.fetchone() self.assertEquals(row,None) cursor.execute("SELECT * FROM schema_remdomain_xml_nestedrepeats") row = cursor.fetchone() self.assertEquals(row,None) cursor.execute("SELECT * FROM schema_remdomain_xml_nestedrepeats_root_nested") row = cursor.fetchone() self.assertEquals(row,None)
def testSaveFormData_10(self): """ Test nested repeated form definition created and data saved """ formdefmodel = create_xsd_and_populate("6_nestedrepeats.xsd", "6_nestedrepeats.xml", self.domain) formdefmodel_2 = create_xsd_and_populate("data/9_nestedrepeats_2.xsd", "data/9_nestedrepeats_2.xml", self.domain) formdefmodel_3 = create_xsd_and_populate("data/10_other_v3.xsd", "data/10_other_v3.xml", self.domain) try: cursor = connection.cursor() cursor.execute("SELECT * FROM schema_versioneddomain_xml_nestedrepeats") row = cursor.fetchone() self.assertEquals(row[9],"foo") self.assertEquals(row[10],"bar") self.assertEquals(row[11],"yes") self.assertEquals(row[12],"no") cursor.execute("SELECT * FROM schema_versioneddomain_xml_nestedrepeats_root_nested") row = cursor.fetchall() self.assertEquals(row[0][1],"userid0") self.assertEquals(row[0][2],"deviceid0") if is_configured_realsql(): self.assertEquals(row[0][3],datetime(2009,10,9,11,4,30) ) self.assertEquals(row[0][4],datetime(2009,10,9,11,9,30) ) else: self.assertEquals(row[0][3],"2009-10-9 11:04:30" ) self.assertEquals(row[0][4],"2009-10-9 11:09:30" ) self.assertEquals(row[0][5],1) self.assertEquals(row[1][1],"userid2") self.assertEquals(row[1][2],"deviceid2") if is_configured_realsql(): self.assertEquals(row[1][3],datetime(2009,11,12,11,11,11) ) self.assertEquals(row[1][4],datetime(2009,11,12,11,16,11) ) else: self.assertEquals(row[1][3],"2009-11-12 11:11:11" ) self.assertEquals(row[1][4],"2009-11-12 11:16:11" ) self.assertEquals(row[1][5],1) finally: manager = XFormManager() manager.remove_schema(formdefmodel.id) manager.remove_schema(formdefmodel_2.id) manager.remove_schema(formdefmodel_3.id)
def testRepostingPreservesData(self): """Testing reposting entire schemas.""" form = create_xsd_and_populate("data/pf_followup.xsd", "data/pf_followup_1.xml", self.domain) original_id = form.id populate("data/pf_followup_2.xml", self.domain) # sanity checks to make sure things are behaving normally self.assertEqual(1, FormDefModel.objects.count()) self.assertEqual(2, Metadata.objects.count()) original_meta_ids = [meta.id for meta in Metadata.objects.all()] cursor = connection.cursor() cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0]) # repost - numbers should be the same, but the ids should all be different manager = XFormManager() new_form = manager.repost_schema(form) self.assertEqual(1, FormDefModel.objects.count()) # compare basic form properties for field in FormDefModel._meta.fields: if field.name not in ("id", "xsd_file_location", "element"): self.assertEqual(getattr(form, field.name), getattr(new_form, field.name), "Field %s was not successfully migrated. Previous value: %s, new value: %s" \ % (field.name, getattr(form, field.name), getattr(new_form, field.name))) # check metadata self.assertEqual(2, Metadata.objects.count()) self.assertNotEqual(original_id, new_form.id) for meta in Metadata.objects.all(): self.assertFalse(meta.id in original_meta_ids) # check parsed data cursor = connection.cursor() cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0])