def testSaveFormData_BasicFormAndElementDefModels(self): """ Test that the correct child/parent ids and tables are created """ create_xsd_and_populate("5_singlerepeat.xsd", "5_singlerepeat.xml", self.domain) create_xsd_and_populate("6_nestedrepeats.xsd", "6_nestedrepeats.xml", self.domain) fd = FormDefModel.objects.get(form_name="schema_basicdomain_xml_singlerepeat") # test the children tables are generated with the correct parent edds = ElementDefModel.objects.filter(form=fd) self.assertEquals(len(edds),2) # test that the top elementdefmodel has itself as a parent top_edm = ElementDefModel.objects.get(id=fd.element.id) self.assertEquals(None, top_edm.parent) # test that table name is correct self.assertEquals(top_edm.table_name, "schema_basicdomain_xml_singlerepeat") # test for only one child table edds = top_edm.children.all() self.assertEquals(len(edds),1) # test that that child table's parent is 'top' self.assertEquals(edds[0].parent,top_edm) self.assertEquals(edds[0].xpath,"root/UserID") self.assertEquals(edds[0].table_name,"schema_basicdomain_xml_singlerepeat_root_userid") # do it all again for a second table (to make sure counts are right) fd = FormDefModel.objects.get(form_name="schema_basicdomain_xml_nestedrepeats") edds = ElementDefModel.objects.filter(form=fd) self.assertEquals(len(edds),2) top_edm = ElementDefModel.objects.get(id=fd.element.id) self.assertEquals(None, top_edm.parent) self.assertEquals(top_edm.table_name, "schema_basicdomain_xml_nestedrepeats") edds = top_edm.children.all() self.assertEquals(len(edds),1) self.assertEquals(edds[0].parent,top_edm) self.assertEquals(edds[0].xpath,"root/nested") self.assertEquals(edds[0].table_name,"schema_basicdomain_xml_nestedrepeats_root_nested")
def testCrossDomainFormLookups(self): """Testing posting forms to the same xmlns in different domains.""" form = create_xsd_and_populate("data/pf_followup.xsd", "data/pf_followup_1.xml", self.domain) cursor = connection.cursor() # we created one, make sure that's the case cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(1, cursor.fetchone()[0]) # create another domain and post to it, make sure it doesnt' # register other_domain = Domain.objects.create(name="otherdomain") form = populate("data/pf_followup_2.xml", other_domain) cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(1, cursor.fetchone()[0]) # register on the second domain. should be 1 and 1 now. form = create_xsd_and_populate("data/pf_followup.xsd", "data/pf_followup_3.xml", other_domain) cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(1, cursor.fetchone()[0]) cursor.execute("SELECT count(*) FROM schema_otherdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(1, cursor.fetchone()[0]) # post to individual domains, should behave as expected form = populate("data/pf_followup_4.xml", self.domain) cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0]) cursor.execute("SELECT count(*) FROM schema_otherdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(1, cursor.fetchone()[0]) form = populate("data/pf_followup_5.xml", other_domain) cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0]) cursor.execute("SELECT count(*) FROM schema_otherdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0])
def testMetaData_1(self): create_xsd_and_populate("data/brac_chw.xsd", "data/brac_chw_1.xml", self.domain) populate("data/brac_chw_1.xml", domain=self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM xformmanager_metadata where formname='BRAC CHW visiting CHP'" ) row = cursor.fetchone() self.assertEquals(row[1],"BRAC CHW visiting CHP") self.assertEquals(row[2],"0.0.1") self.assertEquals(row[3],"P6PH9SR0TKCO6RVDL4YML1D2Y") if settings.DATABASE_ENGINE=='mysql' : self.assertEquals(row[4],datetime(2008,1,8,11,55,49)) self.assertEquals(row[5],datetime(2008,1,8,12,8,39)) else: self.assertEquals(row[4],datetime(2008,1,8,11,55,49,977)) self.assertEquals(row[5],datetime(2008,1,8,12,8,39,258)) self.assertEquals(row[6],"cary") self.assertEquals(row[7],"99") self.assertEquals(row[8],"Z6WRHCRXYQO1C1V6B2SB3RBG8") cursor.execute("SELECT * FROM schema_metadomain_brac_chw_chwvisit_v0_0_1") row = cursor.fetchone() self.assertEquals(row[0],1) # checks to make sure that non-standard meta fields remain in the generated data table self.assertEquals(row[3],"0.0.5") # this is commcareversion number self.assertEquals(row[10],"worker") self.assertEquals(row[11],3) """ use these when we finally remove meta info from generate data tables
def testSaveFormData_6(self): """ Test nested repeated form definition created and data saved """ create_xsd_and_populate("6_nestedrepeats.xsd", "6_nestedrepeats.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_basicdomain_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_basicdomain_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)
def testIsSchemaRegistered(self): """ given a form and version is that form registered """ create_xsd_and_populate("5_singlerepeat.xsd", domain=self.domain) create_xsd_and_populate("data/8_singlerepeat_2.xsd", domain=self.domain) self.assertTrue(FormDefModel.is_schema_registered("xml_singlerepeat", self.domain)) self.assertTrue(FormDefModel.is_schema_registered("xml_singlerepeat", self.domain,2)) self.assertFalse(FormDefModel.is_schema_registered("xml_singlerepeat", self.domain,3)) self.assertFalse(FormDefModel.is_schema_registered("nonexistent", self.domain,1))
def testSaveGeoFormDataFromXsd(self): """Test form definition with geopoint""" filename = replace_in_file(self.instance_filename, "REPLACE_ME", "%s %s %s %s" % (LAT, LON, ALT, ACC)) create_xsd_and_populate("data/geopoint/geopoint_form.xsd", filename, self.domain) self._check_row()
def testSaveGeoDataNoNode(self): """Test form definition with geopoint - no submitted data""" filename = replace_in_file(self.instance_filename, "<GPSCOORDS_data>REPLACE_ME</GPSCOORDS_data>", "") create_xsd_and_populate("data/geopoint/geopoint_form.xhtml", filename, self.domain) self._check_row(None, None, None, None)
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 testSaveFormData_3(self): """ Test deep form definition created and data saved """ create_xsd_and_populate("3_deep.xsd", "3_deep.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_basicdomain_xml_deep") row = cursor.fetchone() self.assertEquals(row[9],"userid0") self.assertEquals(row[10],"abc") self.assertEquals(row[11],"xyz") self.assertEquals(row[12],222) self.assertEquals(row[13],"otherchild1")
def testNoMetadata(self): logging.warn("EXPECTING A 'No metadata found' ERROR NOW:") create_xsd_and_populate("data/brac_chp.xsd", "data/brac_chp_nometa.xml", self.domain) # raises a Metadata.DoesNotExist error on fail Metadata.objects.get() cursor = connection.cursor() cursor.execute("SELECT * FROM schema_metadomain_test_no_meta") row = cursor.fetchone() self.assertEquals(row[0],1) self.assertEquals(int(row[10]),132) # this is commcareversion number self.assertEquals(row[11],"EDINA KEJO")
def testSaveFormData_4(self): """ Test very deep form definition created and data saved """ create_xsd_and_populate("4_verydeep.xsd", "4_verydeep.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_basicdomain_xml_verydeep") row = cursor.fetchone() 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)
def testSaveFormData_2(self): """ Test types created and data saved. Currently only supported in MYSQL. """ cursor = connection.cursor() create_xsd_and_populate("2_types.xsd", "2_types.xml", self.domain) if is_configured_mysql(): cursor.execute("DESCRIBE schema_basicdomain_xml_types") row = cursor.fetchall() self.assertEquals(row[9][1],"varchar(255)") self.assertEquals(row[10][1],"int(11)") self.assertEquals(row[11][1],"int(11)") self.assertEquals(row[12][1],"decimal(5,2)") self.assertEquals(row[13][1],"double") self.assertEquals(row[14][1],"date") self.assertEquals(row[15][1],"time") self.assertEquals(row[16][1],"datetime") self.assertEquals(row[17][1],"tinyint(1)") self.assertEquals(row[18][1],"tinyint(1)") else: pass cursor.execute("SELECT * FROM schema_basicdomain_xml_types") row = cursor.fetchone() self.assertEquals(row[9],"userid0") self.assertEquals(row[10],111) self.assertEquals(row[11],222) if is_configured_realsql(): self.assertEquals(row[12],Decimal("3.20")) else: self.assertEquals( str(float(row[8])), "3.2" ) self.assertEquals(row[13],2002.09) if is_configured_realsql(): self.assertEquals(row[14],date(2002,9,24) ) self.assertEquals(row[15],time(12,24,48)) self.assertEquals(row[16],datetime(2007,12,31,23,59,59) ) else: self.assertEquals(row[14],"2002-09-24" ) self.assertEquals(row[15],"12:24:48") self.assertEquals(row[16],"2007-12-31 23:59:59" ) self.assertEquals(row[17],None ) self.assertEquals(row[18],None ) self.assertEquals(row[19],1 ) self.assertEquals(row[20],None ) self.assertEquals(row[21],1 ) self.assertEquals(row[22],None ) self.assertEquals(row[23],1 ) self.assertEquals(row[24],1 ) self.assertEquals(row[25],None ) self.assertEquals(row[26],None ) self.assertEquals(row[27],None ) self.assertEquals(row[28],None )
def test4DeleteSubmissionMetadata(self): """ This is more a sanity check than anything else. Makes sure Django deletes the entire dependency chain for Submission objects. """ 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) instance_5.delete() instance_6.delete() # receiver unit tests already check for count([Submission|Attachment]) = 0 # so here we test for metadata deletion count = Metadata.objects.all().count() self.assertEquals(0,count)
def testGetFormDef(self): """ Test get_formdef """ create_xsd_and_populate("5_singlerepeat.xsd", domain=self.domain) create_xsd_and_populate("data/8_singlerepeat_2.xsd", domain=self.domain) formdef = FormDefModel.get_formdef("xml_singlerepeat", self.domain) self.assertTrue(formdef.version is None) self.assertTrue(formdef.uiversion is None) self.assertEqual(len(formdef.root.child_elements), 5) formdef2 = FormDefModel.get_formdef("xml_singlerepeat", self.domain, "2") self.assertTrue(formdef2.version == 2) self.assertTrue(formdef2.uiversion == 3) self.assertEqual(len(formdef2.root.child_elements), 5) nonexistant = FormDefModel.get_formdef("nonexistent", self.domain, "1") self.assertTrue(nonexistant is None)
def testDuplicates(self): create_xsd_and_populate("data/pf_followup.xsd", domain=self.domain) running_count = 0 self.assertEqual(running_count, len(Metadata.objects.all())) for i in range(1, 6): populate("data/pf_followup_%s.xml" % i, domain=self.domain) # the first one should update the count. The rest should not running_count = running_count + 1 self.assertEqual(running_count, len(Metadata.objects.all())) for j in range(0, 3): logging.warn("EXPECTING A 'duplicate submission' ERROR NOW:") populate("data/pf_followup_%s.xml" % i, domain=self.domain) self.assertEqual(running_count, len(Metadata.objects.all()))
def testMetaData_3(self): create_xsd_and_populate("data/pf_followup.xsd", "data/pf_followup_1.xml", self.domain) populate("data/pf_followup_2.xml", domain=self.domain) create_xsd_and_populate("data/pf_new_reg.xsd", "data/pf_new_reg_1.xml", self.domain) populate("data/pf_new_reg_2.xml", domain=self.domain) create_xsd_and_populate("data/pf_ref_completed.xsd", "data/pf_ref_completed_1.xml", self.domain) populate("data/pf_ref_completed_2.xml", domain=self.domain) create_xsd_and_populate("data/mvp_mother_reg.xsd", "data/mvp_mother_reg_1.xml", self.domain) populate("data/mvp_mother_reg_2.xml", domain=self.domain) populate("data/mvp_mother_reg_3.xml", domain=self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM xformmanager_metadata order by id") row = cursor.fetchall() latest_attachment_id = ( Attachment.objects.latest('id') ).id latest_formdefmodel_id = ( FormDefModel.objects.latest('id') ).id self.assertEquals(row[0][1],"PathfinderFollowUpVisit") self.assertEquals(row[0][9],latest_attachment_id-8) self.assertEquals(row[0][10],1) self.assertEquals(row[0][11],latest_formdefmodel_id-3) self.assertEquals(row[1][1],"PathfinderFollowUpVisit") self.assertEquals(row[2][1],"PathfinderRegistratonVisit") self.assertEquals(row[3][1],"PathfinderRegistratonVisit") self.assertEquals(row[3][9],latest_attachment_id-5) self.assertEquals(row[3][10],2) self.assertEquals(row[3][11],latest_formdefmodel_id-2) self.assertEquals(row[4][1],"PathfinderReferralVisit") self.assertEquals(row[5][1],"PathfinderReferralVisit") self.assertEquals(row[6][1],"XOLIJZVDJKLORBQUABFLVGLEA") self.assertEquals(row[7][1],"XOLIJZVDJKLORBQUABFLVGLEA") self.assertEquals(row[8][1],"XOLIJZVDJKLORBQUABFLVGLEA") self.assertEquals(row[8][9],latest_attachment_id) self.assertEquals(row[8][10],3) self.assertEquals(row[8][11],latest_formdefmodel_id)
def testSubmissionCount(self): create_xsd_and_populate("data/pf_followup.xsd", domain=self.domain) today = datetime.now().date() tomorrow = today + timedelta(days=1) day_after_tomorrow = today + timedelta(days=2) yesterday = today - timedelta(days=1) for i in range(1, 6): submission = populate("data/pf_followup_%s.xml" % i, domain=self.domain) meta = Metadata.objects.get(attachment=submission.xform) self.assertEqual(i, meta.get_submission_count(today, tomorrow, False)) self.assertEqual(1, meta.get_submission_count(today, tomorrow, True)) self.assertEqual(0, meta.get_submission_count(yesterday, today, False)) self.assertEqual(0, meta.get_submission_count(tomorrow, day_after_tomorrow, False)) self.assertEqual(i, meta.get_submission_count(yesterday, day_after_tomorrow, False)) self.assertEqual(1, meta.get_submission_count(yesterday, day_after_tomorrow, True))
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 test3RemoveSchema(self): """ Test removing a more complicated schema """ schema_remdomain_model = create_xsd_and_populate("6_nestedrepeats.xsd", "6_nestedrepeats.xml", self.domain) num_handled = SubmissionHandlingOccurrence.objects.all().count() self.assertEquals(1,num_handled) all_meta = Metadata.objects.all() count = all_meta.count() self.assertEquals(1,count) attachment = all_meta[0].attachment su = StorageUtility() su.remove_schema(schema_remdomain_model.id) # Test that children have become orphans num_handled = SubmissionHandlingOccurrence.objects.all().count() self.assertEquals(0,num_handled) count = Metadata.objects.all().count() self.assertEquals(0,count) self.assertTrue(attachment.submission.is_orphaned()) # TODO fix the db call to be more standard here cursor = connection.cursor() cursor.execute("SELECT * FROM xformmanager_formdefmodel") row = cursor.fetchone() self.assertEquals(row,None) cursor.execute("SELECT * FROM xformmanager_elementdefmodel") row = cursor.fetchone() self.assertEquals(row,None) if settings.DATABASE_ENGINE == 'mysql': cursor.execute("show tables like 'schema_remdomain_xml_nestedrepeats%'") row = cursor.fetchone() self.assertEquals(row,None)
def testMetaData_2(self): create_xsd_and_populate("data/brac_chp.xsd", "data/brac_chp_1.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM xformmanager_metadata where formname='BRACCHPHomeVisit'" ) row = cursor.fetchone() self.assertEquals(row[1],"BRACCHPHomeVisit") self.assertEquals(row[2],"0.0.1") self.assertEquals(row[3],"WK13O6ST8SWZVXLAI68B9YZWK") if settings.DATABASE_ENGINE=='mysql' : self.assertEquals(row[4],datetime(2009,4,30,11,17,25)) self.assertEquals(row[5],datetime(2009,4,30,11,21,29)) else: self.assertEquals(row[4],datetime(2009,4,30,11,17,25,89)) self.assertEquals(row[5],datetime(2009,4,30,11,21,29,512)) self.assertEquals(row[6],"lucy") self.assertEquals(row[7],"6") self.assertEquals(row[8],"RW07SHOPTWGAOJKUQJJJN215D")
def testSaveFormData_5(self): """ Test repeated form definition created and data saved """ create_xsd_and_populate("5_singlerepeat.xsd", "5_singlerepeat.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_basicdomain_xml_singlerepeat") row = cursor.fetchone() self.assertEquals(row[9],"deviceid0") self.assertEquals(row[10],"starttime") self.assertEquals(row[11],"endtime") cursor.execute("SELECT * FROM schema_basicdomain_xml_singlerepeat_root_userid") 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)
def testSaveGeoDataMissingFields(self): """Test form definition with geopoint - EXTRA FIELDS""" filename = replace_in_file(self.instance_filename, "REPLACE_ME", "%s" % (LAT)) create_xsd_and_populate("data/geopoint/geopoint_form.xhtml", filename, self.domain) self._check_row(LAT, None, None, None) filename = replace_in_file(self.instance_filename, "REPLACE_ME", "%s %s" % (LAT, LON)) populate(filename, self.domain) self._check_row(LAT, LON, None, None) filename = replace_in_file(self.instance_filename, "REPLACE_ME", "%s %s %s" % (LAT, LON, ALT)) populate(filename, self.domain) self._check_row(LAT, LON, ALT, None)
def testDuplicateTag(self): form = create_xsd_and_populate("data/duplicate_tag.xsd", "data/duplicate_tag.xml", self.domain) self.assertEqual(self.domain, form.domain) self.assertTrue(self.domain.name in form.table_name) cursor = connection.cursor() cursor.execute("SELECT * FROM %s" % form.form_name) row = cursor.fetchone() self.assertEquals(row[len(row) - 2],"y")
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_9(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/9_nestedrepeats_3.xsd", "data/9_nestedrepeats_3.xml", self.domain) formdefmodel_4 = create_xsd_and_populate("data/9_nestedrepeats_4.xsd", "data/9_nestedrepeats_4.xml", self.domain) try: # add checks for metadata.uiversion, version for i in (2,3,4): cursor = connection.cursor() cursor.execute("SELECT * FROM schema_versioneddomain_xml_nestedrepeats_%s" % i) 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_%s" % i) 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) manager.remove_schema(formdefmodel_4.id)
def testRepeatMultiples(self): """ Test multiple repeated form definition created and data saved """ create_xsd_and_populate("data/repeat_multiple.xsd", "data/repeat_multiple_1.xml", self.domain) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_repeatdomain_xml_singlerepeat") rows = cursor.fetchall() self.assertEqual(1, len(rows)) row = rows[0] row_id = row[0] self.assertEquals(1, row_id) self.assertEquals(row[9], "starttime") self.assertEquals(row[10], "endtime") cursor.execute("SELECT * FROM schema_repeatdomain_xml_singlerepeat_root_userid") 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], row_id) self.assertEquals(row[1][2], row_id) self.assertEquals(row[2][2], row_id) cursor.execute("SELECT * FROM schema_repeatdomain_xml_singlerepeat_root_my_device") row = cursor.fetchall() self.assertEquals(row[0][1], "deviceid0") self.assertEquals(row[1][1], "deviceid1") self.assertEquals(row[2][1], "deviceid2") self.assertEquals(row[0][2], row_id) self.assertEquals(row[1][2], row_id) self.assertEquals(row[2][2], row_id) # test a second repeat to make sure child ids link correctly populate("data/repeat_multiple_2.xml", self.domain) cursor.execute("SELECT distinct parent_id FROM schema_repeatdomain_xml_singlerepeat_root_my_device") rows = cursor.fetchall() self.assertEqual(2, len(rows)) ids = [row[0] for row in rows] self.assertTrue(1 in ids) self.assertTrue(2 in ids) cursor.execute("SELECT * FROM schema_repeatdomain_xml_singlerepeat_root_my_device where parent_id=2") rows = cursor.fetchall() self.assertEqual(3, len(rows)) for row in rows: self.assertTrue(row[1].startswith("second"))
def testSaveExtraValues(self): """Test form definition with geopoint""" filename = replace_in_file(self.instance_filename, "REPLACE_ME", "%s %s %s %s %s" % (LAT, LON, ALT, ACC, "0.211")) # unfortunately this doesn't fail hard, so we just check for the # lack of a row to confirm that it didn't succeed form = create_xsd_and_populate("data/geopoint/geopoint_form.xhtml", filename, self.domain) cursor = connection.cursor() cursor.execute("SELECT count(*) FROM schema_geodomain_moz_sarahdemo_2") self.assertEqual(0, cursor.fetchone()[0] )
def testSaveFormData_1(self): """ Test basic form definition created and data saved """ form = create_xsd_and_populate("1_basic.xsd", "1_basic.xml", self.domain) self.assertEqual(self.domain, form.domain) self.assertTrue(self.domain.name in form.table_name) cursor = connection.cursor() cursor.execute("SELECT * FROM schema_basicdomain_xml_basic") row = cursor.fetchone() self.assertEquals(row[0],1) self.assertEquals(row[9],"userid0") self.assertEquals(row[10],"deviceid0") self.assertEquals(row[11],"starttime") self.assertEquals(row[12],"endtime")
def testSubmitHandling(self): create_xsd_and_populate("data/pf_followup.xsd", domain=self.domain) self.assertEqual(0, len(Metadata.objects.all())) self.assertEqual(0, len(Submission.objects.all())) self.assertEqual(0, len(SubmissionHandlingOccurrence.objects.all())) # this should create a linked submission populate("data/pf_followup_1.xml", domain=self.domain) self.assertEqual(1, len(Metadata.objects.all())) self.assertEqual(1, len(Submission.objects.all())) submission = Submission.objects.all()[0] self.assertEqual(1, len(SubmissionHandlingOccurrence.objects.all())) way_handled = SubmissionHandlingOccurrence.objects.all()[0] self.assertEqual(submission, way_handled.submission) # add check for a count from this user, equal to one self.assertEqual("1", way_handled.message) self.assertEqual("xformmanager", way_handled.handled.app) self.assertEqual("instance_data", way_handled.handled.method) self.assertFalse(submission.is_orphaned()) # these should NOT create a linked submission. No schema logging.warn("\nEXPECTING AN ERROR NOW:") populate("data/pf_new_reg_1.xml", domain=self.domain) logging.warn("EXPECTING AN ERROR NOW:") populate("data/pf_new_reg_2.xml", domain=self.domain) logging.warn("EXPECTING AN ERROR NOW:") populate("data/pf_ref_completed_1.xml", domain=self.domain) self.assertEqual(1, len(Metadata.objects.all())) self.assertEqual(4, len(Submission.objects.all())) for new_submission in Submission.objects.all(): if new_submission == submission: self.assertFalse(new_submission.is_orphaned()) else: self.assertTrue(new_submission.is_orphaned()) self.assertEqual(1, len(SubmissionHandlingOccurrence.objects.all())) self.assertEqual(way_handled, SubmissionHandlingOccurrence.objects.all()[0])
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)