def _get_merged_schema(self, form_name1, form_name2): form_xml = self.get_xml(form_name1) form_xml2 = self.get_xml(form_name2) schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1) schema2 = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml2), ['en'], self.app_id, 2) return FormExportDataSchema._merge_schemas(schema, schema2)
def _get_merged_schema(self, form_name1, form_name2): form_xml = self.get_xml(form_name1) form_xml2 = self.get_xml(form_name2) schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], 1 ) schema2 = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml2), ['en'], 2 ) return FormExportDataSchema._merge_schemas(schema, schema2)
def test_xform_parsing_with_repeat_group(self): form_xml = self.get_xml('repeat_group_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 2) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) self.assertEqual(group_schema.path, MAIN_TABLE) form_items = [item for item in group_schema.items if item.tag is None] self.assertEqual(form_items[0].path, [PathNode(name='form'), PathNode(name='question1')]) self.assertEqual(form_items[1].path, [PathNode(name='form'), PathNode(name='zendquestion')]) group_schema = schema.group_schemas[1] self.assertEqual(len(group_schema.items), 1) self.assertEqual( group_schema.path, [PathNode(name='form'), PathNode(name='question3', is_repeat=True)] ) self.assertEqual( group_schema.items[0].path, [PathNode(name='form'), PathNode(name='question3', is_repeat=True), PathNode(name='question4')] )
def test_xform_parsing_with_stock_questions(self): form_xml = self.get_xml('stock_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 6) self.assertTrue(all([item.doc_type == 'StockItem' for item in group_schema.items])) for parent_attr in ['@type', '@entity-id', '@date', '@section-id']: self.assertTrue(any(map( lambda item: item.path == [ PathNode(name='form'), PathNode(name='balance:balance_one'), PathNode(name=parent_attr), ], group_schema.items, ))) for entry_attr in ['@id', '@quantity']: self.assertTrue(any(map( lambda item: item.path == [ PathNode(name='form'), PathNode(name='balance:balance_one'), PathNode(name='entry'), PathNode(name=entry_attr), ], group_schema.items, )))
def test_xform_parsing_with_repeat_group(self): form_xml = self.get_xml('repeat_group_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), [], ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 2) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) self.assertEqual(group_schema.path, MAIN_TABLE) form_items = filter(lambda item: item.tag is None, group_schema.items) self.assertEqual(form_items[0].path, [PathNode(name='form'), PathNode(name='question1')]) self.assertEqual(form_items[1].path, [PathNode(name='form'), PathNode(name='zendquestion')]) group_schema = schema.group_schemas[1] self.assertEqual(len(group_schema.items), 1) self.assertEqual( group_schema.path, [PathNode(name='form'), PathNode(name='question3', is_repeat=True)] ) self.assertEqual( group_schema.items[0].path, [PathNode(name='form'), PathNode(name='question3', is_repeat=True), PathNode(name='question4')] )
def test_xform_parsing_with_stock_questions(self): form_xml = self.get_xml('stock_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), [], ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 6) self.assertTrue(all(map(lambda item: item.doc_type == 'StockItem', group_schema.items))) for parent_attr in ['@type', '@entity-id', '@date', '@section-id']: self.assertTrue(any(map( lambda item: item.path == [ PathNode(name='form'), PathNode(name='balance:balance_one'), PathNode(name=parent_attr), ], group_schema.items, ))) for entry_attr in ['@id', '@quantity']: self.assertTrue(any(map( lambda item: item.path == [ PathNode(name='form'), PathNode(name='balance:balance_one'), PathNode(name='entry'), PathNode(name=entry_attr), ], group_schema.items, )))
def test_labels_in_xform(self): form_xml = self.get_xml('form_with_labels') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.items[0].path, [PathNode(name='form'), PathNode(name='label')]) self.assertIsInstance(group_schema.items[0], LabelItem)
def test_basic_xform_parsing(self): form_xml = self.get_xml('basic_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) self.assertEqual(group_schema.items[0].path, ['data', 'question1']) self.assertEqual(group_schema.items[1].path, ['data', 'question2'])
def test_labels_in_xform(self): form_xml = self.get_xml('form_with_labels') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.items[0].path, [PathNode(name='form'), PathNode(name='label')]) self.assertIsInstance(group_schema.items[0], LabelItem)
def test_xform_parsing_with_multiple_choice(self): form_xml = self.get_xml('multiple_choice_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) self.assertEqual(group_schema.items[0].path, ['data', 'question1']) self.assertEqual(group_schema.items[1].path, ['data', 'question2']) self.assertEqual(group_schema.items[1].options[0].value, 'choice1') self.assertEqual(group_schema.items[1].options[1].value, 'choice2')
def test_basic_xform_parsing(self): form_xml = self.get_xml('basic_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) form_items = [item for item in group_schema.items if item.tag is None] self.assertEqual(form_items[0].path, [PathNode(name='form'), PathNode(name='question1')]) self.assertEqual(form_items[1].path, [PathNode(name='form'), PathNode(name='question2')])
def test_basic_xform_parsing(self): form_xml = self.get_xml('basic_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) form_items = [item for item in group_schema.items if item.tag is None] self.assertEqual(form_items[0].path, [PathNode(name='form'), PathNode(name='question1')]) self.assertEqual(form_items[1].path, [PathNode(name='form'), PathNode(name='question2')])
def test_xform_parsing_with_multiple_choice(self): form_xml = self.get_xml('multiple_choice_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), [], ['en'], self.app_id, 1) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2) form_items = filter(lambda item: item.tag is None, group_schema.items) self.assertEqual(form_items[0].path, [PathNode(name='form'), PathNode(name='question1')]) self.assertEqual(form_items[1].path, [PathNode(name='form'), PathNode(name='question2')]) self.assertEqual(form_items[1].options[0].value, 'choice1') self.assertEqual(form_items[1].options[1].value, 'choice2')
def test_xform_parsing_with_multiple_choice(self): form_xml = self.get_xml('multiple_choice_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 1) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 2 + len(MAIN_TABLE_PROPERTIES)) form_items = filter(lambda item: item.tag is None, group_schema.items) self.assertEqual(form_items[0].path, ['form', 'question1']) self.assertEqual(form_items[1].path, ['form', 'question2']) self.assertEqual(form_items[1].options[0].value, 'choice1') self.assertEqual(form_items[1].options[1].value, 'choice2')
def test_xform_parsing_with_repeat_group(self): form_xml = self.get_xml('repeat_group_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], 1 ) self.assertEqual(len(schema.group_schemas), 2) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.path, None) self.assertEqual(group_schema.items[0].path, ['data', 'question1']) group_schema = schema.group_schemas[1] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.path, ['data', 'question3']) self.assertEqual(group_schema.items[0].path, ['data', 'question3', 'question4'])
def test_xform_parsing_with_repeat_group(self): form_xml = self.get_xml('repeat_group_form') schema = FormExportDataSchema._generate_schema_from_xform( XForm(form_xml), ['en'], self.app_id, 1 ) self.assertEqual(len(schema.group_schemas), 2) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1 + len(MAIN_TABLE_PROPERTIES)) self.assertEqual(group_schema.path, MAIN_TABLE) form_items = filter(lambda item: item.tag is None, group_schema.items) self.assertEqual(form_items[0].path, ['form', 'question1']) group_schema = schema.group_schemas[1] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.path, ['form', 'question3']) self.assertEqual(group_schema.items[0].path, ['form', 'question3', 'question4'])